【Unity】出现NullReferenceException:Object reference not set to an instance of an object.的原因总结

这篇博客主要介绍了Unity游戏开发中遇到的一些典型问题,包括物体未激活、父物体未激活导致的对象找不到、脚本未挂载、脚本执行条件、资源加载失败以及变量未赋初值等。这些问题可能导致游戏运行异常,理解并解决这些问题对于优化游戏性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 物体没有激活

①运行前物体没有被激活,导致运行时找不到该物体;
②运行时物体被脚本控制取消了激活,导致用到该物体时找不到。

2. 物体的父物体、祖父物体……没有激活

Unity中,如果一个物体的父物体没有激活,那么其所有子物体是找不到的。
类似的,这种情况也会导致运行时找不到物体。
尤其是使用GameObject.Find()函数全局查找GameObject的时候需要尤其注意。

3. 没有挂载脚本

继承于MonoBehaviour的脚本没有挂载到Hierarchy面板上的任何GameObject。
这种情况下脚本中的Awake(),Start()和Update()脚本就都不会被执行,因此自然找不到需要的物体。

4. 追祖溯源

对于没有继承于MonoBehaviour的脚本,需要查看调用该脚本的源头脚本有没有运行(即其被挂载到了Hierarchy面板上的某个物体,且其脚本组件被激活)

5. 资源加载失败

脚本中使用到了Resources.Load()函数,然而其所指向的路径中没有对应的东西。
查看Assets文件夹下的Resources文件夹下是都有对应加载的资源。

6. 变量未赋初值

只定义了变量,但没有为其赋初值。

public Vector3 vec = new Vector3(0,0,0);
public string[] strs = new string[5];
int index = 0;
float ff = 0.0f;

只定义了脚本实例,但没有实例化它。
如定义了继承于Monobehavior地脚本的一个实例Demo,需要在其Awake时将其实例化,才能在其他地方引用其方法时不报空。

public class Demo : MonoBehaviour
{
    public static Demo Instance;

    private void Awake()
    {
        Instance = this;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值