Warning: session_write_close(): write failed: No space left on device (28) in /up_wiki/doku.php on line 123
Warning: session_write_close(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions) in /up_wiki/doku.php on line 123
====== UI预制体复制变种 ======
通常UI预制体的名字和它的 E_PANEL_TYPE, 代码都是一一对应关系,
PanelMain 预制体的 E_PANEL_TYPE.PanelMain, 代码就是PanelMainBinder 和 PanelMainHolder
但是如果预制体公用同一套Binder代码,我们通常的做法是复制一个新的Panel,然后改名以后重新生成枚举/holder/binder,并且把公共的代码写在UIFeature中,这个做法是完全正确没有问题的。
但如果有较多预制体想共享一份代码,一种做法是UICInventory这样的全局通用控件
另外一种就是我们这里提到的一种变种体做法。
=====生成变种体=====
变种体由主体复制,并修改里面的表现元素而成,但是他们拥有相同的控件表现
**生成一个新的变种体只需要两步**
1/ 从主体复制并修改名称,命名规范是使用下划线 比如ABC 的变种是 ABC_XXXX
同样需要注意,如果是非变种体,请严格使用大小写命名而不是下划线
{{:pasted:20190119-202259.png}}
2/ 修改Mode为VARIANT, 然后点 “保存变种体”
{{:pasted:20190119-202614.png}}
变种体的保存目录在Resources/Prefab/UI/Variant/中 区别于普通的Resources/Prefab/UI/
=====代码中使用变种体=====
相关代码主要在UIPool.cs中,考虑到参数传递深度太深的问题,直接采用了全局设置下一个为变种体的方法(用构架复杂度换取代码复杂度)
UIPool.instance.SetVariant("XXXX");//设置下次价值Holder的时候为后缀为XXXX的变种体,参数不需要下划线
UIHub.Load();//和正常一样 加载页面, 加载到的时PanelAbc_XXXX的预制体,并且绑定还是PanelAbcBinder
注意:UIPool.instance.SetVariant("XXXX") 在下一次Load之后就会失效,而且如果不执行Load会影响其他Load,一定要组合使用以上代码。
=====变种体的应用场景=====
* 技能演出/结果的 大量复制
* 马甲包
* 快速换皮