当前位置: 首页 > news >正文

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

考虑到每个人基础可能不一样,且并不是所有人都有同时做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、层级(Layer)的作用
    • 2、层级编号
    • 3、通过层级名字获取层级编号
    • 4、层级的二进制掩码
    • 5、如何选择多个层级?
    • 6、排除层
      • 6.1 排除某个层
      • 6.2 排除多个层
    • 7、Unity层级检测原理
      • 7.1 检测层
      • 7.2 排除层
    • 8、为什么二进制掩码来判断层级?
  • 二、更快捷的方式获取层级二进制掩码
    • 1、`LayerMask.GetMask`获取层级二进制掩码
    • 2、例子
    • 发现打印结果,和前面位运算是一样的。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2dc0448667934882924afc6042493c25.png)
  • 专栏推荐
  • 完结

一、层级(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层

相关文章:

  • 【蓝桥杯速成】| 6.背包问题(01版)
  • Nuxt2 vue 给特定的页面 body 设置 background 不影响其他页面
  • 知识管理流程指南
  • Python----计算机视觉处理(Opencv:形态学变换)
  • Bellman_ford 算法--带负权值的单源最短路问题,边列表存储
  • 相机标定之DLT算法学习
  • [HelloCTF]PHPinclude-labs超详细WP-Level 6Level 7Level 8Level 9-php://协议
  • Java高级编程深度解析:JVM底层原理、设计模式与Java 8+新特性实战
  • 案例驱动的 IT 团队管理:创新与突破之路:第三章 项目攻坚:从流程优化到敏捷破局-3.2.1案例:传统企业敏捷转型的“阵痛期“应对
  • 【QT:网络编程】
  • 【大模型理论篇】R1-Searcher:通过强化学习激励llm的搜索能⼒
  • Linux rpm软件管理
  • HTML5扫雷游戏开发实战
  • 计算机视觉算法实战——实例分割(主页有源码)
  • React19源码系列之Hooks(useId)
  • 【设计模式】3W 学习法全面解析 7 大结构型模式:Java 实战 + 开源框架应用
  • JavaScript 函数类型详解:函数声明、函数表达式、箭头函数
  • CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些
  • 顺序表的C语言实现与解析
  • 如何使用 CryptoJS 实现 DES 解密
  • 云南省安委会办公室:大理州安全生产形势比较严峻,事故总量一直居高不下
  • 工行回应两售出金条发现疑似杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 【社论】以法治力量促进民企长远健康发展
  • 李彦宏:技术迭代速度之快从业30年来未见过,要提升执行力战胜对手
  • 印观察|印巴战火与莫迪政府三重冒险:南亚火药桶已至临界点
  • 吴清:推动公募基金高质量发展的行动方案今天将会发布