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,可以修改默认值吗