Unity 6.3
0 онлайн 63 гостей 3 в системе
Вход

LayerMask

структура в UnityEngine

Выполнено в:UnityEngine.CoreModule

Описание

Указывает слои для использования в Physics.Raycast.

A GameObject может использовать до 32 LayerMaskПервые восемь из этих вариантов были поддержаны редактором. Layers указаны Unity; следующие 24 управляются пользователем.

Битмаски представляют 32 слоя и определяют их как true или false. Каждая битовая маска описывает, Layer В качестве примера бит 5 можно установить на 1 (true). Это позволит использовать встроенный Water установка.

Edit->Settings->Tags and Layers опция показывает использование 32-битных масок. Каждый Layer показано с настройкой строки. В качестве примера Built-in Layer 0 установлен как Default; Built-in Layer 1 установлен как TransparentFX. Новые имена Layers добавляются над слоем битмаски 8. Выбранный GameObject покажет выбранный Layer в правом верхнем углу Inspector. В примере ниже User Layer 13 установлен на "Стена". Это вызывает назначение GameObject рассматриваться в качестве части здания.

В следующем примере скрипта Physics.Raycast посылает луч в мир. Camera.main может быть повернута вокруг оси y и стрелять луч. Три GameObjectс представляют собой стены, которые могут быть поражены выстреленным лучом. GameObject имеет GameObject.layer установка на "Стену" layerMask.

using UnityEngine;

// Fire a gun at 3 walls in the scene. // // The Raycast will be aimed in the range of -45 to 45 degrees. If the Ray hits any of the // walls true will be returned . The three walls all have a Wall Layer attached. The left // and right keys, and the space key, are all used to aim and fire. // // Quad floor based at (0, -0.5, 0), rotated in x by 90 degrees, scale (8, 8, 8). // ZCube wall at (0, 0.5, 6), scale (3, 2, 0.5). // LCube wall at (-3, 0, 3), scale (0.5, 1, 4). // RCube wall at (3, 1.5, 3), scale (1, 4, 4).

public class ExampleScript : MonoBehaviour { private float cameraRotation;

void Start() { Camera.main.transform.position = new Vector3(0, 0.5f, 0); cameraRotation = 0.0f; }

// Rotate the camera based on what the user wants to look at. // Avoid rotating more than +/-45 degrees. void Update() { if (Input.GetKey("left")) { cameraRotation -= 1f; if (cameraRotation < -45.0f) { cameraRotation = -45.0f; } }

if (Input.GetKey("right")) { cameraRotation += 1f; if (cameraRotation > 45.0f) { cameraRotation = 45.0f; } }

// Rotate the camera Camera.main.transform.localEulerAngles = new Vector3(0.0f, cameraRotation, 0.0f); }

void FixedUpdate() { Transform transform = Camera.main.transform;

if (Input.GetKeyUp("space")) { // Check for a Wall. LayerMask mask = LayerMask.GetMask("Wall");

// Check if a Wall is hit. if (Physics.Raycast(transform.position, transform.forward, 20.0f, mask)) { Debug.Log("Fired and hit a wall"); } } } }

Примечание: LayerMask является битмаской. Используйте LayerMask.GetMask и LayerMask.LayerToName для создания битмаски.

Свойства

Свойство Описание
valueПреобразует значение маски слоя в целое число.

Статические методы

Метод Описание
GetMaskВозвращает эквивалентную маску слоя для каждого слоя из набора имен слоев, определенных либо Встроенным слоем, либо Пользовательским слоем в Менеджере Меток и Слоёв.
LayerToNameПри задании номера слоя, возвращает имя слоя, как определено в Встроенном или Пользовательском Слое в менеджере Меток и Слоёв.
NameToLayerПри задании имени слоя возвращает индекс слоя, определенный либо Встроенным слоем, либо Пользовательским слоем в Менеджере Меток и Слоёв.

Операторы

Оператор Описание
LayerMaskИмплицитно преобразует целое число в LayerMask.