在设计中可以使用物体的名称标识一个物体,但是很多时候名称会有些冗长之之类的问题。现代游戏引擎都有标签(Tag)这一功能,简单来说,标签就是物体的另一个名字,但它也有另一些特点
与标签类似,层(Layer)也很常用,它更多的是与碰撞检测相关。例如,经典游戏《暗黑破坏神》中,玩家技能只能打怪,而不能打玩家。那就是将技能、怪物、玩家分别定义在PlayerSkill、Monster、Player这三个不同的层,并在屋里系统中制定PlayerSkill层只会和Monster层产生碰撞,而不会和Player层碰撞
在Inspector窗口顶部可以查看并修改物体的Tag和layer选项
⚠️:这里所说的"层"指的是物体的"层"(Layer),而不是层级窗口(Hierarchy)窗口的"层级",那指的是"父子关系"层级
标签(Tag)的简要说明
- 引擎内部对物体的标签建立了索引。通过索引擦中物体,要比通过名查找物体快得多
- 标签最多只能有32个,前几个是常用标签,具有特定含义,例如Player、Main Camera等。后面空白的标签可以自定义和使用
- 举个例子,在射击游戏中,可以将玩家的物体标记为Player,将怪标记为Monster。无论玩家和怪物的名字是什么,都可以方便地边学逻辑代码。这些标签即便于查找所有怪物,又可以用于判断物体是不是怪物
- 善用标签有助于团队协作。例如,实现定义好游戏中的各类标签,很容易就知道某个物体是什么用的,从而可以让关卡设计师、美术设计师和软件工程师更好地协作
层(Layer)的简要说明
- 与标签一样,最多32个,也有几个常用的,如默认层(Default)、透明特效层(TransparentFX)、忽略射线层(Ignore Raycast)也可以自定义
- 层的第一个常用用法就是定义游戏世界中层与层之间是否会发生碰撞。例如,足球游戏中,可以让足球和场上的裁判处于不同的层,且让两个层不会碰撞,可以避免很多麻烦
- 第二个常用用法就是与射线检测有关。"射线"是一条虚拟的线,大部分触屏、鼠标操作的3D游戏都要用到它。例如,用户单击地面时,就会想游戏世界发射一条射线,已确定单机到了什么位置。又是障碍物会阻挡射线,这是就可以设定该射线仅与地面层碰撞,而不是鱼障碍物理层碰撞,从而改善操作体验