本文介绍了一些常见的导致NullReferenceException:object referencenotsetoninstance的对象错误的原因,并给出了相应的解决方法。
常见解决方案1:NullReferenceException:objectreferencenotsettoanistanceofanobject。不初始化对象的主要原因是对象本身的活动没有被激活(已被移除)。你应该先检查GameObject的activity在运行前是否没有激活。或者当程序正在运行时,您的一些脚本导致程序取消其活动并激活它。这个问题解决了。第一张图是一个简单的场景,便于解释。
常见解决方案2:父对象、父父对象、父父对象、父父对象等.的对象没有活动,因为如果父对象的活动被取消,unity系统在默认情况下将无法搜索其所有自身对象。即使此时单独打开自身对象的属性面板,你发现子对象的activity tick还在,这个自身对象仍然是objectreferencenotsetoainstance对象。
常见的解决方案三:如果带有start()、wake()、update()和functions的脚本没有分配给层次面板上的任何GameObject,那么这三个函数的函数体都不会被执行,自然会导致这个问题。在项目面板中建立脚本后,如果你认为系统会自动执行它,那你就错了。你必须把它放在层级面板上。有两种方法。1.将组件添加到现有的游戏对象中,即AddComponent-'脚本的名称'2.创建一个空的游戏对象并添加组件到这个空的对象中。方法同上。
常见解决方案4:在较大的项目中,你会发现一个项目中绝大多数的脚本都没有start()、wake()和update()函数。这些脚本要么分配给层次面板上的对象(只占一小部分),要么被其他脚本调用(占绝大多数!),如果objectreferencenotsettoanistanceofanobject出现在这些脚本中,你就要看一下源代码,看看被调用的脚本是否在运行(也就是说,是否已经放在层次面板上的某个对象上,这个脚本组件的activity 是否还在)
常见的解决方案4:4:资源应用不当导致的错误。加载功能。你认为脚本逻辑是正确的(实际上是正确的),但是你确实给对象赋值了,但是你只是报告了object的错误ObjectReferenceNotSetToaninstance。比如objButton=GameObject。实例化(资源。Load('Prefab/FirstButton '))作为asGameObject语法正确,函数调用正确,但只是报错,说objButton没有初始值。错误在哪里?原来系统在Resources.load加载路径找不到任何东西!查看您的资源在哪里,以及它们是否在Assets-Resources文件夹下。注意文件名‘resources’绝对不能错,因为这个函数就是要查找这个名字下的资源!然后只需检查路径是否有错误,就可以了。
常见的解决方案4:如果你真的犯了错误,没有赋初值,那就赶紧赋个初值。介绍几种简单的赋初值方法:(1)公共向量3 vec3=新向量3 (0,0,0);(2)public string[]strs=new string[5];(3)intInt=0;(4)float flo=0.0f;