Raycast导致NullReferenceException错误
产生错误的代码:
void Update() { if (Input.touchCount > 0) { RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero); if (hit && hit.collider != null && hit.collider.name == "leftTapArea") { hit.transform.name = "Hit"; } } }
它说这个string有什么问题:
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position),Vector2.zero);
错误:
NullReferenceException:未将对象引用设置为对象的实例leftScript.Update()(位于Assets / leftScript.cs:16处)
Camera.main.ScreenToWorldPoint
只能在你的代码中返回null。 这意味着Camera.main
是null
。 要对Camera.main
进行初始化,相机必须具有MainCamera
标记。
selectCamera GameObject,然后将标签更改为MainCamera。
如果你不希望你的相机在MainCamera标签中,你也可以直接用GameObject.Findfind机智,然后从中获取Camera
组件。
Camera cam; void Start() { cam = GameObject.Find("NameOfCameraGameObject").GetComponent<Camera>(); } void Update() { if (Input.touchCount > 0) { RaycastHit2D hit = Physics2D.Raycast(cam.ScreenToWorldPoint(Input.GetTouch(0).position), Vector2.zero); if (hit && hit.collider != null && hit.collider.name == "leftTapArea") { hit.transform.name = "Hit"; } } }
确保你的场景中有一个活动的游戏对象与Camera
组件和标签“MainCamera”