====== 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,一定要组合使用以上代码。 =====变种体的应用场景===== * 技能演出/结果的 大量复制 * 马甲包 * 快速换皮