所以当我点击游戏中的对象时,我收到此错误...
NullReferenceExceptionm : 对象引用未设置为对象的实例JumpDestination.Update (( (at Assets/Scripts/JumpDestination.cs.:12(
我不知道我做错了什么,我该如何解决?我想得到被击中物体的位置。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JumpDestination : MonoBehaviour {
private RaycastHit hit;
public float jumpMaxDistance;
void Update(){
Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit, jumpMaxDistance);
if (hit.collider.gameObject.tag == "RichPoint") {
print (hit.collider.transform.position);
}
}
}
我不知道我做错了什么,我该如何解决?我想得到 被击中物体的位置。
你做错了3件事:
1.您没有在光线投射之前检查是否按下了鼠标。
2.在打印对象的位置之前,您没有检查Physics.Raycast
是否击中了任何东西。
3.您在函数外部定义了hit
变量。这不是一个好主意,因为它仍然会存储鼠标击中的旧对象。在更新函数中声明。
菲克斯:
void Update()
{
//Check if mouse is clicked
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
//Get ray from mouse postion
Ray rayCast = Camera.main.ScreenPointToRay(Input.mousePosition);
//Raycast and check if any object is hit
if (Physics.Raycast(rayCast, out hit, jumpMaxDistance))
{
//Check which tag is hit
if (hit.collider.CompareTag("RichPoint"))
{
print(hit.collider.transform.position);
}
}
}
}
无论如何,这个答案是为了告诉你你做错了什么。你不应该使用它。为此,请使用 Unity 的新EventSystems
。检查 5.对于3D对象(网格渲染器/任何3D碰撞体(,从这个答案中可以正确检测点击的对象。