【零基础入门unity游戏开发 —— 通用篇】层级(Layer)、层级编号、层级二进制掩码和unity层级检测原理

发布于:2025-03-18 ⋅ 阅读:(22) ⋅ 点赞:(0)

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇

  • 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
  • 【unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
  • 【unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
  • 【unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。

这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。

一、层级(Layer)检测

看了之前的【范围检测】和【射线检测】案例,你可能会疑惑,为什么检测的层级参数填的都是类似与1 << LayerMask.NameToLayer("UI")这样的参数?下面我们就来介绍一下。

1、层级(Layer)的作用

在Unity中,层级(Layer)是用来区分不同对象的。比如:

  • 玩家可以放在“Player”层。

  • 敌人可以放在“Enemy”层。

  • 地形可以放在“Ground”层。

2、层级编号

每个层级都有一个编号,从0到31。
在这里插入图片描述
比如:

  • 第0层:Default(默认层)

  • 第5层:UI层

3、通过层级名字获取层级编号

在unity中,我们可以使用LayerMask.NameToLayer通过层级名字获取层级编号。

比如:

int layer = LayerMask.NameToLayer("Default"); // 获取"Default"层的编号 也就是0

4、层级的二进制掩码

在Unity中,可以用二进制掩码来表示层级。每个层级对应二进制的一个位(bit)。比如:

  • 第0层:0000 0000 0000 0000 0000 0000 0000 0001(1左移0位)

  • 第1层:0000 0000 0000 0000 0000 0000 0000 0010(1左移1位)

  • 第5层:0000 0000 0000 0000 0000 0000 0010 0000(1左移5位)

结合前面使用LayerMask.NameToLayer通过层级名字获取层级编号,我们就可以通过1 << LayerMask.NameToLayer("层级名称"),可以快速获取某个层级的二进制表示。例如:

int defaultLayerMask = 1 << LayerMask.NameToLayer("Default"); // 获取第0层的二进制掩码

5、如何选择多个层级?

如果你想同时检测多个层级,比如既检测“Default”层又检测“UI”层,你可以用或运算(|)把这两个层级的二进制数合并起来。

比如:

  • Default层