gpt4 book ai didi

c# - Unity C# : Camera. main 返回null?

转载 作者:可可西里 更新时间:2023-11-01 03:25:48 24 4
gpt4 key购买 nike

<分区>

有一个免费的 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 已启用并自动将其标记为“主摄像头”。但是,这也不能解决问题。

enter image description here


最终更新:

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

Raycast returns null

当我使用他的代码 "GameObject.Find("NameOfCameraGameObject").GetComponent();"

这个答案解决了我的问题

所以,我同意我上面的问题有点重复。然而,当我问我是否应该删除我的问题时,用户“Programmer”建议我可以保留这个问题,因为它可能对将来其他人查看仍然有用。 (同样,我已经发布了上面用户“Programmer”正确答案的链接)。

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

非常感谢用户“Programmer”和其他出色的 stackoverflow 用户帮助我解决了这个问题。 :-)

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com