版本: Unity 6 (6000.0)
语言英语
  • C#

LayerMask

UnityEngine 中的结构体

/

实现于:UnityEngine.CoreModule

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每一项修改建议,并在适用情况下进行更新。

关闭

提交失败

由于某些原因,您的修改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

指定在 Physics.Raycast 中使用的图层。

一个 GameObject 可以使用编辑器支持的最多 32 个 LayerMask。其中前 8 个 图层由 Unity 指定;后面的 24 个由用户控制。

位掩码表示 32 个图层,并将它们定义为 truefalse。每个位掩码描述是否使用 图层。例如,可以将第 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 代表墙壁,射线可以击中它们。每个 GameObjectGameObject.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.GetMaskLayerMask.LayerToName 生成位掩码。

属性

value将图层掩码值转换为整数值。

静态方法

GetMask给定一组由标签和图层管理器中的内置图层或用户图层定义的图层名称,返回所有这些图层的等效图层掩码。
LayerToName给定一个图层编号,返回标签和图层管理器中定义的图层名称(内置图层或用户图层)。
NameToLayer给定一个图层名称,返回标签和图层管理器中定义的图层索引(内置图层或用户图层)。

运算符

LayerMask隐式地将整数转换为 LayerMask。