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 "已经在以下网址发布了一个很好的答案:
当我使用他的代码"GameObject.Find("NameOfCameraGameObject")时,这个答案解决了我的问题.GetComponent(); "
所以,我同意我的上述问题有点复制.但是,当我问我是否应该删除我的问题时,用户" 程序员 "建议我可以保持这个问题,因为它可能仍然对其他人有用.(同样,我已经通过上面的用户" 程序员 " 将链接发布到了正确的答案).
我的结论是:奇怪的是,即使Unity自动启用标签"MainCamera",代码仍然认为"Camera.Main"为空.因此,我必须使用用户" Programmer " 编写的代码来解决问题.
非常感谢用户" 程序员 "和其他优秀的stackoverflow用户帮助我解决这个问题.:-)