Поиск…


Использование слоев

Уровни единства похожи на теги, так как они могут использоваться для определения объектов, которые должны взаимодействовать или должны вести себя определенным образом, однако слои в основном используются с функциями класса 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 (выбранном в редакторе) или нет.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow