You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:15:03