• unity渲染层级关系小结


    最近连续遇到了几个绘制图像之间相互遮挡关系不正确的问题,网上查找的信息比较凌乱,所以这里就把自己解决问题中总结的经验记录下来。

     

    Unity中的渲染顺序自上而下大致分为三层。 最高层为Camera层,可以在Camera的depth那里设置,设置之后,图形的渲染顺序就是先绘制depth低的相机下的物体,再绘制depth高的相机下的物体,也就是说,depth高的相机会覆盖depth低的相机(具体的覆盖关系有don't clear, solid color等等几种)

     

    比Camera层稍低一层的是sorting layer层, 随便找一个可以设置sorting layer的地方,选择sorting layer,点添加按钮,就可以看到当前所有的sorting layer,并且可以更改sorting layer的顺序,排位靠后的sorting layer会覆盖排位靠前的sorting layer。 设置好sorting layer的相互关系之后,就可以给任何一个继承于Renderer类,或者有renderer的子类作为field的对象设置sorting layer了。 注意这些sorting layer的遮挡关系是在同一个camera的层级下的。 不同camera下的renderer渲染顺序以camera的depth为准。 有的component的sorting layer可以直接在unity editor里面设置,比如Sprite Renderer。 有的则需要用代码来设置,比如设置Particle system的sorting layer, 就需要在代码中取到 ParticleSystem.Renderer.SortingLayer 来进行设置。

     

    比sorting layer再低一层的是sorting order, 这个数字指代的是在同一个sorting layer下的渲染顺序,用法很明显就不赘述了。

     

    需要注意不要混淆的是gameobject的layer,和renderer的sorting layer。 gameObject的layer个人理解是一个逻辑上的分层,用于camera的culling mask等。 而renderer的sorting layer则用于渲染。只有继承与renderer或者有renderer作为filed的component才需要设置sorting layer。

     

    另外需要指出的是,常用的NGUI的widget depth其本质也是一个sorting layer下的sorting order。 NGUI好像用的是一个叫做“UI"的sorting layer。 由此大家如果有需要,也可以自己取Hack NGUI的代码,把NGUI的sorting layer暴露出来供自己定制。

     

    简单总结一下,决定Unity渲染关系的层级顺序是:

    Camera 

    sorting layer

    sorting order

     

     

     

    如文章中有不正确的地方,欢迎指正。 ^_^

  • 相关阅读:
    【MongoDB】NoSQL Manager for MongoDB 教程(基础篇)
    Pyhton爬虫实战
    Anacond的介绍
    centos7安装与配置nginx1.11,开机启动
    No module named flask 导包失败,Python3重新安装Flask模块
    centos上部署flask项目之环境配置-MySQL的安装
    Linux安装mysql5.6.33
    NODE升级到V12.X.X
    修改linux的mysql用户名和密码
    MySQL数据库
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879174.html
Copyright © 2020-2023  润新知