Unity关于Layer的管理

这篇具有很好参考价值的文章主要介绍了Unity关于Layer的管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这算一个给一些多人合作的中型以上的项目提供的一个避坑建议,即layer管理。

unity 设置layer,unity3d,unity,layer

没错,就是如图这个东西,应该大部分人都知道有这么个东西和大概的用途,但是基本没怎么动过。当然,在大部分项目中也不需要怎么处理这玩意,顶多增加个层级某些物体设置对应层级,这部分的api也很简单。

unity 设置layer,unity3d,unity,layer

不过一般使用到layer的项目,大家更喜欢直接赋值,我们应该不难看到项目中有类似的代码

 	public static void SetLayerContainsChildren(Transform transform, int layer)
    {
        transform.gameObject.layer = layer;
        transform.GetComponentsInChildren<Transform>().ForEach(t => t.gameObject.layer = layer);
    }

    public static void SetLayer(GameObject gameObject, int layer)
    {
        gameObject.layer = layer;
    }

现在聊一下这样会出什么问题,比如后期的时候你需要调整一些层级的先后顺序,你去设置里面改了layer顺序之后发现,显示的效果稀碎。因为你设置的layer 对应的int值变化了。所有你代码设置的各种物体的层级都凉凉了。然后你去搜layer,发现还有几千行Player的代码。

所以,为了避免后期的坑,在项目之初还是又管理layer的必要的。

以下是我的两种简单思路。

方案1,增加layer层级的枚举,所有layer都通过枚举转换来进行,layer变更的话更新对应枚举即可。
方案2,赋值按名称来赋值。LayerMask实际上是一个位码操作,在Unity3D中一共有32个Layer层,并且不可增加。所以我们只要遍历一遍,找到名称对应的layer的int来赋值,即可保证我层级始终和我预期一致。

    public static void SetLayerByName(GameObject gameObject, string layername)
    {
        int layer = 0;
        for (int i = 0; i < 32; i++)
        {
            if (LayerMask.LayerToName(i) == layername)
            {
                layer = i;
                break;
            }
        }
        gameObject.layer = layer;
    }

以上。文章来源地址https://www.toymoban.com/news/detail-527995.html

到了这里,关于Unity关于Layer的管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity3D框架】Unity Package Manager自定义包管理实践

            在公司开发的前两个项目,虽然搭建了基础的框架,有一些目录划分,但是当项目复杂度增长到一定程度,以及后续新开了一些新的项目之后,对于基础框架的管理就遇到了一些挑战,主要体现在以下几个方面:         1、多项目之间拷贝了类似的基础框架,但是

    2024年02月03日
    浏览(63)
  • 【Unity2D】Order in Layer 与Layer的区别

    Order in Layer 是Unity 图形渲染的顺序,通过设置Order in Layer ,可以设置同层(Layer)的物体出现顺序,可以默认使一种物体出现在另一种物体前方 设置一物体默认在其他物体之上不被遮挡  Layer是Unity中物体的层级,不同物体可以位于不同层上 通过这个可以设置不同层的物体之间的

    2024年02月14日
    浏览(27)
  • 【Unity】判定Layer是否在LayerMask中

    Layer一共有32层,是因为使用了int32表示:0000 0000 0000 0000 0000 0000 0000 0000 LayerMask勾选了第几个层级,就将右向左数的第n位的0改为1。 举例:LayerMask勾选了层级1、层级4和层级6:0000 0000 0000 0000 0000 0000 0011 0010 获取GameObject上的layer时,得到的是层级的标号,层级1对应着数字1。 所

    2024年02月15日
    浏览(23)
  • Unity3D学习记录01:URP渲染管线以及3D游戏场景设置

    以下内容所使用的版本均为Unity2022.3 先在 Window-Package Manager-Unity Registry 里面搜索添加Universal RP   Unity中,创建渲染管线的方式为Asset文件夹下右键 Create-Readering-URP Asset(with Universal Asset) 会创建以下两个Pipeline:  接着在图中的设置里添加这两个渲染管线(Project Setting在Edit窗口下

    2024年02月08日
    浏览(39)
  • Unity UI与粒子 层级问题Camera depth Sorting Layer Order in Layer RenderQueue

    Unity游戏开发中,模型、界面、特效等,需要规划好 layer 的概念,涉及到摄像机(Camera)、画布(Canvas)、Shader等相关内容。 在 Unity 中,渲染顺序是由多个因素共同决定的,大致分为三层优先级: Camera depth、Sorting Layer/Order in Layer 和 RenderQueue 。 一般游戏项目,会创建至少两

    2024年02月08日
    浏览(26)
  • 【Unity】UGUI中Camera Depth,Canvas Sorting Layer、Order in Layer与Particle System渲染层级分析

    目录   前言 一、项目需求 二、Camera 1.Clear Flags 2.Culling Mask  三、Canvas 1.Sorting Layer 2.Order in Layer 四、Particle System 1.Sorting LayerID 与Order in Layer 总结         最近在做项目的过程中,发现项目中的部分3d模型会被粒子特效所遮挡,这并不是笔者想要的效果,于是经过一番面向

    2024年02月05日
    浏览(37)
  • Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放

    1.GF万物基于引用池IReference 2.ObjectBase : IReference类的m_Target持有unity中Mono,资源,GameObejct 3.AssetObject : ObjectBase类m_Target持有Assetbundle中的Asset,具有获取,引用两个计数管理释放 4.ResourceObject : ObjectBase类m_Target持有Assetbundle,具有获取,引用两个计数管理释放 5.EntityInstanceObject :

    2024年02月11日
    浏览(22)
  • Unity Animator.Play(stateName, layer, normalizedTime) 播放动画函数用法

    接口: 参数 含义 stateName 动画状态机的某个状态名字 layer 第几层的动画状态机,-1 表示播放第一个状态或者第一个哈希到的状态 normalizedTime 从state动画进度的百分比(100%)开始播放到结束 Unity Animator.Play 详解 基于 Animator 制作一个Cube旋转的帧动画 在 Cube 上实现调用 Play(st

    2024年02月13日
    浏览(44)
  • 【Unity3D】Android 打包 ② ( Android 编译选项 | Android 工程设置 | 配置基本信息 | 配置不同分辨率图标 | 配置启动动画 | 其它设置 )

    在上一篇博客 【Unity3D】Android 打包 ① ( Android 编译选项 | 安装 Android Build Support 模块 ) 中 讲解了 Android 打包的最基本配置 , 安装 Android Build Support 模块 ; 本篇博客继续讲解后续工作 ; 在 Unity 编辑器中选择 \\\" 菜单栏 | File | Build Settings \\\" 选项 , 点击 Build Settings 对话框的左下角的

    2023年04月19日
    浏览(34)
  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    Unity 中使用的 3D 模型格式为 FBX , 使用如下建模软件 可制作该类型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 将 3D 模型导出为 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目录 下 , 创建一个模型目录 Models , 将 模型文件直接从文件系统中拖到该目录中

    2023年04月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包