您可以使用图层来优化您的项目和工作流程。图层的常见用途包括
如果您使用摄像机一个组件,用于创建场景中特定视点的图像。输出要么绘制到屏幕上,要么捕获为纹理。 更多信息
参见 术语表的剔除掩码允许您根据图层包含或省略要由摄像机渲染的对象。
参见 术语表,则可以仅渲染特定图层或图层选择中的对象。要更改剔除掩码,请选择要使用的摄像机,然后在检查器一个 Unity 窗口,显示有关当前选定游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表窗口中选择“剔除掩码”下拉菜单。如果清除图层的复选框,则它不会在场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您可以放置环境、障碍物和装饰,从本质上讲是分块设计和构建您的游戏。 更多信息
参见 术语表中渲染。
注意:UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表元素和屏幕空间画布子对象是此规则的例外,无论如何都会渲染。
您可以使用图层来指定射线投射可以与哪些游戏对象相交。要使射线投射忽略一个游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、摄像机、路径点等。游戏对象的功能由附加到它的组件定义。 更多信息
参见 术语表,您可以将其分配到“忽略射线投射”图层,或将图层掩码传递给射线投射 API 调用。
如果您没有将图层掩码传递给射线投射 API 调用,Unity 将使用Physics.DefaultRaycastLayers,它匹配除“忽略射线投射”之外的所有图层。
Physics.Raycast 函数使用位掩码,每个位决定图层是否被射线忽略。如果图层掩码中的所有位都打开,则射线与所有碰撞器一个用于处理对象物理碰撞的不可见形状。碰撞器不需要与对象的网格完全相同形状 - 粗略的近似值通常更有效,并且在游戏玩法中无法区分。 更多信息
参见 术语表发生碰撞。如果图层掩码 = 0,则没有碰撞当物理引擎检测到两个游戏对象的碰撞器接触或重叠时,就会发生碰撞,前提是至少有一个具有刚体组件并且正在运动。 更多信息
参见 术语表。
例如,如果您想在图层 8 上投射射线,请参见下面的代码示例
int layerMask = 1 << 8;
// Does the ray intersect any objects which are in layer 8?
if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask))
{
Debug.Log("The ray hit the player");
}
然后,您可以执行反向操作,使射线与除图层 8 之外的所有图层发生碰撞。
void Update ()
{
// Bit shift the index of the layer (8) to get a bit mask
int layerMask = 1 << 8;
// This casts rays only against colliders in layer 8.
// But to collide against everything except layer 8, use the ~ operator because it inverts a bitmask.
layerMask = ~layerMask;
RaycastHit hit;
// Does the ray intersect any objects excluding layer 8.
if (Physics.Raycast(transform.position, transform.TransformDirection (Vector3.forward), out hit, Mathf.Infinity, layerMask))
{
Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow);
Debug.Log("Did Hit");
}
else
{
Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) *1000, Color.white);
Debug.Log("Did not Hit");
}
}
注意:如果您没有将图层掩码传递给 Raycast 函数,它仍然会忽略使用“忽略射线投射”图层的碰撞器。