考虑到每个人基础可能不一样,且并不是所有人都有同时做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层: