我正在检查“我的游戏对象”是否有一个Rigidbody。它不是。但是对Rigidbody进行空检查的条件失败了,尽管事实证明它是空的。
为什么会这样?如何让条件阻止运行?
using UnityEngine;
using System.Collections;
public class NullChecker : MonoBehaviour
{
void Start()
{
GameObject go = GameObject.Find("My Game Object");
CheckIfNull<Rigidbody>(go);
}
public void CheckIfNull<ComponentType>(GameObject gameObject)
{
ComponentType component = gameObject.GetComponent<ComponentType>();
Debug.Log("Component is " + component); //"Component is null"
if (component == null)
{
Debug.Log("Inside null check"); //Never prints
}
Debug.Log("Finished null check"); //Does print
}
}
答案 0 :(得分:1)
null
对象引用未格式化为"null"
。它们格式化为空字符串。 component
不是空的。它的ToString
输出为"null"
。
答案 1 :(得分:0)
从其他研究(Equals(item, null) or item == null和Unity Forums)中详细阐述了usr的答案:
我需要保证在CheckIfNull标头中传递了一个Component。更新后的代码如下所示:
using UnityEngine;
using System.Collections;
public class NullChecker : MonoBehaviour
{
void Start()
{
GameObject go = GameObject.Find("My Game Object");
CheckIfNull<Rigidbody>(go);
}
public void CheckIfNull<ComponentType>(GameObject gameObject) where ComponentType : Component
{
ComponentType component = gameObject.GetComponent<ComponentType>();
Debug.Log("Component is " + component); //"Component is null"
if (component == null)
{
Debug.Log("Inside null check"); //Never prints
}
Debug.Log("Finished null check"); //Does print
}
}
答案 2 :(得分:0)
非常确定gameObject.GetComponent()不会返回null。它必须返回一个具有返回“null”的.ToString()方法的对象。 如果它实际上是null
的结果"Component is " + component
将是“Component is”,因为null将是字符串连接中的空字符串。
您可以调试代码并设置断点以查看GetComponent返回的内容吗?在立即窗口或本地窗口中查看它。