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

Unity 2D平台游戏AI空引用异常求助:Dusman.cs第19行报错

Unity 2D敌人AI触发NullReferenceException的解决方法

错误定位

报错信息:

NullReferenceException: Object reference not set to an instance of an object
Dusman.Update () (at Assets/Scripts/Dusman.cs:19)

错误发生在Dusman.Update()第19行的mevcutDurum.Execute();,核心原因是mevcutDurum变量未被初始化,处于null状态。

问题根源

查看Dusman类的DurumDegistir方法:

public void DurumDegistir(DusmanDurum yeniDurum)
{
    if (mevcutDurum != null)
    {
        mevcutDurum = yeniDurum;
        mevcutDurum.Enter(this);
    }
}

在Start方法中第一次调用DurumDegistir(new DusunmeDurum())时,mevcutDurum初始值为null,导致if条件不成立,代码块内的赋值和Enter调用都不会执行,最终mevcutDurum保持null,Update循环调用Execute时触发空引用错误。

修复方案

修改DurumDegistir方法,调整状态切换逻辑:

public void DurumDegistir(DusmanDurum yeniDurum)
{
    // 如果当前状态存在,先执行退出逻辑(完善状态机生命周期)
    if (mevcutDurum != null)
    {
        mevcutDurum.Exit();
    }
    // 赋值新状态并执行进入逻辑
    mevcutDurum = yeniDurum;
    mevcutDurum.Enter(this);
}

逻辑说明

  1. 移除错误的条件判断,确保无论当前状态是否为空,都会赋值新状态
  2. 增加旧状态的Exit()调用(如果存在),符合状态机完整的生命周期流程(进入-执行-退出)
  3. 第一次调用时,mevcutDurum为null,跳过Exit(),直接赋值新状态并执行Enter(),保证mevcutDurum不再为null

额外检查建议

  • 确保挂载Dusman脚本的游戏对象上存在Animator组件,否则Skeleton类的MyAnimator会为null,后续调用MyAnimator.SetFloat也会触发空引用
  • 检查状态类(如DusunmeDurum、DevriyeDurum)的Enter方法是否正确接收并赋值dusman引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:24:55