赞
踩
NullReferenceException,也称空引用异常,对于新手来说,这是个很常见的问题。这个问题的产生是因为你通过C#代码想要查找到相应的物体,但是unity遍历了自身的所有物体,都没有找到你想要的那个物体,此时就会报出空引用异常。查找Canvas下Button内Test时,常见出现空引用异常的情况如下:
- public class NullReferenceExceptionDemo : MonoBehaviour
- {
- private GameObject txt;
-
- private void Start()
- {
- txt = GameObject.Find("Test");
- txt = GameObject.Find("Canvas/Button/test");
- }
- }
上面这两种写法都会出现空引用异常,通过GameObject.Find( )查找物体的时候,必须给出该物体的完整且无误的路径。值得注意的是:在实际项目中,我们不建议使用Find( )去查找物体,因为项目中的物体是很多的,用Find( )无疑是让unity编译器大海捞针般查找,这样是很消耗性能的。所以我们可以通过GameObject.FindWithTag( )查找。
- public class NullReferenceExceptionDemo : MonoBehaviour
- {
- private GameObject txt;
-
- private void Start()
- {
- txt = GameObject.Find("Test");
- txt = GameObject.Find("Canvas/Button/test");
- txt = GameObject.FindWithTag("text");
- txt = GameObject.FindWithTag("Text");
- }
-
- }
unity中每一个物体在Inspector中,都有一个Tag属性,你可以设置该物体的Tag属性,通过GameObject.FindWithTag( )去查找到相应的物体。要注意的是,使用FindWithTag( )前,你要给物体设置相应的Tag,且在C#中不能写错该标签,否则就会出现空引用异常。
通过FindWithTag( )只能查找激活状态下的物体,如果查找未激活的物体,即使路径写对了,还是会出现空引用异常。在实际项目中,我们可能希望某个物体在一定的触发条件下才能被激活(显现),这是我们需要通过Find( )找到该物体,然后设置SetActive(true)激活它。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。