Поиск…
Использование слоев
Уровни единства похожи на теги, так как они могут использоваться для определения объектов, которые должны взаимодействовать или должны вести себя определенным образом, однако слои в основном используются с функциями класса Physics
: Документация Unity - физика
Слои представлены целым числом и могут быть переданы таким функциям таким образом:
using UnityEngine;
class LayerExample {
public int layer;
void Start()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, 5f, layer);
}
}
Использование слоя таким образом будет включать только Colliders, у GameEbjects которых есть слой, указанный в выполненных вычислениях. Это упрощает логику, а также улучшает производительность.
Структура LayerMask
Структура LayerMask
- это интерфейс, который функционирует почти так же, как передача целого числа в соответствующую функцию. Тем не менее, его самое большое преимущество позволяет пользователю выбрать этот слой из раскрывающегося меню в инспекторе.
using UnityEngine;
class LayerMaskExample{
public LayerMask mask;
public Vector3 direction;
void Start()
{
if(Physics.Raycast(transform.position, direction, 35f, mask))
{
Debug.Log("Raycast hit");
}
{
}
Он также имеет несколько статических функций, которые позволяют преобразовывать имена слоев в индексы или индексы в имена слоев.
using UnityEngine;
class NameToLayerExample{
void Start()
{
int layerindex = LayerMask.NameToLayer("Obstacle");
{
}
Чтобы упростить проверку уровня, определите следующий метод расширения.
public static bool IsInLayerMask(this GameObject @object, LayerMask layerMask)
{
bool result = (1 << @object.layer & layerMask) == 0;
return result;
}
Этот метод позволит вам проверить, находится ли игровой объект в layermask (выбранном в редакторе) или нет.