Unity 2D开发:敌人发射子弹固定在原地无法移动问题求助
子弹无法移动的问题原因及解决方法
核心问题原因
- 最常见原因:子弹脚本中
public float speed参数未在Inspector面板赋值,默认值为0,导致Vector2.MoveTowards方法无位移量,子弹静止 - 物理组件干扰:如果子弹挂载了Rigidbody2D组件,重力Scale设置过高、位置轴被约束锁定,或者Dynamic类型的刚体被物理碰撞阻挡,都会导致transform位移失效
- 逻辑判断误差:当前代码直接用
transform.position.x == target.x && transform.position.y == target.y判断是否到达目标点,浮点数计算存在精度误差,极端情况下会出现子弹卡在目标点附近无法触发销毁的问题,看起来像停在原地 - 额外逻辑问题:当前子弹仅在
Start阶段记录一次玩家位置,不会实时追踪玩家移动,只会向子弹生成瞬间的玩家位置飞行,不属于完全不动的问题,但会出现子弹飞偏的现象
对应解决方法
- 打开子弹预制体的Inspector面板,找到子弹脚本的speed参数,填入大于0的测试值(比如5~15区间)即可解决无位移问题
- 若需要子弹实时追踪玩家,将
Update中的位移逻辑改为:
transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
无需再单独记录target变量
- 检查子弹的Rigidbody2D组件(如果有挂载):
- 不需要重力影响时将重力Scale设为0
- 确认X、Y轴的位置约束没有被勾选锁定
- 不需要物理模拟时直接将刚体类型改为Kinematic,避免物理系统干扰transform位移
- 将位置相等判断改为误差容错逻辑:
if(Vector2.Distance(transform.position, target) < 0.1f) { DestroyProjectile(); }
- 确认子弹预制体没有勾选Static静态标记,静态物体位移会出现异常
内容的提问来源于stack exchange,提问作者Kikoanno
相关产品推荐
相关产品推荐

