unity C#热更解决方案 关于UI组件查找优化

2018-7-9 雨辰 Unity3D

    最近公司项目 使用了C#脚本热更新方案,发现因为C#脚本需要热更新,所以就不能像通常项目一样C#脚本继承MonoBehaviour 通过绑定方式获取UI下面的组件。问题出现了。大家通常的方法是 使用GameObject.Find()方法查找UI子组件。这样带来了另外一个问题。FInd的性能问题。

怎么解决这个问题。我这边想了一个方案,通过一个过渡脚本实现:

1:首先 在UI组件的根节点挂上这个脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NGUIWidgetBridge : MonoBehaviour {
    
    public List<WidgetKvPair> Pairs;
    public Dictionary<string, GameObject> FillWidgetTable()
    {
        Dictionary<string, GameObject> objDic = new Dictionary<string, GameObject>();
        foreach (var dwnp in Pairs)
        {
            objDic.Add(dwnp.WidgetKey, dwnp.Widget);
        }
        return objDic;
    }

    [System.Serializable]
    public class WidgetKvPair : System.Object
    {
        public string WidgetKey = "";
        public GameObject Widget = null;
    }
}
2:给脚本 绑定 引用的组件,脚本是Key,value方式,Key 可以自定义填写,Value 就是关联的GameObject 了。

3:在热更的C# 脚本中Awake() 中使用如下方法就 可以通过key 获取到要使用的组件:

  Dictionary<string, GameObject> viewInfo = this.gameObject.GetComponent<NGUIWidgetBridge>().FillWidgetTable();
        UILabel view = viewInfo["lable"].GetComponent<UILabel>();
        view.text = "hi hihihihihihihi";
 结束: 小伙伴们又可以欢快的开发了



标签: Unity3D-优化性能

发表评论:

雨辰 joyimp|@2011-2018 京ICP备16030765号