用户:
凌_墨水查看:643 回复:18 评论:5 创建时间:2021-08-15T17:20:16
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
说到子弹效果
很多人头上都是雾
这个思路好繁琐
要计算朝向要BALABALA一大堆
那可能是因为不了解direction
可能有些大佬不是这样)
我开始也很迷
但是很多人忽略了API一个经典实例
这个实例曾被用在各大喵战地图中
没错
就是它:

这段代码运用direction直接计算朝向
根本不需要我们动脑
所以
子弹代码如下
world.onPlayerJoin(({entity})=>{
entity.player.onPress(async({ button, raycast:{ hitEntity, direction } }) => {
if (button !== 'action0') {//熟悉的东西
return;
}
const e = world.createEntity({//创造子弹实体,这里模型叫做“子弹”
mesh: 'mesh/子弹.vb'
});
e.position.copy(entity.position)//将子弹拉到玩家的位置(这里需要注意,子弹和玩家需要增加过滤器,否则会被玩家自身挤飞)
e.velocity.x += direction.x;//它的发射各角度就相当于PVP时击飞玩家的角度,角度是一样的
e.velocity.y += 0.5;//无需多言
e.velocity.z += direction.z;//无需多言
await sleep(2000)//等待2000毫秒(即2秒)
e.destroy()//删除实体,避免实体过多导致的卡顿
})
})
懂了吧
API的教程还是非常能深入
我们做代码效果各个方面的
所以…………

不喜勿喷aa
凌_墨水话说子弹模型面向……把子弹换成球不就好了)![]()
点赞0
评论
敲了我就是这么做的
围城一下
不用啊,直接设一下Quat,然后e.meshOrientation = Quat.rotateX(Math.atan2(e.velocity.y,Math.sqrt(e.velocity.x**2+e.velocity.z**2))).rotateY(Math.atan2(e.velocity.z,e.velocity.x))
代码太长)懒得写
凌_墨水中间有一行说错了,其实玩家飞出和子弹飞出是有区别的中间y轴的velocity应为 e.velocity.y+=direction.y 需要改动
点赞2
评论
e.velocity.y+=direction.y代码版有BUG无法调出,请见谅