如何将 Unity 脚本应用于多个图层?

How to apply a Unity script to several layers?

我正在尝试找到在 VR 中 select 对象的方法。

当某个对象被点击时,某个代码将运行告诉做什么 - 例如退出应用程序。

现在,代码 运行s 用于查看对象是否具有层 'Interactable',但是我如何设置我的代码来检查需要更多层?

在代码中,我已经尝试设置对更多掩码的检查,而不仅仅是 'Interactable' 掩码。

private void ProcessTouchpadDown()
    {
        if (!m_CurrentObject)
            return;

        Interactable interactable = m_CurrentObject.GetComponent<Interactable>();
        interactable.Pressed();
    }
}

基于上面的代码,下面的代码将运行。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Interactable : MonoBehaviour
{
    public void Pressed()
    {
        //This code will run when an object with the 'interactable' layer is clicked. 
    }
}

我希望当我添加另一个图层蒙版时,我可以将它添加到 ProcessTouchDown 并复制 interactable.pressed(); 以在按下对象时应用不同的功能。

Unity 中的图层蒙版是 bit flags。您可以利用它来发挥自己的优势,并通过对它们进行位移来迭代要检查的层。

    LayerMask layer = LayerMask.GetMask("Layer A", "Layer B", "Layer C");
    Interactable interactable = currentObject.GetComponent<Interactable>();

    //Checks if interactable's layer is contained within the layermask
    if (layer == (layer | (1 << interactable.gameObject.layer))) 
        interactable.Pressed();