当前位置:   article > 正文

关于u3d出现NullReferenceException的常见情况_unity transform.find null

unity transform.find null

前言:

NullReferenceException,也称空引用异常,对于新手来说,这是个很常见的问题。这个问题的产生是因为你通过C#代码想要查找到相应的物体,但是unity遍历了自身的所有物体,都没有找到你想要的那个物体,此时就会报出空引用异常。查找Canvas下Button内Test时,常见出现空引用异常的情况如下:

                                                                        


通过Find()查找:

  1. public class NullReferenceExceptionDemo : MonoBehaviour
  2. {
  3. private GameObject txt;
  4. private void Start()
  5. {
  6. txt = GameObject.Find("Test");
  7. txt = GameObject.Find("Canvas/Button/test");
  8. }
  9. }

上面这两种写法都会出现空引用异常,通过GameObject.Find( )查找物体的时候,必须给出该物体的完整且无误的路径。值得注意的是:在实际项目中,我们不建议使用Find( )去查找物体,因为项目中的物体是很多的,用Find( )无疑是让unity编译器大海捞针般查找,这样是很消耗性能的。所以我们可以通过GameObject.FindWithTag( )查找。

通过FindWithTag()查找:

  1. public class NullReferenceExceptionDemo : MonoBehaviour
  2. {
  3. private GameObject txt;
  4. private void Start()
  5. {
  6. txt = GameObject.Find("Test");
  7. txt = GameObject.Find("Canvas/Button/test");
  8. txt = GameObject.FindWithTag("text");
  9. txt = GameObject.FindWithTag("Text");
  10. }
  11. }

unity中每一个物体在Inspector中,都有一个Tag属性,你可以设置该物体的Tag属性,通过GameObject.FindWithTag( )去查找到相应的物体。要注意的是,使用FindWithTag( )前,你要给物体设置相应的Tag,且在C#中不能写错该标签,否则就会出现空引用异常。

通过FindWithTag()查找未激活状态下的物体:



通过FindWithTag( )只能查找激活状态下的物体,如果查找未激活的物体,即使路径写对了,还是会出现空引用异常。在实际项目中,我们可能希望某个物体在一定的触发条件下才能被激活(显现),这是我们需要通过Find( )找到该物体,然后设置SetActive(true)激活它。

写在最后:

空引用异常是很经常发生的,面对这个异常,我们要仔细查看C#中的路径和unity中的层级关系是否一一对应。还有就是要注意未激活的物体只能用Find( )去查找。通过简单的Demo分析,我们可以更深入地了解空引用异常的出现。

本人也是处于u3d学习阶段,欢迎各个小伙伴来拍砖呦~~~让我们共同进步吧!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/100699
推荐阅读
相关标签
  

闽ICP备14008679号