You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity中动画对象加Nav Mesh Agent后不跟随玩家却前往(0,0,0)的解决建议

解决Unity Nav Mesh Agent始终前往(0,0,0)而非跟随玩家的问题

嘿,我帮你梳理下可能导致这个问题的几个常见原因,结合你给出的代码片段,大概率是这几个点出了状况:

  • 代码截断导致目标位置错误
    你提供的代码里Update方法的nav.SetDestination(pla...明显没写完,正确的写法应该是传入玩家的位置player.position。如果这里参数缺失或者写错,Nav Mesh Agent找不到有效目标,就会默认前往世界原点(0,0,0)。

  • 玩家对象的标签不匹配
    确认你的玩家GameObject确实设置了Player标签——GameObject.FindGameObjectWithTag("Player")如果找不到对应标签的对象,player变量会变成null。这时候调用player.position会触发报错,Agent也会因为没有有效目标而走到原点。可以在Awake里加个调试日志排查:

    void Awake () {
        player = GameObject.FindGameObjectWithTag ("Player").transform;
        nav = GetComponent <NavMeshAgent> ();
        if (player == null) {
            Debug.LogError("找不到带有Player标签的对象!检查你的玩家对象标签设置");
        }
    }
    
  • Nav Mesh烘焙不完整或错误
    就算代码没问题,如果场景的Nav Mesh没正确烘焙,Agent也无法规划到玩家位置的路径,最终只能走向原点。解决步骤:

    1. 打开Window > AI > Nav Mesh窗口
    2. 确保玩家和敌人活动区域的地面、可走平台都勾选了Navigation Static
    3. 点击窗口里的Bake按钮重新烘焙导航网格
  • Nav Mesh Agent组件参数异常
    检查敌人身上的Nav Mesh Agent组件:

    • 确认SpeedAngular Speed数值不为0,不然敌人会看起来没移动
    • 检查Area Mask是否包含你烘焙的可行走区域(比如默认的Walkable
    • 确保Auto Traverse Off Mesh Link这类必要选项处于勾选状态

这里给你一份修正后的完整代码参考:

using UnityEngine;
using UnityEngine.AI;

public class EnemyMovement : MonoBehaviour {
    Transform player;
    NavMeshAgent nav;

    void Awake () {
        player = GameObject.FindGameObjectWithTag ("Player").transform;
        nav = GetComponent<NavMeshAgent>();
        
        // 调试检查:确认找到玩家对象
        if (player == null) {
            Debug.LogError("错误:场景中没有找到带有'Player'标签的对象!");
        }
    }

    void Update () {
        // 只有找到玩家时才设置目标位置
        if (player != null) {
            nav.SetDestination(player.position);
        }
    }
}

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

火山引擎 最新活动