/// <summary>
/// 将生成好的Mono绑定组件
/// var go = Selection.activeGameObject;
/// </summary>
private static void BindUIComponent(GameObject go)
{
    //拿到Mono所属的程序集
    var assembly = Assembly.Load("Game");
    //反射拿到里面的类
    Type uiBindType = assembly.GetType($"ET.Client.{go.name}_Bind");
    //添加绑定关系的组件
    var uiBind = go.GetComponent(uiBindType);
    if (uiBind == null)
    {
        uiBind = go.AddComponent(uiBindType);
    }
    //循环已有的字段列表绑定
    for (int i = 0; i < BindDatas.Count; i++)
    {
        var bind = BindDatas[i];
        //反射拿到类型里的组件
        var field = uiBindType.GetField(bind.Rect.name);
        //使用寻找好的组件获取对应的类型,Unit特殊处理
        var typeStr = bind.Type;
        UnityEngine.Object component;
        if (typeStr == "Unit")
        {
            component = bind.Rect.gameObject;
        }
        else
        {
            component = bind.Rect.GetComponent(typeStr);
        }
        //为该组件赋值(实例对象,值)
        field.SetValue(uiBind, component);
    }
    //保存对象
    EditorUtility.SetDirty(uiBind);
}
最后修改:2024 年 06 月 11 日
如果觉得我的文章对你有用,请随意赞赏