如何将 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();
我正在尝试找到在 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();