Unity FindObjectsOfType找不到它应该

时间:2017-07-20 15:11:03

标签: c# unity3d find

我的目标是找到给定类型的所有对象,使用 Linq 对它们进行一些过滤并交换它们的精灵(交换工作)。请注意,我将其用作编辑器脚本,而不是运行时。

var objs = GameObject.FindObjectsOfType<GameObject>()
   .Where(g =>
   {
       var sr = g.GetComponent<SpriteRenderer>();
       if (sr != null)
       {
           if (sr.sprite.name.Equals(_from.name)) { return true; } //error here
           return false;
       }
       return false;
   }).AsEnumerable();

它的大多数时间,但现在我正在

  

NullReferenceException:未将对象引用设置为对象的实例   SwapSprites.m__0(UnityEngine.GameObject g)(在Assets / SwapSprites.cs:44)

即使我在场景中有一堆对象,其精灵是我用作 _from 的精灵。

我不知道出了什么问题。我希望找到所有带有 SpriteRenderer 的对象,它们的精灵是我正在寻找的。

有什么奇怪的,虽然在调试时我确实得到了一堆结果,但最终不是我所追求的,最终我得到了这个例外。

1 个答案:

答案 0 :(得分:2)

在使用sr = g.GetComponent<SpriteRenderer>()之前,您已经检查过null

问题可能是_from.namesr.sprite.name,因为这两个问题都是从类null访问变量。

请注意,SpriteRenderer可能未分配Sprite。在这种情况下,您还必须在使用Sprite或检查其name属性之前检查 var objs = GameObject.FindObjectsOfType<Transform>() .Where(g => { var sr = g.GetComponent<SpriteRenderer>(); if (sr != null) { if (sr.sprite != null) { if (sr.sprite.name.Equals(_from.name)) { return true; } } return false; } return false; }).AsEnumerable(); 是否为空。

%userprofile%\AppData\Local\nvim\init.vim