简介

        Layer可以用于光照的分层和物理碰撞的分层,这样可以很好地进行性能优化

数据结构

        Layer在Unity中有3中呈现方式:1、string名字,2、int层索引,3、LayerMask数据

       一般地,在编辑器中,我们设置GameObject的Layer,是直接使用的层的名字,比如Default、UI等等。

        而在代码中,使用的是GameObject的Layer属性,该属性是int型,取值在0到31之间,代表层索引,并且和名称一一对应。可以在Tags And Layers面板中设置对应关系(操作方法Editor->ProjectSetting->Tags And Layers)。

       另外,我们常常会使用到LayerMask结构定义字段,这样可以在编辑器中选择层。LayerMask的value属性虽然是一个int型,但是和GameObject的Layer属性不同。顾名思义LayerMask.value是一种Mask(通常用二进制表示),他的取值为1<<0到1<<31,即2^0到2^31(<<为二进制左移运算符,即1的二进制左移31位,所以结果为2^31)。另外一个LayerMask可以包含多个层,举个例子0x0001(1)表示1层,0x1001(9)表示第4层和第1层。

        要达到这样表示多个层的效果,需要使用|运算(|为二进制或运算,0|1=1,0|0=0,1|0=1,1|1=1,即有1则1),反过来要想判定一个LayerMask中是否有指定的Mask只要使用&运算(&为二进制且运算,0&1=0,1&0=0,1&1=1,0&0=0,即有0则0)判定运算的结果是否为这个Mask值即可。举个例子比如0x1001&0x1000=0x1000,所以可以判定0x1001的Mask值中包含了0x1000这个Mask值。

       上述了Unity的3种Layer的表示方法。在进行相互转化时可以使用Unity提供的LayerMask操作的相关方法,即LayerMask. NameToLayer(string layername),可以将一个名称转化为一个int型层索引,或者LayerMask. LayerToName(int layerindex)。而将int型转化为LayerMask,则需要做移位操作。或者使用LayerMsk.GetMask(param string[] name)方法将一组名称直接转成一个LayerMask

常用方法

  • 将一个GameObject的layer转成LayerMask为

1<<GameObject.Layer

  • 通过名称复合某二个层的操作为

1<<LayerMask. NameToLayer(“layer1”)| 1<<LayerMask. NameToLayer(“layer2”)

          或者

LayerMask.GetMask(“layer1”,”layer2”)

  • 判定一个GameObject是否在LayerMask中

Return (layermask&1<<GameObject.Layer)==1<< GameObject.Layer

         或者

Return (layermask&1<<GameObject.Layer)!=0

  • 判定一个GameObject是否在某一个名称(比如“layer”)的层上

Return GameObject.Layer== LayerMask. NameToLayer(“layer”)

Unity3D Layer要点的更多相关文章

  1. Unity3d集成移动MM SDK 2.2的技术要点(坑爹的MM SDK)

    原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/ U3D集成移动MM的SDK绝对是以坑爹为主的东西. 浪 ...

  2. Unity3d 要点板书

    WWW.unity3d.com.cn Unity Project  unity的项目文件/专案 Scene  unity的场景文件 Scene 场景视窗 Game 预览视窗 H... 物件视窗 Pro ...

  3. Unity3d学习 预设体(prefab)的一些理解

    之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体 ...

  4. Thinking in Unity3D:渲染管线中的Rendering Path

      关于<Thinking in Unity3D> 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方面的信息,同时也感叹Unity3D设计之精妙.不得不说,笔者最近几年的 ...

  5. 关于Unity3D手机网游开发一些小看法

    它的知识技能和职责,我就不仔细说了,说细了有一点像招聘启示.他的主要职责虽然负责技术,但是也给产品决策和方向提供一些决策.他最主要的考核指标,就是经验很重要,最好主导或参与过一款网络游戏的开发.举个例 ...

  6. Unity3D心得分享

    本篇文章的内容以各种tips为主,不间断更新 系列文章 =========================== "Unity测试系列"文章索引 Unity-Animator深入系列 ...

  7. Unity3D手游开发实践

    <腾讯桌球:客户端总结> 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身.虽然基于Unity3D,很多东西同样适用于Cocos.本文从以下10大点进行阐述: 架构设计 原生插件/ ...

  8. Unity3D核心类型一览

    Unity3D核心类型一览 本文记录了Unity3D的最基本的核心类型.包括Object.GameObject.Component.Transform.Behaviour.Renderer.Colli ...

  9. Unity3D重要知识点

    数据结构和算法很重要!图形学也很重要!大的游戏公司很看重个人基础,综合能力小公司看你实际工作能力,看你的Demo. 1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作. 渲染管道 ...

随机推荐

  1. swift2.0 字符串,数组,字典学习代码

    swift 2.0 改变了一些地方,让swift变得更加完善,这里是一些最基本的初学者的代码,里面涉及到swift学习的最基本的字符串,数组,字典和相关的操作.好了直接看代码吧. class View ...

  2. block之--- 基本使用

    block的类型:对象 官方文档描述如下 “Blocks are Objective-C objects, which means they can be added to collections l ...

  3. JSP(基础语法)

    一.JSP简介 JSP全称为Java Server Pages,其根本是一个简化的Servlet设计,它实现了在java当中使用HTML标签.JSP是一种动态网页技术标准也就是javaEE的标准.JS ...

  4. AngularJS2环境配置

    所使用到的文件目录结构如下所示: 1.      创建配置文件: 1.1.  创建目录: mkdir angular-quickstart cd angular-quickstart 1.2.  载入 ...

  5. 从头开始搭建一个Spring boot+RabbitMQ环境

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  6. JAVA设计模式:代理模式&& 装饰模式区别

    在前面学习了代理模式和装饰模式后,发现对两者之间有时候会混淆,因此对两者进行了区别和理解: 装饰模式你可以这样理解,就像糖一样,卖的时候商家大多要在外面包一层糖纸,其实原本还是糖. public in ...

  7. Error: Cannot find module 'gulp-clone'问题的解决

    安装完gulp环境,并且配置好gulpfile.js,执行静态文件压缩和代码混淆时,出现如下错误: Error: Cannot find module 'gulp-clone' Error: Cann ...

  8. angular 2 animate 笔记

    好久没有在这里写点笔记了.时隔已久,angular1 去 angular2 咯 笔记来源:https://angular.cn/docs/ts/latest/guide/animations.html ...

  9. AlloyTouch.js 源码 学习笔记及原理说明

    alloyTouch这个库其实可以做很多事的, 比较抽象, 需要我们用户好好的思考作者提供的实例属性和一些回调方法(touchStart, change, touchMove, pressMove, ...

  10. 【Unity优化】构建一个拒绝GC的List

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 上篇文章<[Unity优化]Unity中究竟能不能使用foreach?> ...