Unity C#:Camera.main返回null?

Tha*_*anh 9 c# macos unity-game-engine ipad ios

有一个免费的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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

问题是在运行时,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用户帮助我解决这个问题.:-)

Mr.*_*rth 8

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

在此输入图像描述

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