用户:
机敏的月见草VbEk查看:4 回复:9 评论:4 创建时间:2021-12-10T07:22:41
在代码岛中,可以用onClick()事件触发攻击。但有时候这种攻击方式会很单调。如果用发射实体碰撞攻击,方便做出更多特效。所以掌握如何发射实体进行碰撞攻击,是一项非常重要的技能。
代码如下:
Meshscale = [ 0.02, 0.02, 0.02 ] //实体的缩放比例,根据原模型大小而设,一般情况设为[ 1/16, 1/16, 1/16]
world.onPress(async ({ entity, button, raycast }) => {
if (button === "action0") {
r = raycast //r为射线检测
const ball = world.createEntity({
mesh: 'mesh/球.vb',
meshScale: Meshscale,
collides: true, // 开启碰撞
gravity: false, // 不受重力影响
position: r.origin, // 在射线原点生成球
velocity: r.direction.scale(2), // 球的初速度设为玩家射喵射方向向量的2倍
})
ball.id = entity.player.userKey //球的id设置成玩家userKey, 便于碰撞过滤器识别
ball.onEntityContact(({ other }) => { //每当球碰到另一个实体
if (other.isPlayer){ //如果实体为玩家
other.hurt(20) //被碰实体受20点伤害
}
})
ball.onVoxelContact(({ voxel }) => {
ball.destroy()
}
await sleep(5000) //等5秒后自动清除球体
ball.destroy()
}
})
下面是过滤器开启
在玩家加入时执行代码
entity.enableDamage = true
entity.id = entity.player.userKey //玩家自身id也设成userKey
world.addCollisionFilter('#' + entity.id, '#' + entity.id) //过滤所有id为玩家userKey之间的碰撞
这里注意一下,我们在设置球的生成位置position时用的是raycast.origin。但如果直接设为entity.position玩家位置,你就会发现,球实际射中的位置会比瞄准的位置低一点。这是因为,在岛3中,射喵射的位置并不就是玩家位置,而是比原玩家位置稍微高一点的地方,所以直接用entity.position瞄准会有一定误差。
下面讲讲如何做投掷效果的运动。可以理解为先有一个投出方向的力,然后受重力影响,向下的速度越来越大。在岛3中,也就是增加-y方向的速度。
可以用onTick()循环实现
f=-0.04
const fall = world.onTick(() => {
ball.velocity = ball.velocity.add(new Box3Vector3(0, f, 0))
})
f可用与调整下降速度,f越小下降速度增加越大。
啸着玩。imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E5%8A%A0%E6%B2%B9.gif"alt="emotion_编程猫_加油"
点赞0
评论
FML饭米粒imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E8%B0%A2%E8%B0%A2%E8%80%81%E6%9D%BF.gif"alt="emotion_编程猫_谢谢老板"
点赞0
评论
东方绝尘imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E8%B0%A2%E8%B0%A2%E8%80%81%E6%9D%BF.gif"alt="emotion_编程猫_谢谢老板"
点赞0
评论