- Creator 版本: 3.8.5
- 重现方式:cocos 模拟器预览
- 首个报错: 无报错
- 重现概率: 100%
玩家坐标:Vec3 {x: 2.89070987701416, y: 0, z: 0.5005103349685669},
敌人坐标:Vec3 {x: 2.3076634407043457, y: 0, z: 0.4183853268623352},
敌人向玩家移动时,计算距离distance: 1.3466376142052159,
速度是:Vec3 {x: 0.9902251476110268, y: 0, z: 0.13947815971943472} ,
这个是输出的结果,实际setLinearVelocity的就是速度Vec3的值,
首先讲一下,这里的距离1.34不是第一个出现问题的坐标,大概是在0.5+
我的模型boxcollider,size X=0.18 ,Y=0.3,Z=0.18 center x = -0.05,y=0.15 ,z=0
这个模型比较小一点,材质是用的default材质 摩擦0.8
rigidBody 的Linear Factor 是1 0 1, 转向的没问题我就不多说
Group设置正确,Type是DYNAMIC
详细说问题:
距离远的时候,移动都正常,可以正常的移动和碰撞到玩家位置,在玩家移动后,这个距离会拉大,同时敌人靠近后会执行攻击动画(动画正常播放和结束,验证过,不是动画问题),不一定会在首次移动距离到0.5的时候出现移动速度过慢的情况(看起来好像没有在跑,上面给到的速度是直接按距离计算出来归一后,默认速度是1),在尝试几次拉开一部分距离后(敌人攻击时会停留不移动,攻击完成后会执行移动),我发现敌人没有移动(看起来没有移动,实际移动的距离太小,我观察0.58的距离时,会慢慢降到0.5以内,然后执行攻击)。这个距离在0.5+的时候就算了,问题不大,关键是玩家角色会跑,距离越来越远,但是这个敌人不会跟随,就算距离再远,也不会增加速度,一旦卡在0.5+的移动速度时,只有我靠近让他攻击,才会重置。 如上,我的距离是1.34已经很近了,但是我跑到5也是一样的移动速度。
wakeup和摩擦和加大线性速度试过多不行,速度*5 在距离过近时确实可以减少一部分时间,但是依旧看起来像没有移动
代码如下:
// 获取玩家和敌人的位置
const playerPosition = this.player.node.worldPosition;
const enemyPosition = this.node.worldPosition;
// 计算距离和方向
const distance = Vec3.distance(playerPosition, enemyPosition);
const direction = new Vec3();
Vec3.subtract(direction, playerPosition, enemyPosition);
direction.y = 0; // 保持Y轴不变
direction.normalize();
// 计算目标速度 speed 是1 代码就不复制了
const velocity = new Vec3(
direction.x * speed,
direction.y * speed,
direction.z * speed
);
this.rigidBody.setLinearVelocity(velocity);