繁体   English   中英

gameObject.GetComponent<T> != null 始终为真。 如何?

[英]gameObject.GetComponent<T> != null is always true. How?

  1. 我有一个包含 3 个游戏对象的列表。 只有一个游戏对象附加了 Light 组件。

  2. 我正在像这样遍历所有游戏对象的列表

     foreach (var eachGameObject in objs) //eachGamObject represents one of the three game objects in a list.
  3. 在 foreach 中,我正在检查 eachGameObject 是否附加了 T 类型组件,如下所示

if(eachGameObject.GetComponent<T>() != null)

  1. “T”是泛型类型。 它可以是任何组件。 在我的例子中,我试图在场景中找到一个带有 Light 组件的 GameObject。

问题:

即使只有一个游戏对象附加了 Light 组件,第 3 点中的“if”始终会执行并且它永远不会为 NULL。

如何? 我总是将“Light”作为“T”传递,显然只有一个游戏对象附加了 Light 组件。

这让我发疯,非常感谢任何帮助!

这是完整的功能:

 public List<T> FindInScene<T>()
    {
        var objs = FindObjectsOfType<GameObject>();
        List<T> list = new List<T>();

        foreach (var eachGameObject in objs)
        {
            if (eachGameObject.GetComponent<T>() != null)
            {
                list.Add(eachGameObject.GetComponent<T>());
            }

        }

        return list;
    }

在同一个(Monobehaviour 类)中,我正在像这样测试它:

私人无效开始(){列表灯= FindInScene(); Debug.Log(lights.Count); }

“计数”始终为 3(等于场景中的游戏对象)。

尝试添加 where(泛型类型约束),如下所示:

   public List<T> FindInScene<T>() where T :Component
    {
        var objs = FindObjectsOfType<GameObject>();
        List<T> list = new List<T>();
        foreach (var eachGameObject in objs)
        {
            if (eachGameObject.GetComponent<T>() != null)
            {
                list.Add(eachGameObject.GetComponent<T>());
            }

        }
        return list;
    }

检查这是否有效:

private void Start()
{
    List<Light> lights = FindInScene<Light>();
    Debug.Log(lights.Count);
}

public List<T> FindInScene<T>()
{
    var objs = FindObjectsOfType<GameObject>();
    List<T> list = new List<T>();
    if(objs != null && objs.Length > 0)
    {
        for (int i = 0; i < objs.Length; i++)
        {
            if (objs[i].GetComponent<T>() != null)
            {
                list.Add(objs[i].GetComponent<T>());
            }
        }
    }
    return list;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM