有一个免费的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自动完成。但是,这也无法解决问题。
最终更新:
我刚刚发现stackoverflow用户" 程序员"已经发布了一个很好的答案:
当我使用他的代码时,这个答案解决了我的问题" GameObject.Find(" NameOfCameraGameObject")。GetComponent(); "
所以,我同意我的上述问题有点复制。但是,当我问我是否应该删除我的问题时,用户" 程序员"建议我可以保持这个问题的开放,因为它可能仍然有助于其他人在将来查看。 (同样,我已经在用户" 程序员"上面)发布了正确答案的链接。
我的结论:奇怪的是,即使Unity自动启用了标签" MainCamera",代码仍然认为" Camera.Main"一片空白。因此,我必须使用用户编写的代码" 程序员"解决问题。
非常感谢用户" 程序员"和其他伟大的stackoverflow用户帮助我解决这个问题。 : - )
答案 0 :(得分:9)
将相机标记为“MainCamera” https://docs.unity3d.com/ScriptReference/Camera-main.html
答案 1 :(得分:7)