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

Unity 2D敌人无法跟随玩家,代码是否存在问题?

问题分析与解决步骤

核心问题1:脚本类名与文件名不匹配

Unity要求C#脚本的文件名必须和类名完全一致(包括大小写),重命名文件后如果没同步修改类名,会导致脚本组件失效,敌人完全不动。比如你把文件重命名为EnemyMovement.cs,但类名还是eMovement,Unity就无法识别这个组件,代码根本不会执行。

解决:

  • 确保文件名和类名完全一致,比如文件叫EnemyMovement.cs,类名就改成:
public class EnemyMovement : MonoBehaviour
{
    // 原有代码...
}
  • 重新把脚本挂载到敌人GameObject上(如果之前的组件变成Missing,需要移除后重新添加)。

核心问题2:目标查找逻辑错误

你的代码里target = FindObjectOfType<eMovement>().transform;是在找敌人自己的eMovement组件,不是玩家!这会导致敌人试图跟随自己,自然不会移动。

解决:

方法1:通过玩家标签查找(推荐)

  • 给玩家GameObject设置标签:选中玩家,在Inspector面板顶部的Tag下拉框中选择"Player"(如果没有就点击"Add Tag..."创建)。
  • 修改Start方法里的目标查找代码:
void Start()
{
    rb = GetComponent<Rigidbody2D>();
    // 查找玩家对象
    GameObject player = GameObject.FindGameObjectWithTag("Player");
    if (player != null)
    {
        target = player.transform;
    }
}

方法2:通过玩家的脚本组件查找

如果玩家有专属的脚本(比如PlayerMovement),可以直接找这个组件:

void Start()
{
    rb = GetComponent<Rigidbody2D>();
    target = FindObjectOfType<PlayerMovement>().transform;
}

注意:如果场景中有多个玩家,这个方法会返回第一个找到的玩家,用标签更灵活。

额外检查项

  • 确保敌人GameObject上有Rigidbody2D组件,并且设置Gravity Scale为0(避免重力导致敌人下落,影响跟随逻辑)。
  • 检查moveSpeed的值是否大于0,在Inspector面板中确认数值正确。
  • 打开Unity控制台(Window > General > Console),查看是否有报错(比如NullReferenceException),如果有,说明玩家没被找到,需要检查玩家的标签或组件是否正确设置。

内容的提问来源于stack exchange,提问作者Yarne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:13:11