指定在 Physics.Raycast 中使用的图层。
一个 GameObject 可以使用编辑器支持的最多 32 个 LayerMask。其中前 8 个 图层
由 Unity 指定;后面的 24 个由用户控制。
位掩码表示 32 个图层,并将它们定义为 true
或 false
。每个位掩码描述是否使用 图层
。例如,可以将第 5 位设置为 1 (true
)。这将允许使用内置的 Water
设置。Edit->Settings->Tags and Layers
选项显示了 32 个位掩码的使用情况。每个 图层
都显示一个字符串设置。例如,内置图层 0
设置为 Default
;内置图层 1
设置为 TransparentFX
。新的命名 图层
添加到位掩码图层 8 以上。选定的 GameObject
将在其检查器右上方显示所选 图层
。下面的示例将 用户图层 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。 |