[英]gameObject.GetComponent<T> != null is always true. How?
我有一个包含 3 个游戏对象的列表。 只有一个游戏对象附加了 Light 组件。
我正在像这样遍历所有游戏对象的列表
foreach (var eachGameObject in objs) //eachGamObject represents one of the three game objects in a list.
在 foreach 中,我正在检查 eachGameObject 是否附加了 T 类型组件,如下所示
if(eachGameObject.GetComponent<T>() != null)
问题:
即使只有一个游戏对象附加了 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.