Unity C#:Camera.main返回null?

时间:2017-03-02 10:38:26

标签: c# ios macos ipad unity3d

有一个免费的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"一片空白。因此,这是Unity生成上述错误消息的主要原因。 : - )

请注意,整个游戏项目我只有1台相机。

这是我拍摄的#34;主摄像头"已经启用并标记为"主摄像头"由Unity自动完成。但是,这也无法解决问题。

enter image description here

最终更新:

我刚刚发现stackoverflow用户" 程序员"已经发布了一个很好的答案:

Raycast returns null

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

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

我的结论:奇怪的是,即使Unity自动启用了标签" MainCamera",代码仍然认为" Camera.Main"一片空白。因此,我必须使用用户编写的代码" 程序员"解决问题。

非常感谢用户" 程序员"和其他伟大的stackoverflow用户帮助我解决这个问题。 : - )

2 个答案:

答案 0 :(得分:9)

答案 1 :(得分:7)

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

enter image description here

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