有没有一种方法可以将光线投射击中的物体与另一个游戏物体进行比较?

时间:2019-03-25 09:06:55

标签: c# unity3d raycasting gameobject

我正在尝试生成一个脚本,该脚本将检查十字线是否指向交互式对象,然后当按下键时,该对象将移至另一个位置,但是我似乎找不到一个没有该功能的函数。在我的情况下出现错误,这是我当前的代码:

public class Filingcabinetopen : MonoBehaviour {
    public GameObject draw;
    public GameObject Camera;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        if (Physics.Raycast(Camera.transform.position, Vector3.forward, (float)2))
        {
            if (draw.Equals(RaycastHit.transform.gameObject))
            {
                // This is where my logic for the interaction will go but as of right now the selection statement doesn't work.
            }
        }


    }
}

我对c#几乎一无所知,这是我第一次使用它,我决定承担艰巨的任务,所以请帮助:)

我尝试使用几种不同的方法,但是我似乎无法从被射线击中的物体中获得游戏物体或标签。 我使用过的另一个示例是:

if (Physics.Raycast(Camera.transform.position, Vector3.forward, (float)2))
        {
            RaycastHit RayObj;
            if (draw.Equals(RayObj))
            {
                //  
            }
        }

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式进行操作。

1:您可以使用Unity的图层系统。  -在图层旁边(在标签旁边的右上角)标记您要进行射线广播的对象

  • 然后在光线投射时使用图层蒙版

LayerMask _myLayer = LayerMask.GetMask("the name of your layer");

  • 然后在光线投射中指定layerMask

if (Physics.Raycast(Camera.transform.position, Vector3.forward, (float)2), _myLayer)

或者您也可以使用hit.collider.gameObject.name(或标签或其他任何东西)获取刚刚命中的游戏对象的名称