希望为node添加一个属性, 用来高性能的实现"不渲染当前node及其子节点" 的功能.
之前在 github 上提过这个需求, 但是被 close了.
还是你在论坛发一下吧.
希望大家能来讨论讨论. 这个需求到底有没有必要.
注意 , 在这个需求里, 高性能 是很重要的一个目标, 因为会存在频繁的操作.
举个例子: 在城建类2D模拟经营游戏(比如模拟城市) 里, 地图上有很多建筑, 玩家滚动地图时, 地图之外的建筑物不渲染, 但是建筑物节点上可能会挂载一些负责建筑物工作的组件, 他们还要运转.
地图上有熙熙攘攘的人群 , 他们走出地图时, 不渲染, 但是人物身上挂接的组件还是要运转(因为人物通常有工作要执行)
需求:
希望通过添加一个属性来实现 不渲染 以及不深度遍历某个节点和它的子节点.
但是上面的 组件正常运转 (所以 node.active 无法满足需求, 而且它会深度遍历所有节点和组件).
目前 设置node.Layer = 0 能实现类似功能, 但是比较低效, 因为要深度遍历所有子节点 来改变 所有子节点的Layer.
而且如果子节点的 Layer 不一样, 还要备份之前的值, 用来还原. (而且 Layer 好像不能避免 walk() ???)
希望能提供一个更纯粹的属性来控制渲染.
比如 node.renderable , 那么在2D场景下 可以在 walk 时进行如下判断.
public walk (node: Node, level = 0): void {
if (!node.activeInHierarchy || !node.renderable2D) {
return;
}
// .....
}
当然 其实有时候也希望3D场景预备这个能力.
我在目前的真实项目里, 通过简单粗暴的直接设置 activeInHierarchy = false 来实现了类似需求.
但是这个显然并不好, 因为 这不是 activeInHierarchy 属性本来的作用. 而且不排除某些场景下会引起 activeInHierarchy 的错乱.
所以希望有一个单独的属性来实现这个功能. (不渲染 不执行walk(), cocos的walk性能太低了)
如果觉得用 renderable 这个名字不好 可以用一个其他的名字.
.
