猫史档案馆


【box3】如何做出发射实体碰撞攻击和投掷轨迹运动

用户:机敏的月见草VbEk机敏的月见草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越小下降速度增加越大。


回复

上一页1 页 / 共 1下一页
啸着玩。啸着玩。

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


评论


一只双鱼座a一只双鱼座a

真不错,要的就是这个()()

点赞0


评论


FML饭米粒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


评论


该账号已被封禁该账号已被封禁

不需要啊

因为岛三有自主下落的引擎

所以你可以直接设置重力

然后设置一个向上的力

因为向上力影响不过一段时间就会往下掉

然后就会落到地面

点赞0


评论


_韩佳霖_韩佳霖

真不错,要的就是这个()

点赞0


评论


Stephan轩Stephan轩

这玩意儿我几年前就用了,而且现在我图里用的轨迹射击比你这个高级些(去火力竞技场玩玩就知道了,好吧我是来打广告的())

点赞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


评论


神秘蟑螂zl神秘蟑螂zl

但是是在头上发射的,怎样在前面一点发射?

 

点赞0


评论


海默喵_肖恩海默喵_肖恩

你似乎少了个 ) (doge

点赞0


评论