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

Unity 3D中带Nav Mesh Agent的GameObject待机动画异常问题

问题排查与修复方案

1. 修复脚本致命错误

你的脚本存在两处直接导致逻辑失效的问题:

  • 组件调用顺序错误:Start方法中先给agent.destination赋值,但此时agent还未通过GetComponent获取实例,会触发空引用异常。
  • 未定义player变量:直接使用player.position会引发编译错误,脚本无法正常执行。

修正后的脚本:

using UnityEngine;

public class Inimigo : MonoBehaviour
{
    private Animator animator;
    private UnityEngine.AI.NavMeshAgent agent;
    // 在Inspector面板拖拽玩家对象赋值
    public Transform player;

    void Start()
    {
        // 优先获取组件实例
        animator = GetComponent<Animator>();
        agent = GetComponent<UnityEngine.AI.NavMeshAgent>();

        // 避免空引用,仅在player有效时设置目的地
        if (player != null)
        {
            agent.destination = player.position;
        }
    }

    void Update()
    {
        // 提前校验组件有效性,防止空引用
        if (agent == null || animator == null) return;

        if (agent.velocity.magnitude == 0)
        {
            animator.SetBool("parado", false);          
        }
        else if (agent.remainingDistance > agent.stoppingDistance)
        {
            animator.SetBool("parado", true);            
        }
        else
        {
            animator.SetBool("parado", false);
        }
    }
}

2. 校正Animator状态机配置

根据你的描述,状态机逻辑可能存在倒置:

  • 确认默认状态:Animator控制器的默认状态需设为Z_Idle(静止动画),而非parado状态。
  • 调整过渡规则:
    • 若parado=true对应行走状态,需设置从Z_Idle到Z_Walk的过渡,条件为parado=true;同时添加从Z_Walk到Z_Idle的过渡,条件为parado=false。
    • 取消过渡的Has Exit Time勾选:无需等待动画播放完毕即可切换状态,保证状态响应即时性。

3. 验证NavMesh配置

  • 确认场景已完成NavMesh烘焙,僵尸和玩家的位置都处于NavMesh可行走区域内。
  • 检查Nav Mesh Agent组件的Speed、Acceleration参数值大于0,避免因速度为0导致僵尸无法移动,进而触发错误动画状态。

4. 调试确认

  • 运行游戏时打开Animator窗口,实时观察parado参数的数值变化与状态机切换情况,确认参数是否正确传递。
  • 查看Console面板,排查是否存在编译错误或空引用异常,这类错误会直接中断脚本逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:52:44