精华内容
下载资源
问答
  • unity中的层级问题

    千次阅读 2020-06-30 09:47:19
    1.当UI界面中有粒子特效时,给UI添加Canvas,不会影响粒子的层级。 2.UI中添加贴图特效时,UI中的Canvas的Order in Layer层级不能太高,太高会使使贴图的特效看不见,如果硬是要这样,那只能修改粒子的渲染队列数值...

    注:在UI界面显示中,场景中需要一个清屏的摄像机,所以至少应该有两个摄像机。

    1.当UI界面中有粒子特效时,给UI添加Canvas,不会影响粒子的层级。

    2.UI中添加贴图特效时,UI中的Canvas的Order in Layer层级不能太高,太高会使使贴图的特效看不见,如果硬是要这样,那只能修改粒子的渲染队列数值。

    影响层级的因素

    1.Camera的Depth

    depth小的先渲染

    2.Sorting Layer 

    在Tags & Layers设置中可见

    3.Order in Layer

    相对于Sorting Layer的子排序,用这个值做比较时只有都在同一层时才有效。

    4.Render Queue

    Shader中对Tags设置的“Queue”。

    排序结果1、Camera Depth

    永远最高。Camera Depth小的一定先进渲染管线。除非UGUI的Screen Space - Overlay

    2、当Sorting Layer和Order In Layer相同时

    RenderQueue小的先进渲染管线。

    3、当Sorting Layer和Order In Layer不相同时!

    3.1 当两个材质使用了不同的RenderQueue,且这两个RenderQueue都在[0~2500]或[2501~5000]时,SortingLayer和OrderInLayer的排序生效。

    3.2 当两个材质使用了不同的RenderQueue,且这两个RenderQueue分别在[0~2500]和[2501~5000]时,则一定会按照RenderQueue绘制,无视SortingLayer、OrderInLayer的排序。

    2500为Unity作为Opacity(不透明)和Transparent(透明)的分界线,因此如果两个材质的Queue分别在分界线的两边,也就是一个不透明一个透明,则Unity一定会先把不透明的物体送进渲染管线,无论Sorting Layer和Order In Layer到底怎么排序。

     

    UGUI:

    1.Unity3d中的渲染顺序如下:

      不同的Camera的Depth

      相同Camera下的不同SortingLayer

      相同SortingLayer下的不同Z轴/Order in Layer

    2.改变控件之间的层级关系

     (1)同一canvas下:

         改变控件transform的SiblingIndex,

         transform.GetSiblingIndex();

         transform.SetSiblingIndex(int index); //index值越大,越后渲染,层级越大,越显示在前面

     (2)不同Canvas下:

        设置Canvas下的Sort Order  

    MeshRenderer的SortingLayer与Canvas的SortingLayer相同

    MeshRenderer的SortingOrder与Canvas的OrderInLayer相同

    展开全文
  • B1.transform.SetSiblingIndex(2); B2.transform.SetSiblingIndex(1); B3.transform.SetSiblingIndex(0); B1,B2,B3在同一层级
    B1.transform.SetSiblingIndex(2);
    B2.transform.SetSiblingIndex(1);
    B3.transform.SetSiblingIndex(0);

    B1,B2,B3在同一层级

    展开全文
  • Unity UI层级/遮挡顺序

    2021-09-23 14:13:06
    Unity的Hierarchy层级面板中,层级在下的会遮挡住层级在上的UI视图,如下图... 若想在程序运行过程中动态调整层级顺序,则需要用到Transfrom类中的函数SetSiblingIndex、SetAsFirstSibling、SetAsLastSibling: ...

            在Unity的Hierarchy层级面板中,层级在下的会遮挡住层级在上的UI视图,如下图所示,有三个Image物体Red、Yellow、Blue 层级从上到下,在Scene窗口中可以看见蓝色在最上层,会遮挡住黄色和红色、黄色在中间层,被蓝色遮挡但会遮挡红色,红色在最下层。

             若想在程序运行过程中动态调整层级顺序,则需要用到Transfrom类中的函数SetSiblingIndex、SetAsFirstSibling、SetAsLastSibling:

            1.SetSiblingIndex函数需要传入一个int类型参数,表示将该物体的层级调整为第几个;

            2.SetAsFirstSibling函数会将层级调整为第一个;

            3.SetAsLastSibling函数会将层级调整为最后一个。

    using UnityEngine;
    
    public class Foo : MonoBehaviour
    {
        public Transform red;
        public Transform yellow;
        public Transform blue;
    
        private void Start()
        {
            red.SetAsLastSibling();
        }
    }

            上述代码运行后会将red的层级调整为最后一个,可见遮挡效果变为红色遮住其它颜色:

       欢迎关注本人公众号 “当代野生程序猿”。

    展开全文
  • unity 渲染层级详解

    千次阅读 2019-02-25 14:08:39
    Camera是unity中最优先的渲染顺序控制。depth越大,渲染顺序越靠后。  2、Sorting Layer 在Tags & Layers设置中可见 3、Order In Layer 相对于Sorting Layer的子排序,用这个值做比较时只有都在同一...

    1  Camera 
    Camera是unity中最优先的渲染顺序控制。depth越大,渲染顺序越靠后。 

    2、Sorting Layer
    在Tags & Layers设置中可见

    3、Order In Layer
    相对于Sorting Layer的子排序,用这个值做比较时只有都在同一层时才有效。
    4、RenderQueue
    Shader中对Tags设置的“Queue”。

    当Sorting Layer和Order In Layer相同时
    RenderQueue小的先进渲染管线。

    当Sorting Layer和Order In Layer不相同时!
    当两个材质使用了不同的RenderQueue,且这两个RenderQueue都在[0~2500]或[2501~5000]时,SortingLayer和OrderInLayer的排序生效。

    当两个材质使用了不同的RenderQueue,且这两个RenderQueue分别在[0~2500]和[2501~5000]时,则一定会按照RenderQueue绘制,无视SortingLayer、OrderInLayer的排序


    5、 MeshRenderer 和SpriteRenderer 都是继承于 Renderer 的组件 
    它们的 sorting 和 orderinlayer 都是暴露出来的属性  可以在属性视图修改
    模型蒙皮  skinned mesh render 虽然也继承了 Renderer 但在属性视图没有出现该属性    一般只能更改蒙皮的shader  RenderQueue  调整默认sorting layer 和 Orderinlayer下 和其他物体的层级
    所以一般设置材质的renderQueue或直接在shader中设置。

    在ShaderLab中,有4个提前定义好的render queue,你可以设置更多的在他们之间的值:
    Background :表示渲染在任何物体之前 
    Geometry(default):渲染大多数几何物体所用的render queue 
    AlphaTest:用于alpha测试 
    Transparent:用于渲染半透明物体 
    Overlay:渲染所有物体之上


    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    如果混用 2DUI 和 模型  模型又穿插在两个 NGUI panle中间  不通过增加摄像机数量来解决的话应该怎么办:
    默认情况下 游戏中只有一个默认的 sorting layer , 和一个默认的 OrderInLayer 。 所有物体都在一个 sorting layer 和
    OrderInLayer 下面  ,
    这时候设置渲染顺序的方式就是通过更改 RenderQueue ,较小的先渲染  ,   Ngui panle 会默认根据drawcall 优化操作 设置当前panle下的ui RenderQueue (一般是3000起)。

     

    Automatic:由NGUI自动生成 
    StartAt:手动设置一个值 
    Explicit:同一个panel下的RenderQueue的值相同

    看代码可以理解一下,UIPanel.cs 

    而使用 skinned mesh render , 则是更改使用材质处shader 的 skinned mesh render ,  设置值在两个panle  RenderQueue 之间就行了。

    如果是使用龙骨和spine 动画还有粒子系统的话, 层级控制就只能在默认 sorting layer 下更改 龙骨、 spine、粒子系统的 orderinlayer ,    再打开 ngui panle 上的 oder in layer 选项,   通过设置3者之间的oder in layer值调整顺序就好了 。

    再加上 使用skinned mesh render 蒙皮的模型的话,在开启ngui panle的 oder in layer 后,  由于模型默认在最低的 order in layer 下,此时 ,再怎么调整模型的 shader RenderQueue 模型都不会渲染到最上面,解决办法是:
    通过脚本获取 模型 skinned mesh render 的  oderinlayer 参数,  并修改它的值穿插在各层之间 

    (1 性能上可能增加drawCall 还未具体测试过 , 模型是不是这样修改渲染层级我也不知道 ,没怎么用过 ,这只是我自己的解决方案。 2 还于到一个情况  ,如果Ngui的panle  打开了Oder in layer 选项而又 设值为0 的情况下  ,该panle下的对象 可能渲染到最上层,原因可能要看代码了)。

    展开全文
  • Unity渲染层级关系

    千次阅读 2018-01-24 11:35:33
    简单总结一下,决定Unity渲染关系的层级顺序是: Camera //在不同的Camera中,渲染顺序由Depth决定,depth值越低,越先渲染,值越高, 越后渲染。 sorting layer //在相同的Camera...
  • Unity 之 UGUI Image 和 粒子特效显示层级关系调整
  • unity代码修改子物体层级的顺序

    万次阅读 2017-05-06 11:36:22
    也就是说,运行游戏后,物体的渲染顺序是一个一个计算的,个人感觉操作顺序是根据Hierarchy层级面板从上往下的顺序(有子物体是深度优先还是广度优先?),UI渲染也不例外。 所以的话,在同一个canvas中,物体的...
  • 调整碰撞检测层相交
  • Unity UGUI调整UI与粒子特效的显示层级 方法三、 我们也可以修改shader的渲染区域来解决该问题,添加一个脚本MaskExtend,初始化一个裁剪的区域,然后修改特效的shader,使特效在裁剪区域才可以显示。 using ...
  • Unity层级碰撞

    千次阅读 2018-09-16 23:46:50
    unity中这种情况的处理是通过分层碰撞来解决的! 先给一个官方资料:http://docs.unity3d.com/Documentation/Components/LayerBasedCollision.html 第一步:当然在实现效果之前你要为这几...
  • 1. 顺便提一下UI格子的动态排序,即通过改变子物体顺序,调整UI显示层级顺序 //设为第一个子物体 itemButton.transform.SetAsFirstSibling(); //设为最后一个子物体 itemButton.transform.SetAsLastSibling...
  • Unity中代码修改UI层级关系

    千次阅读 2019-01-02 10:16:42
    /// 修改UI背景图的层级 /// *******背景图和显示图层必须在同意级别********** /// </summary> /// <param name="Trans_Background">背景图</param> ///...
  • Unity5.x层级关系调整

    千次阅读 2018-04-27 20:58:01
    Unity5.x版本自带了关于UI和模型特效之间的遮挡排序功能。在Untiy编辑器中,按操作 Editor/Project Settings/Tags and Layer,设置我们预留的图像层。一般情况下我们把UI分为3-4层(主界面 功能层 高层 弹窗层 ),...
  • 如何实现粒子显示在UI上 ...使用Canvas中的Order in Layer配合粒子系统Renderer中的Order in Layer调整层级关系。 如果要调整粒子与Canvas下子物体的层级关系,为该子物体添加Canvas组件,勾选Override ...
  • Unity-Canvas层级

    千次阅读 2018-11-29 10:14:57
    我在一个panel上添加了Canvas组件 通过代码 canvas.overrideSorting = true;  canvas.sortingOrder = 99;...答:通过Panel挂Canvas组件,动态调整Panel层级,挂graphic raycaster组件是为了让UI事...
  • 就是要各种穿插,那么要如何解决这个穿插层级问题呢。 废话不多说,此处用到了知乎某大佬的解决方案。 先看效果图: 这里RawImage用来渲染特效,可以很完美的利用UGUI自己的层级关系,显示在Image A上面,Image...
  • 方法:一:将需要控制UI显示层级的Image换成Sprite 1.创建一个粒子系统,和两张Sprite. 2.设置Sprite1的Order in Layer为 -1,设置Sprite1的Order in Layer为 1,粒子的Order in Layer成了 0,此时粒子夹在两张图片...
  • unity中特效和UI层级的终极解决方案

    千次阅读 2020-08-11 10:40:23
    https://www.cnblogs.com/DonYao/p/10722609.html
  • Unity中的几种层级关系优先级总结

    万次阅读 2018-03-07 23:30:45
    在项目中,我们经常需要处理显示对象的层级关系或规划层级结构,那么Unity中主要有哪些主要的层级关系及他们的优先级是怎么样的呢? Camera 首先是Camera,Camera的depth值越大的在上面,越小的在下面,比如场景...
  • Unity 渲染层级

    千次阅读 2016-07-21 22:30:24
    转载自: ... 最近连续遇到了几个绘制图像之间相互遮挡关系不正确的问题,网上查找的信息比较凌乱,所以这里就把自己...简单总结一下,决定Unity渲染关系的层级顺序是: Camera sorting layer sorting order
  • Unity 修改子物体/UI层级遮挡的顺序关系(亲测有效)
  • Unity——动态改变物体遮挡层级

    千次阅读 2018-06-08 15:02:34
    在动态创建物体时,通常先创建的层级会被后创建的层级低,从而被遮挡,
  • Unity更改渲染层级代码

    千次阅读 2015-10-14 14:15:36
    粒子特效的默认渲染层级比UI的渲染层级低。 UI默认的渲染层级为3000,把粒子特效的渲染层级改到3000以上就可以了。 public static void SetMaterialRenderQueue(Transform trans, int renderQueue) {...
  • unity和NGUI的各种层级关系整理
  • unity 改变子物体的层级顺序

    千次阅读 2017-05-07 14:34:32
    roomLogo.transform.SetSiblingIndex(Canvas.transform.childCount - 1);将roomLogo设置为最后一个。UI在同一Canvas中是最前面显示
  • 只需要获取到物体的SpriteRenderer组件,再修改它的sortingOrder即可。... //调整全部子节点层级 foreach (var spriterender in gameObject.GetComponentsInChildren<SpriteRenderer>(true))
  • 今天这篇文章,将由 2.5D 游戏《A Place for the Unwilling》开发者 Martín Pane,为大家分享在 Unity 5 中实现游戏场景中各精灵层级规划与遮挡的过程。 开发《A Place for the Unwilling》游戏第一部要解决的问题...
  • 因为Canvas也会附带更改它子节点的层级,所以Title下面的 SortingOrder 都会被改好。另外,如果要传递点击事件记得加入 GraphicRaycaster 。 以上就是所有设置,播放粒子是效果图的效果了。 警告 即使 SortingOrder ...
  • 2d游戏开发中 player的sprite与场景sprite之间位置无法动态调整出现以下问题 通过设置两个sprite 处于相同的sortinglayout 同时打开Edit->Project Setting->Graphics 设置如下 设置sort mode 为custom ...
  • 撰写本文时使用Unity的版本为2017.4.10f1(64bit) 1.描述问题  需求:通过UGUI制作一个界面之后,我需要在... 解决:分别调整ui_effect1、imageWhile、ui_effect2这三个物品的渲染层级 2.层级知识补充  https...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,378
精华内容 951
关键字:

unity调整层级