Unity C#:Camera.main返回null?

有一个免费的C#代码示例,可以将对象移动到Unity 3D中的鼠标单击位置,如下所示:

public GameObject cube; Vector3 targetPosition; void Start () { targetPosition = transform.position; } void Update(){ if (Input.GetMouseButtonDown(0)){ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)){ targetPosition = hit.point; cube.transform.position = targetPosition; } } } 

==============

问题是在运行时,Unity会在行生成错误:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

错误消息是: NullReferenceException:对象引用未设置为对象的实例

根据某人的建议,我刚刚在上面的示例代码中放了一些调试语句,发现“Camera.main”为NULL。 因此,这是Unity生成上述错误消息的主要原因。 🙂

请注意,整个游戏项目我只有1个摄像头。

这是我的“主摄像头”的捕获图像,已经启用并由Unity自动标记为“主摄像头”。 但是,这也无法解决问题。

在此处输入图像描述


最终更新:

我刚刚发现stackoverflow用户“ Programmer ”已经发布了一个很好的答案:

Raycast返回null

当我使用他的代码“GameObject.Find(”NameOfCameraGameObject“)时,这个答案解决了我的问题.GetComponent();

所以,我同意我的上述问题有点复制。 但是,当我问我是否应该删除我的问题时,用户“ 程序员 ”建议我可以保持这个问题,因为它可能仍然对其他人有用。 (同样,我已经通过上面的用户“ 程序员 ”发布了正确答案的链接)。

我的结论是 :奇怪的是,即使Unity自动启用标签“MainCamera”,代码仍然认为“Camera.Main”为空。 因此,我必须使用用户“ Programmer ”编写的代码来解决问题。

非常感谢用户“ 程序员 ”和其他优秀的stackoverflow用户帮助我解决这个问题。 🙂

将您的相机标记为“MainCamera” https://docs.unity3d.com/ScriptReference/Camera-main.html

不,你已经命名了gameobject主摄像头。 将游戏对象标记为主摄像头(名称下方,当前播放器)。

在此处输入图像描述

这是一个带有一些默认标签的下拉菜单,主摄像头就是其中之一。

Interesting Posts