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

Unity中调用anim.SetTrigger触发NullReferenceException且动画未执行的问题求助

解决Unity中anim.SetTrigger触发NullReferenceException的问题

嘿,我一眼就发现问题根源啦!你遇到的NullReferenceException : Object reference not set to an instance of an object错误,本质是你的anim变量根本没被正确初始化,咱们一步步搞定它:

核心问题:生命周期方法大小写错误

Unity的生命周期方法对大小写要求非常严格,你写的是小写开头的awake(),但正确的方法名应该是大写A开头的Awake()!这就导致anim = GetComponent<Animator>()这行初始化代码完全没被执行,anim变量一直是null,调用anim.SetTrigger时自然就抛出空引用错误了。

把方法名修正后,初始化代码就能正常运行:

void Awake() {
    anim = GetComponent<Animator>();
}

额外的排查验证步骤(确保万无一失)

如果修正后还有问题,可以检查以下几点:

  • 确认挂载这个脚本的GameObject上,确实添加了Animator组件,没有的话手动在Inspector面板里添加。
  • 核对Animator控制器中的触发器名称,必须和代码里的"OnExplosion"完全一致(包括大小写、拼写,Unity字符串是区分大小写的)。
  • 如果你的爆炸对象是通过对象池复用的,可以考虑在OnEnable()或者StartExplosion()方法里重新获取一次Animator组件,避免对象复用导致的组件引用丢失。

修改后的完整脚本示例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Explosion : MonoBehaviour {
    Animator anim; 

    // 修正为大写开头的Awake方法
    void Awake() {
        anim = GetComponent<Animator>();
    }

    private void OnEnable() {
        Invoke("OnDisable", 2f);
    }

    private void OnDisable() {
        gameObject.SetActive(false);
    }

    public void StartExplosion(string target) {
        Debug.Log("startExplosion");
        // 现在anim已经被正确初始化,不会再抛出空引用错误
        anim.SetTrigger("OnExplosion");
        Debug.Log("startExplosion2");
        
        switch (target) {
            case "doge":
                transform.localScale = Vector3.one * 1.2f;
                break;
            case "dogelonmas":
            case "RocketA":
            case "RocketB":
            case "samo":
            case "shiba":
            case "jindoge":
                transform.localScale = Vector3.one;
                break;
        }
        Debug.Log("startExplosion3");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:49:03