private static void BindComponent(GameObject obj, UIComponentBind bind) { if (bind == null) { bind = AddComponent <UIComponentBind>(obj); bind.mObjName = obj.name; bind.mComponentDataList.Clear(); } for (int i = 0; i < obj.transform.childCount; i++) { Transform trans = obj.transform.GetChild(i); if (trans.name.StartsWith("b_")) { UIComponentBind.ComponentData data = new UIComponentBind.ComponentData(); InitComponentData(trans, data); bind.mComponentDataList.Add(data); } if (trans.name.StartsWith("b_t_")) { //模版对象 BindComponent(trans.gameObject, null); } else { BindComponent(trans.gameObject, bind); } } }
//运行时将控件赋值给lua变量 public static void BindToLua(GameObject obj, LuaTable table) { if (obj == null || table == null) { return; } UIComponentBind bind = obj.GetComponent <UIComponentBind>(); if (bind == null) { return; } bind.CompentsTable = table; table.Set("transform", obj.transform); table.Set("gameObject", obj); for (int i = 0; i < bind.mComponentDataList.Count; i++) { ComponentData data = bind.mComponentDataList[i]; switch (data.type) { case "Button": { table.Set(data.name, data.component as Button); //table[data.name] = data.component as Button; } break; case "Dropdown": { table.Set(data.name, data.component as Dropdown); //table[data.name] = data.component as Dropdown; } break; case "InputField": { table.Set(data.name, data.component as InputField); //table[data.name] = data.component as InputField; } break; case "Slider": { table.Set(data.name, data.component as Slider); //table[data.name] = data.component as Slider; } break; case "Toggle": { table.Set(data.name, data.component as Toggle); //table[data.name] = data.component as Toggle; } break; case "GridLayoutGroup": { table.Set(data.name, data.component as GridLayoutGroup); //table[data.name] = data.component as GridLayoutGroup; } break; case "VerticalLayoutGroup": { table.Set(data.name, data.component as VerticalLayoutGroup); //table[data.name] = data.component as VerticalLayoutGroup; } break; case "HorizontalLayoutGroup": { table.Set(data.name, data.component as HorizontalLayoutGroup); } break; case "LoopVerticalScrollRect": { table.Set(data.name, data.component as LoopVerticalScrollRect); } break; case "LoopHorizontalScrollRect": { table.Set(data.name, data.component as LoopHorizontalScrollRect); } break; case "ScrollRect": { table.Set(data.name, data.component as ScrollRect); //table[data.name] = data.component as ScrollRect; } break; case "Image": { table.Set(data.name, data.component as Image); //table[data.name] = data.component as Image; } break; case "ImageExt": { table.Set(data.name, data.component as ImageExt); //table[data.name] = data.component as ImageExt; } break; case "RawImage": { table.Set(data.name, data.component as RawImage); //table[data.name] = data.component as RawImage; } break; case "RawImageExt": { table.Set(data.name, data.component as RawImageExt); //table[data.name] = data.component as RawImageExt; } break; case "TextMeshProUGUI": { table.Set(data.name, data.component as TextMeshProUGUI); } break; case "Text": { table.Set(data.name, data.component as Text); //table[data.name] = data.component as Text; } break; case "RectTransform": { table.Set(data.name, data.component as RectTransform); //table[data.name] = data.component as RectTransform; } break; case "Transform": { table.Set(data.name, data.component as Transform); //table[data.name] = data.component as Transform; } break; } } }