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.mainnull 。 要对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”

标签