Skip to content

层次(Layer)是一种工具,可让您分离场景中的 游戏对象(Game Object)。您可以通过 检视窗口(Inspector)和脚本编辑 层次(Layer)的属性,来控制场景中 游戏对象 之间的交互方式。

当选中 游戏对象 后,可在 检视窗口(Inspector)中定义 游戏对象 层次(Layer),该属性属于枚举类型。

【SceneEditor_GameObject_Layer001.png】

在 SandMod 编辑器中使用 层次(Layer)可以创建具有共同特定特征的对象组。

层次(Layer)主要用于限制射线投射或渲染等操作,以便它们仅应用于相关的对象组而不影响其他 游戏对象。

标记为 Built-in Layer 的 层次(Layer)是 SandMod 使用的默认 层次(Layer),您无法对其进行编辑。您可以自定义编辑标记为 User Layer 的 层次(Layer)。

【SceneEditor_GameObject_Layer002.png】

选择层次

如果您需要修改 游戏对象(Game Object)的 层次(Layer),您可以在 场景预览窗口(Scene)或者 层级窗口( Hierarchy)中选中需要修改 层次(Layer)的 游戏对象,在 检视窗口(Inspector)中点击 层次(Layer)属性下拉框,点击选择意向切换的 层次(Layer)进行修改。

【SceneEditor_GameObject_Layer003.png】

新建层次

如果默认 层次(Layer)不能满足您的使用需求,您可以在 检视窗口(Inspector)中 层次(Layer)属性下拉框底下点击 添加层次(Add Layer) 按钮。

【SceneEditor_GameObject_Layer004.png】

点击后 检视窗口(Inspector)将开启 层配置设置(Layer Config Setting)列表,在列表中您可以给新的 层次(Layer)命名。

【SceneEditor_GameObject_Layer005.png】

命名后在 层次(Layer)属性下拉框中就能选取新命名的 层次(Layer)。

【SceneEditor_GameObject_Layer006.png】

关于新建 层次(Layer),有以下需要注意的点:

  • 您最多可以创建 30 个层次。
  • 如果将 层次(Layer)的命名清空,在 层次(Layer)属性下拉框将看不到该 层次(Layer),但是该 层次(Layer)依然会存在,依旧可以通过代码将 游戏对象(Game Object)的 层次(Layer)改为该 层次(Layer)。

层次顺序

在 检视窗口(Inspector)中 层次(Layer)属性下拉框侧面,会显示该 层次(Layer)对应的顺序序号。

【SceneEditor_GameObject_Layer007.png】

层次(Layer)对应的顺序序号也会在层配置设置(Layer Config Setting)列表中展示。

【SceneEditor_GameObject_Layer008.png】

在使用 Type Script 代码读取或设置 游戏对象(Game Object)的 层次(Layer)时,一般都是通过 层次(Layer)的顺序序号获取 层次(Layer),而不是通过 层次(Layer)的命名,具体可以查阅 API 文档关于 GameObject.layer 的相关内容。

基于层次的碰撞

通过基于 层次(Layer)的碰撞检测,可以让某个 游戏对象(Game Object)与设置为特定 层次(Layer)的 游戏对象 发生碰撞。

【SceneEditor_GameObject_Layer009.png】

图片展示了使用 物理设置资产(Physics Setting Asset)在 检视窗口(Inspector)设置基于 层次(Layer)的碰撞。

在了解基于 层次(Layer)的碰撞前,您需要掌握以下内容:

  • 创建物理设置资产。
  • 项目设置中物理设置的内容。
  • 碰撞相关的组件。

当在 项目窗口(Project)中选中 物理设置资产(Physics Setting Asset)后,检视窗口(Inspector)会显示项目物理设置的相关属性,其中包括 层次碰撞矩阵(Layer Collision Matrix),该属性是一个多选框(布尔值类型属性)矩阵,该属性定义了哪些 游戏对象 能与哪些 层次(Layer)的 游戏对象 碰撞。

【SceneEditor_GameObject_Layer010.png】

--------------
比如,在场景上新建三个 游戏对象(Game Object),三个 游戏对象 都添加 网格渲染器(Mesh Renderer)、盒装碰撞器(Box Collider)组件(Component),并添加 白(White)、红(Red)、蓝(Blue)三个不同颜色的材质,根据不同颜色的立方体将它们的 对象名字(Object Name)改成其颜色的名字,三个 游戏对象 的 层次(Layer)也换成对应颜色命名的 层次(Layer)。


【SceneEditor_GameObject_Layer011.png】
【SceneEditor_GameObject_Layer012.png】
【SceneEditor_GameObject_Layer013.png】


在 项目窗口(Project)中选中 物理设置资产(Physics Setting Asset)后,在 检视窗口(Inspector)编辑 层次碰撞矩阵(Layer Collision Matrix),关闭 白色层次(White)和 红色层次(Red)的碰撞。


【SceneEditor_GameObject_Layer014.png】


运行游戏后将 白(White)游戏对象 移至最高并添加 刚体(Rigidbody)组件(Component),可以看到 白(White)游戏对象 直接闯过 红(Red)游戏对象,但是和 蓝(Blue)游戏对象发生了碰撞。


【SceneEditor_GameObject_Layer015.gif】
--------------