美文网首页
Cocos 3.x 层级Layer

Cocos 3.x 层级Layer

作者: 合肥黑 | 来源:发表于2021-05-20 22:44 被阅读0次
    一、Visibility和Layer
    1.参考设置节点的可见性

    引擎采用更加通用的节点,和相机相匹配。当节点设置的Layer属性包含在相机的 Visibility 属性 中时,节点便可以被相机看见,同时支持 3D 组件与 2D 组件的混合渲染。以便更灵活地控制节点组件的可见性,使分组显示多样化。

    设置节点的Layer属性

    节点的 Layer 属性是全局且唯一的,但是不同的节点可以设置相同的 Layer 属性,使其被同一个相机所观察。开发者可以使用引擎内置的 Layer 属性,也可以使用自定义的 Layer 属性,点击下图中的 Edit 按钮即可前往 项目设置 -> Layers 页面进行设置。详情请参考 层级 文档。

    image.png image.png
    2.参考层级

    节点的 Layer 属性是一个无符号 32 位的整数,最多支持 32 个不同类型的 Layer,可在编辑器上方菜单栏的 项目 -> 项目设置 -> Layers 中设置。其中开发者可自定义第 0 ~ 19 个 Layer,剩下后面的 12 个 Layers 则是引擎内置的。

    相机的 Visibility 属性跟节点的 Layer 属性,都是用来控制其可见性的。但只有当节点设置的 Layer 属性包含在相机的 Visibility 中时,节点才可以被相机看见。相机的 Visibility 属性采用 |& 这种位操作符来判断节点的 Layer 是否应该被观察到,且支持同时选择多个 Layer。具体内容可参考 Camera — Visibility 属性

    3.参考相机分组渲染

    分组渲染功能是通过相机组件的 Visibility 属性配合节点的 Layer 属性 共同决定的。用户可通过代码设置 Visibility 的值来完成分组渲染。所有节点默认都属于 DEFAULT 层,在所有相机都可见。

    4.参考设置 Visibility 属性

    Visibility 属性用于设置哪些层级(Layer)的节点应该被相机观察到,可同时选择多个 Layer。

    注意:从 Cocos Creator 3.0 开始,2D 元素(例如 Sprite)的渲染也遵从 Layer 与 Visibility 的判断,开发者可以根据需要自行调整 Layer 与 Visibility。

    当开发者在 Visibility 属性中勾选了多个 Layer 时,Visibility 属性值便是通过将多个 Layer 的属性值执行 | 操作计算得出。

    例如,下图中相机的 Visibility 属性同时勾选了 UI_3DDEFAULT 这两个 Layer,通过 查询 Layer 属性值 可以知道 UI_3D 的属性值是 1 << 23DEFAULT 的属性值是 1 << 30,那么 Visibility 属性值便是 1 << 23 | 1 << 30 = 1820327937

    image.png

    Visibility 属性可以同时选择多个 Layer,同时 Node 上的 Layer 也有自身的值,因此相机的 Visibility 属性是一个 2^32 位的整数,每一种可见的 layer 占一位,采用位操作运算,最高支持 32 个不同的 Layer 标签(每一种 Layer 值占一位,即用 2^32 表示)。在相机 culling 时,每个节点的 layer 值会跟相机进行 & 操作运算,如果相机的 Visibility 属性包含这个 Layer,那么当前节点就会被相机所看见,反之则看不见。

    二、代码设置Layer
    image.png
    1.creator3.0 怎么通过代码动态修改节点图层,节点的layer是number类型,我怎么知道哪个值代表什么图层
    image.png

    比如你要设置 A 节点的 layer 为 Layers 设置里的第一个。那么参考代码就是:

    this.node.layer = (1 << 0);
    

    如果不是自定义layer,可以这样:

    node.layer = Layers.Enum.UI_2D;
    
    2.creator3.0 原先默认分组default失效?

    在编辑器中修改 layer 会自动提示是否要同步所有子节点。如果在代码中可以使用 node.walk

    node.walk((child)=>{
        child.layer = ...;
    })
    

    相关文章

      网友评论

          本文标题:Cocos 3.x 层级Layer

          本文链接:https://www.haomeiwen.com/subject/dclilltx.html