unity3d中的layer_unity3d tag layer - CSDN
  • Unity中是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)。 在Unity中可编辑的Layer如下图所示: 在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共有24...

    Unity中是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)。
    在Unity中可编辑的Layer如下图所示:


    在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共有24个(8—31层),官方已使用的是0—7层,默认不可编辑!

    LayerMask实际上是一个位码操作,在Unity3D中一共有32个Layer层,并且不可增加。

    位运算符

    按位运算符:~、|、&、^。位运算符主要用来对二进制位进行操作。

    逻辑运算符:&&、||、!。逻辑运算符把语句连接成更复杂的复杂语句。

    按位运算符:左移运算符<<,左移表示乘以2,左移多少位表示乘以2的几次幂。

    举个栗子:

    var temp = 14 << 2; 表示十进制数14转化为二进制后向左移动2位。

    temp最后计算的值为 14乘以2的平方,temp = 56;

    同理,右移运算符>>,移动多少位表示除以2的几次幂。

    具体可以转到博客:按位运算符.

    上面是个基础知识的补充。

    在Unity中是用LayerMask

    Layers

    官方给出的描述是:Layers are most commonly used by Cameras to render only a part of the scene, and by Lights to illuminate only parts of the scene. But they can also be used by raycasting to selectively ignore colliders or to create collisions。

    翻译下就是:Layers通常被摄像机用来渲染部分场景,和灯光照射部分场景使用。但是它们也可以用来做射线检测时忽略一些collder或Collision使用。

    如何编辑Layers.

    在代码中使用时如何开启某个Layers?

    LayerMask mask = 1 << 你需要开启的Layers层。

    LayerMask mask = 0 << 你需要关闭的Layers层。

    举几个个栗子:

    LayerMask mask = 1 << 2; 表示开启Layer2。

    LayerMask mask = 0 << 5;表示关闭Layer5。

    LayerMask mask = 1<<2|1<<8;表示开启Layer2和Layer8。

    LayerMask mask = 0<<3|0<<7;表示关闭Layer3和Layer7。

    上面也可以写成:

    LayerMask mask = ~(1<<3|1<<7);表示关闭Layer3和Layer7。

    LayerMask mask = 1<<2|0<<4;表示开启Layer2并且同时关闭Layer4.

    代码:

    using UnityEngine;
    using System.Collections;
    
    public class example : MonoBehaviour {
        LayerMask mask =  ~(1<<3|1<<7);
        void Update() {
            if (Physics.Raycast(transform.position, transform.forward, 100, mask.value))
                Debug.Log("Hit something");
    
        }
    }
    

    展开全文
  • 层和层的掩码是游戏重要的角色,在Unity中用int32数据类型来表示32个Layer层。int32表示二进制一共有32位(0—31)。 在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer...
    
    

            层和层的掩码是游戏中重要的角色,在Unity中用int32数据类型来表示32Layer层。int32表示二进制一共有32位(031)。

    Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共有24个(831层),官方已使用的是07层,默认不可编辑!

            LayerMask实际上是一个位码操作,在Unity3D中一共有32Layer层,并且不可增加。

    位运算符:

    按位运算符:~|&^。位运算符主要用来对二进制位进行操作。

    逻辑运算符:&&||、!。逻辑运算符把语句连接成更复杂的复杂语句。

    按位运算符:左移运算符<<,左移表示乘以2,左移多少位表示乘以2的几次幂。

    举个例子:

    var temp = 11 << 2; 表示十进制数11转化为二进制后向左移动2位。temp最后计算的值为 11乘以2的平方,temp = 44;

    同理,右移运算符>>,移动多少位表示除以2的几次幂。

     

    Unity中是用LayerMask

        Layers通常被摄像机用来渲染部分场景,和灯光照射部分场景使用。但是它们也可以用来做射线检测时忽略一些collderCollision使用。

    如何编辑Layers.

    在代码中使用时如何开启某个Layers?答案是正确使LayerMask

    LayerMask mask = 1 << 你需要开启的Layers层。

    LayerMask mask = 0 << 你需要关闭的Layers层。

     例如:

    LayerMask mask = 1 << 2; 表示开启Layer2

    LayerMask mask = 0 << 5;表示关闭Layer5

    LayerMask mask = 1<<2|1<<8;表示开启Layer2Layer8

    LayerMask mask = 0<<3|0<<7;表示关闭Layer3Layer7

    看看这段代码,利用掩码可以过滤射线触碰事件,这些层将对于射线为不可见了:

    using UnityEngine;

    using System.Collections;

     

    public class example : MonoBehaviour {

       LayerMask mask =  ~1<<3|1<<7;

       void Update() {

           if (Physics.Raycast(transform.position, transform.forward, 100,mask.value))

               Debug.Log("Hit something");

     

        }

    }

    展开全文
  • UnityLayer原理

    2019-09-03 13:11:56
    public class GridLayerMask { int _LayerMask = 0; public int LayerMask { get { return _LayerMask; } } ...
       public class GridLayerMask 
        {
    
            int _LayerMask = 0;
    
            public int LayerMask
            {
                get
                {
                    return _LayerMask;
                }
            }
            //例:ContainLayer( ~(1 << 2 | 1 << 5)) 
            public bool ContainLayers(int layerMask)
            {
                return (_LayerMask & layerMask) > 0;
            }
            //例:AddLayers((1 << 2 | 1 << 5)) 
            public void AddLayers(int layerMask)
            {
                _LayerMask = _LayerMask | layerMask;
            }
            //例:RemoveLayers( ~(1 << 2 | 1 << 5)) 
            public void RemoveLayers(int layerMask)
            {
                _LayerMask = (_LayerMask & (_LayerMask ^ layerMask));
            }
            public static bool ValidateLayerMask(int sourceLayerMask, int layerMask)
            {
                return (sourceLayerMask & layerMask) > 0;
            }
        }

    现在游戏里面寻路在用的Mask,因为Unity不公开源码,所以就自己写了一个,原理跟它的一样,就是用位运算来进行判断,比如要找判断是否是layer 2或者3,就用 1<<2 | 1<<3如果要判断是否是除了2和3以外的layer就用    ~(1 << 2 | 1 << 3),是不是跟Unity的Raycast函数调用方式一样?这样好处是 不用list没有动态分配内存,并且位运算效率高。坏处是只能有32个层,因为int最大32位,也可以用long,这样可以有64位,一般来说32,unity用的就是int,所以它的层数最大32层。

    展开全文
  • Unity中Layer的概念

    2014-02-20 18:50:30
    unity里面每个gameobject都可以设只layer(1个int值)。 layer有什么用呢? 一方面相机可以设置是否渲染某layer 另一方面可以再raycast设置是否忽略检测某layer。 static function Raycast ...
    unity里面每个gameobject都可以设只layer(1个int值)。
    layer有什么用呢?
    一方面相机中可以设置是否渲染某layer


    另一方面可以再raycast中设置是否忽略检测某layer。
    static function Raycast (origin : Vector3direction : Vector3distance : float = Mathf.InfinitylayerMask : int = kDefaultRaycastLayers) : bool

    注意在代码使用中传递某层值时int是指2^n次方,譬如第9层,那么其值应该是1<<9,即2^9,
    如:仅仅检测scene这个layer的raycast,则 int layer = ~(1 << LayerMask.NameToLayer("Scene"));

    layer的设置在project setting--tags中。
    
    展开全文
  • 文章目录一. 前言二. 摄像机(Camera)1. 3D摄像机2. UI摄像机3. 摄像机的Depth和Clear Flags设置三....Unity游戏开发,模型、界面、特效等等,需要规划好层的概念,涉及到摄像机(Camera)、画布(Canvas)、Sha...
  • Unity3D UGUI修改Layer层级让摄像机看不到UI 最近测试才发现,改变UI自身的Layer层是无法让摄像机屏蔽UI的,不过可以通过改变其 Canvas(画布)的Layer层来影响摄像机。 ...
  • Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共有24个(8—31层),官方已使用的是0—7层,默认不可编辑!如图: 在代码使用layers时,先了解 按位运算符:左移运...
  • Unity是用int32来表示32个Layer层。int32表示二进制一共有32位(0—31)。在Unity可编辑的Layer如下图所示: 在Unity每个GameObject都有Layer属性,默认的...LayerMask实际上是一个位码操作,在Unity3D...
  • 在 Tag Manager(Unity 5 称为 Tags & Layers)没有限定所定义的数量 Layer: 为游戏物件分类。 让 Camera 指定哪些物件要被画出来。 让 Light 指定哪些物件要被照明。 让物理射线确认哪些物件要被侦测到。 ...
  • 在导入别人的package包的时候,tag信息和layer信息导不进来...的Unity3D研究院之脚本自动添加tag和Layer。这给unity版本很早了。整合了一下各种版本,测试可以使用,代码如下: 场景的物体的layer 需要用代码去设...
  • Unity3D 2018 版本使用 Post-Process 组件给屏幕添加屏幕特效,按照之前版本在相机上添加平面特效组件。2018版本要在Camera 上添加 Post Process Layer.cs脚本(如果想让相机起作用,这个是必须添加)、Post Process ...
  • 我们想要查看场景物体的Layer时,需要在Hierarchy窗口点击GameObject,然后才能在Inspector显示Layer等相关属性, 当场景物体多的时候,这个操作还是比较麻烦的。那么有没有一种方式可以方便直观查看所属Layer...
  • Unity3D常见面试题

    2017-08-11 20:20:00
    Unity3D常见面试题
  • 众所周知,自动寻路是...然而unity3d中提供了一套非常成熟的组件来为我们解决这一难题。今天,我们就来一起欣赏一下Unity3d自带的自动寻路系统。  我们在学习一个陌生的知识时,免不了要记一些令人烦恼的概念,自动
  • 射线:射线是3D世界一个点向一个方向发射的一条无终点的线,在发射轨迹与其他物体发生碰撞时,它将停止发射。 用途:在unity中射线应用范围比较广,多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动...
  • 1,layer是对游戏所有物体的分类别划分,如UIlayer, waterlayer, 3DModelLayer, smallAssetsLayer, effectLayer等。将不同类的物体划分到不同的层,便于相机拣选,在相机的cullmask可以选择渲染哪些层,不选择的...
1 2 3 4 5 ... 20
收藏数 4,532
精华内容 1,812
热门标签
关键字:

unity3d中的layer