creator3.0 原先默认分组default失效?

2.4.x中的default分组是系统默认的,会根据父节点的分组来渲染,3.0去除了这部分了?现在新建UI节点默认是UI_2D。
如果一个prefab的默认是UI_2D, 有两个节点,layer分别是layer1和layer2,分别被两个各自分组的摄像机照射渲染,这个prefab添加到这两个任意一个节点上,都不会被渲染?还得需要遍历修改所有渲染节点的layer和父节点保持一致吗?

希望官方大佬也来解释下默认的那些分组都用来干嘛了,我们到底能不能用,怎么用,还是我们都应该采取我们自定义的分组来做逻辑。

你好,感谢您使用3.0版本,对于你的疑问我来解答。


↑↑↑ 关于上述问题,在3.0版本中创建出了的 UI 节点默认的 layer 是UI_2D,区别 2.4.x 中创建的 layer 的默认值是 default。


↑↑↑ 关于上述问题,需要遍历修改所有渲染节点的layer和父节点保持一致,才能被各自的分组的摄像机所观察到。

相机的 Visibility 属性设置

设置哪些层级应该被该相机观察,哪些层级不应该被观察。

注意: Creator 从 3.0 版本开始,2d 元素(例如 Sprite) 的渲染也遵从 Layer 与 Visibility 的判断,你可以根据需要调整 layer 与 visibility。

当用户勾选了多个 layer 作为该相机可见依据时,Visibility 属性通过多个 layer 的值 | 操作计算得出。

相机的可见性计算

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

设置 节点layer,控制其可见性

引擎采用根据相机的 Visibility 属性跟节点的 layer 属性,使用更加通用的节点与相机匹配来控制可见性。更灵活的控制组件的可见性,使分组显示多样化。同时 3D 组件与 2D 组件可以混合渲染。

layer 属性是一个无符号32位的整数,最多支持 32 个不同类型的 layer, 引擎将 20 - 30 位作为系统默认,留出 00 - 19 位给用户做自定义设置。相机的 Visibility 属性跟节点的 layer 属性,都是用来控制其可见性的,相机的 Visibility 属性支持多个 layer 状态叠加,采用 |,& 这种位操作符判断该节点的 layer 是否应该被观察到。

系统默认的层级属性

属性 说明
NONE 设置全都不可见 0
IGNORE_RAYCAST 设置忽略射线检测 1 << 20
GIZMOS 设置配置信息可见 1 << 21
EDITOR 设置编辑器可见 1 << 22
UI_3D 设置 3D UI 节点可见 1 << 23
SCENE_GIZMO 设置场景配置节点可见 1 << 24
UI_2D 设置 2D UI 节点可见 1 << 25
PROFILER 设置分析工具节点可见 1 << 28
DEFAULT 设置默认节点可见 1 << 30
ALL 设置所有节点可见 0xffffffff

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

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

so,这样的话,首先在创建prefab的时候,需要严格的知道他即将要添加在哪个父节点上,以及与父节点layer保持一致,一旦多个layer通用到这个prefab,就需要添加后遍历。这样真的是太不友好了!强烈建议能有更好的方法

嗯,这部分体验还需要优化,目前不够方便

确实提示了,但是无论点修改子节点,还是只修改自身,均无效

还有创建空节点,为什么layer默认值为default,可以修改默认值吗