我有一个脚本,目前它的全部目的只是检测我何时单击“Piece”游戏对象。当我点击它时,我想使用 RaycastHit 数据找到我点击的作品的 ID。但是,目前该程序抛出以下错误:NullReferenceException: Object reference not set to an instance of an object controller.Update () (at Assets/controller.cs:15)
。这是因为,无论出于何种原因,GetComponent 都会返回 null。我可以确认我每次单击的确切 GameObject 确实具有 Piece 组件,因为我可以在编辑器中看到它,并且因为它正在做一些其他工作完美的事情。带有 Piece 组件的 GameObjects 被实例化,我正在实例化的预制件已分配 Piece,因此我不会在运行时或任何时候添加 Piece 组件。最让我困惑的是,同样的游戏对象也各自有一个 MeshRenderer 组件,我可以使用 GetComponent 轻松获得对它的引用。这只是 GetComponent 似乎不认为存在的 Piece 组件,无论出于何种原因,也许是因为它是一个脚本?这是代码:
public class Controller : MonoBehaviour
{
private LayerMask pieceMask = (1 << 3); // 3 is the layer index of the "Pieces" layer
void Update()
{
if (Input.GetMouseButtonDown(0)) {
Vector3 origin = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(origin, Camera.main.transform.forward, out hit, pieceMask)) {
var hitID = hit.transform.gameObject.GetComponent<Piece>().id;
Debug.Log(hitID);
}
}
}
}
我一直在整个互联网上寻找为什么会发生这种情况,但似乎找不到其他人之前遇到过这个确切的问题,只是类似的问题。我已经通过论坛帖子告诉其他人检查正确的对象,我已经添加了代码来设置对象名称,确保对象不为空等等,但我肯定正确地实例化了所有内容。这是怎么回事,我该如何解决?