Lv.1
在 【每日一个岛3建图小技巧】拥有一个跟随的皮卡丘?就决定是你啦! 中回复
交作业啦 const mscale = 1 / 16 const Quat = new Box3Quaternion(0, 0, 0, 1)
function bu喵yFollow(entity, mesh, y) { const bu喵y = world.createEntity({ mesh, position: entity.position, meshScale: [mscale, mscale, mscale], gravity: false, //不受重力影响 fixed: false, //可推移 collides: true, //可碰撞 friction: 0, //无摩擦力 mass: 0.01, //非常轻 })
const tgPos = entity.position//僚机的目标位置 const budPos = bu喵y.position//僚机的当前位置 const facing = entity.player.facingDirection//玩家的朝向 const ratio = 0.3//追随的灵敏度, 最好设在0.5左右, 1.0表示立即移到玩家位置
const dist = 2 //与玩家保持的距离 const yOffset = y //y轴位移, 保持僚机在头顶或脚下
const ticker = world.onTick(() => {
//要让小精灵跟在玩家背后, 需要计算xz轴的位移: 玩家朝向的反方向 const xOffset = -facing.x * dist const zOffset = -facing.z * dist
//当前位置与目标位置在xyz轴的差距 const xDiff = tgPos.x - budPos.x const yDiff = tgPos.y - budPos.y+3 const zDiff = tgPos.z - budPos.z
//计算xyz方向上 当前位置向目标位置靠拢的速度 const 喵 = (xDiff + xOffset) * ratio const vy = (yDiff + yOffset) * ratio const vz = (zDiff + zOffset) * ratio
bu喵y.velocity.set(喵, vy, vz)//设置僚机速度
if (bu喵y.velocity.sqrMag() > 0.005) {//速度要足够大, 才触发转向, 防止抖动 bu喵y.meshOrientation = Quat.rotateY(Math.atan2(zDiff, xDiff)) //让小精灵一直面向玩家 } })
return () => { ticker.cancel() //关掉tick循环 bu喵y.destroy() //移除僚机实体 } }
world.onPlayerJoin(({ entity }) => { entity.setPet = bu喵yFollow(entity, 'mesh/Q.vb', -1) //给玩家增加宠物 })
world.onPlayerLeave(({ entity }) => { //玩家离开地图时, 切记一定要关掉tick循环以及销毁小精灵实体, 否则随着人数增加, 服务器积累到一定程度就会崩溃 entity.setPet() //干掉宠物 }) }
2021-09-21T15:38:35 点赞:0
在 惊奇!惊奇!惊奇! 中回复
请不要惊讶。TA是女的这个我早就知道了,她的真实身份就是菲比!你让我为什么这个这么说?看看这个视频就知道了。https://www.bilibili.com/video/BV1g44y1173V?spm_id_from=333.999.0.0
2021-10-02T14:32:05 点赞:1
在 你们就帮帮我吧! 中回复
imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E8%80%8D%E8%B5%96.gif"alt="emotion_编程猫_耍赖"imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E4%BC%A4%E5%BF%83.gif"alt="emotion_编程猫_伤心"
2021-10-07T15:49:42 点赞:0
在 怎么设置出身点? 中回复
for (const e of world.querySelectorAll('*')) {//遍历所有实体
if (e.id.startsWith('存档点')) {//如果当前实体名左边部分刚好是"存档点", 比如 存档点-1 存档点-2...
e.collides = true //开启碰撞
e.fixed = true //固定实体不被推移
e.meshScale = e.meshScale.scale(2) //放大2倍
e.onEntityContact(({ other }) => { //每当存档点碰到另一个实体
if (other.isPlayer) { //另一个实体是玩家
if (e.position !== other.player.spawnPoint) { // 检测当前存档点是否玩家重生点, 避免反复在同一个存档点做多余的保存
other.player.directMessage('到达新的重生点') // 给玩家发消息
other.player.spawnPoint = e.position // 喵家重生点坐标设置成存档点的坐标
}
}
})
}
}
world.onPlayerJoin(({ entity }) => {
entity.onFluidEnter(() => {//当玩家掉到水里
entity.position.copy(entity.player.spawnPoint)
entity.position.y += 4
})
})2021-11-21T17:58:28 点赞:1