Описание
Указывает слои для использования в Physics.Raycast.
GameObject может использовать до 32 LayerMask, поддерживаемых редактором. Первые 8 из этих Layers
определяются Unity; следующие 24 контролируются пользователем.
Битовые маски представляют 32 слоя и определяют их как true
или false
. Каждая битовая маска описывает, используется ли Layer
. Например, для бита 5 можно установить значение 1 (true
). Это позволит использовать встроенную настройку Water
.
Параметр Edit->Settings->Tags and Layers
показывает использование 32-битных масок. Каждый Layer
отображается со строковым параметром. Например, Встроенный Layer 0
установлен как Default
; Встроенный Layer 0
установлен как TransparentFX
. Новые именованные Layer
добавляются над слоем битовой маски 8. Выбранный GameObject
будет отображать выбранный Layer
в правом верхнем углу Инспектора. В приведенном ниже примере для User Layer 13
установлено значение "Wall". Это приводит к тому, что назначенный GameObject
рассматривается как часть здания.
В следующем примере сценария Physics.Raycast отправляет в мир луч. Camera.main можно вращать вокруг оси Y и запускать луч. Три GameObject представляют собой стены, в которые может попасть выпущенный луч. Каждый GameObject имеет GameObject.label значение "Wall" 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. |