我正在统一中使用 Raycast,我想在单击对象时获取对象的位置,但我不起作用,我不知道我做错了什么



所以当我点击游戏中的对象时,我收到此错误...

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碰撞体(,从这个答案中可以正确检测点击的对象。

最新更新