Unity FairyGUI(十一)

Unity FairyGUI(十一)

一.插入模型,粒子,Canvas

  • 插入模型需要通过图形(Graph来模拟占位)
public class Lesson41 : MonoBehaviour
{
    private void Start()
    {
        var panel = UIManager.Instance.ShowPanel<LearnFGUI4>("Package1");
        var graph = panel.GetChild("n14").asGraph;
        var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
        var wrapper = new GoWrapper(go);
        go.transform.localPosition = Vector3.zero;
        go.transform.localScale = Vector3.one * 100;
        go.transform.localEulerAngles = Vector3.zero;
        graph.SetNativeObject(wrapper);
        
        //模拟点击模型
        panel.GetChild("n15").onClick.Add(() =>
        {
            Debug.Log("模型被点击");
        });
        //更新模型
        wrapper.CacheRenderers();
        //替换模型
        Destroy(go);
        var sceneObj = Instantiate(Resources.Load<GameObject>("Cube"));
        sceneObj.transform.position = Vector3.zero;
        go = Instantiate(Resources.Load<GameObject>("Cube"));
        go.transform.localPosition = Vector3.zero;
        go.transform.localScale = Vector3.one * 100;
        go.transform.localEulerAngles = Vector3.zero;
        //材质的复用(貌似源码有问题,无论True还是False都不会克隆材质)
        wrapper.SetWrapTarget(go,true);
        go.GetComponent<MeshRenderer>().material.color = Color.green;
    }
}

二.DrawCall优化

官方文档
在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call(DC)。Draw Call次数是一项非常重要的性能指标。UI系统一般包含数量众多的物体,有效控制DC是衡量一个UI系统是否实用的关键因素,特别是在移动设备上。

  • FGUI和UGUI与NGUI不同点在于,FairyGUI基于Unity的Dynamic Batching技术,提供了深度调整技术进行 Draw Call优化 。
  • 而UGUI和NGUI都是将相同材质的Widget进行Mesh合并,例如使用相同图集的图片,或者文字。Mesh合并的优点是合并后这些Widget就只产生一个DC。但这个合并过程需要计算所有Widget坐标相对于Panel的变换,而且如果Widget行为改变,例如平移,缩放等,都会触发Mesh重新合并,这会带来一定的CPU消耗,这就需要开发者谨慎组织UI元素到各个UIPanel,并且对深度需要细致安排,否则达不到减少DC效果的同时更可能带来比较大的CPU消耗。

具体优化流程

  1. 在Unity中开启Dynamic Batching技术
  2. 设置面板开启合批技术,aComponent.fairyBatching = true;
  3. 当图片被遮挡影响,需要手动调用aObject.InvalidateBatchingState();
  4. 对于一些特殊的UI动效aTransition.invalidateBatchingEveryFrame = true;

三.分支

  • 分支功能用于实现项目的多态设计,例如多国语言版本下UI的差别,又例如多个渠道版本下UI的差别。
  • 通过FGUI编辑器设置好,到Unity中只需要一句代码即可
  • UIPackage.branch = “XXX”

四.多国语言

  • 先在FGUI的编辑器中导出语言的Xml文件,对其进行翻译
  • 导入到Unity中对Xml文件进行读取,转成Xml类,完成多国语言
        var txt = Resources.Load<TextAsset>("en").text;
        var xml = new XML(txt);
        UIPackage.SetStringsSource(xml);

多语言一般需要配合分支一起使用,分支可以实现图片的多语言切换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值