Unity3D Layer要点

简介

        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”)

时间: 2024-11-05 23:26:04

Unity3D Layer要点的相关文章

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

原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/ U3D集成移动MM的SDK绝对是以坑爹为主的东西. 浪费大量时间去弄这玩意.真不知道设计MM SDK的人咋想的,你们应该去参考下移动百宝箱的SDK设计方式,简单易用不坑爹,1小时内绝对能搞定. 因为移动MM支付的SDK只提供android版本的,要自己写过一个android项目再打包重新生成一个jar来供Unity3d引擎使用,这一部分我就不写了,网上

Unity3d 要点板书

WWW.unity3d.com.cn Unity Project  unity的项目文件/专案 Scene  unity的场景文件 Scene 场景视窗 Game 预览视窗 H... 物件视窗 Project项目/专案管理视窗 I.....属性栏(监测视窗) 材质 MeshRenderer 组件 第三人称控制器自动捕捉的是带有MainCamera标签(tag)的摄像机   子文件夹含有Assets文件夹 unity项目文件   aaa.Unity Scene File    unity场景文件

Unity3d要点

屏幕坐标与鼠标位置:屏幕坐标系以左上角为原点(0, 0),右下角为(Screen.Width, Screen.Height).Input.mousePosition鼠标位置以屏幕左下角为原点(0, 0),屏幕右上角为(Screen.Width, Screen.Height). 一般在新建类时会产生空的Update函数.如果代码不需要用到该函数,应该该函数进行删除.另外,尽量不要在Update函数内执行Find.FindObjectOfType.FindGameObjectsWithTag这些寻找

Unity3D 学习笔记 - Garen Pick the Balls 捡球小游戏设计 (二) Macanim 动画状态机

注:本游戏开发环境为Unity3D 5.3.4 本星期要求: 模仿 AnimationEvent 编写一个 StateEvents 类 用户可以创建一个指定时间.指定状态触发的事件类 事件可以采用反射机制,调用调用客户的方法:或使用订阅发布方法调用客户的方法. 在你的动画控制程序中使用 StateEvents 类 我采用的是上星期的Garen Pick the Balls小游戏,将Legacy动画部分用Mecanim重写. 要点: 1. 初次状态机开发,尚未实现Run和Attack同时进行(Bl

unity3d中的物体,在Scene窗口中可以看到,而在Game窗口中看不到的原因

unity3d中的物体,在Scene窗口中可以看到,而在Game窗口中看不到的原因: 多半是因为物体所属Layer与照相机的culling mask不一致导致的,或者超出照相机的可视范围. 如果游戏中有多个相机,每个相机都有自己的可视范围和culling mask,物体在移动的过程中,进入不同的相机,其可见性可能是变化的,取决与物体所属Layer与当前相机是否一致

使用Unity3D的50个技巧:Unity3D最佳实践

刚开始学习Unity3D时间不长,在看各种资料.除了官方的手册以外,其他人的经验也是非常有益的.偶尔看到老外这篇文章,觉得还不错,于是翻译过来和大家共享.原文地址:http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/,下面是译文. 欢迎转载,请注明出处:燕良@游戏开发.另外,欢迎各路高手加入我的QQ群:264656505,切磋交流技术. 关于这些技巧 这些技巧不可能适用于每个项目. 这些是基于

深度学习:从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点?

深度学习工具潮流滚滚,各种工具层出不穷.也有各种文章从易用性,可移植性,灵活性和效率方面对于各个系统进行比较.这篇文章希望从系统设计上面来讲来回答这个讨论这个问题:如果想到从头设计一个TensorFlow3一样的新一代深度学习系统,到底需要把握哪些要点. 计算单元:从layer abstraction到operator 大家熟悉的第一代深度学习系统,以cuda-convnet21和caffe为代表.这些系统主要的一大特点是提出了一个以深度学习计算层次layer为基本单元的计算单位.不同的laye

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

之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体的作用: 可以重复的创建具有相同结构的游戏对象. .1下面来讲解一下如何制作一个简单的预设体(上下为流程和结果图): .2 创建多个prefabs_new(代码,结果图): 1 using UnityEngine; 2 using System.Collections; 3 4 //[Execute

Unity3D脚本学习——运行时类

AssetBundle 类,继承自Object.AssetBundles让你通过WWW类流式加载额外的资源并在运行时实例化它们.AssetBundles通过BuildPipeline.BuildAssetBundle创建. 参见:WWW.assetBundle ,Loading Resources at Runtime ,BuildPipeline.BuildPlayer function Start () { var www = new WWW ("http://myserver/myBund