protected internal override void OnInit(object userData) #endif { base.OnInit(userData); m_CachedCanvas = gameObject.GetOrAddComponent <Canvas>(); m_CachedCanvas.overrideSorting = true; OriginalDepth = m_CachedCanvas.sortingOrder; m_CanvasGroup = gameObject.GetOrAddComponent <CanvasGroup>(); RectTransform transform = GetComponent <RectTransform>(); transform.anchorMin = Vector2.zero; transform.anchorMax = Vector2.one; transform.anchoredPosition = Vector2.zero; transform.sizeDelta = Vector2.zero; gameObject.GetOrAddComponent <GraphicRaycaster>(); Text[] texts = GetComponentsInChildren <Text>(true); for (int i = 0; i < texts.Length; i++) { texts[i].font = s_MainFont; if (!string.IsNullOrEmpty(texts[i].text)) { texts[i].text = GameEntry.Localization.GetString(texts[i].text); } } outlet = gameObject.GetComponent <UILuaOutlet>(); widget.SetPropValue(outlet.OutletInfos); }
public override void OnInspectorGUI() { _cachedPropertyNames.Clear(); EditorGUI.BeginChangeCheck(); UILuaOutlet outlet = target as UILuaOutlet; outlet.FillByObjectName = EditorGUILayout.Toggle("根据Object的名字自动填充Name", outlet.FillByObjectName); EditorGUILayout.LabelField("总数量=" + outlet.OutletInfos.Count); findName = EditorGUILayout.TextField("控件名字:", findName); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("查找")) { operateOutlet(1); } if (GUILayout.Button("删除")) { operateOutlet(2); } EditorGUILayout.EndHorizontal(); serializedObject.Update(); subRootList.DoLayoutList(); serializedObject.ApplyModifiedProperties(); if (GUILayout.Button("测试自动")) { AutoGenerateUICode.ExportCode(outlet.gameObject.name, outlet.OutletInfos); } if (GUILayout.Button("根据父节点列表自动绑定")) { Dictionary <GameObject, List <UILuaOutlet.OutletInfo> > Dic = new Dictionary <GameObject, List <UILuaOutlet.OutletInfo> >(); for (var j = outlet.OutletInfos.Count - 1; j >= 0; j--) { UILuaOutlet.OutletInfo outletInfo = outlet.OutletInfos[j]; GameObject skin = null; skin = outletInfo.Object as GameObject; if (skin == null) { var tr = outletInfo.Object as RectTransform; if (tr) { skin = tr.gameObject; } } if (skin == null) { var com = outletInfo.Object as Component; if (com) { skin = com.gameObject; } } if (skin == null) { continue; } GameObject temp = skin; while (temp.transform.parent) { temp = temp.transform.parent.gameObject; bool hasFind = false; for (int i = 0; i < outlet.subRootGoList.Count; i++) { GameObject root = outlet.subRootGoList[i]; if (root) { if (temp == root) { if (Dic.ContainsKey(root) == false) { Dic[root] = new List <UILuaOutlet.OutletInfo>(); } Dic[root].Add(outletInfo); // outlet.OutletInfos[j] = null; hasFind = true; break; } } } if (hasFind) { break; } } } for (int i = 0; i < outlet.subRootGoList.Count; i++) { GameObject root = outlet.subRootGoList[i]; UILuaOutlet subOutlet = root.GetComponent <UILuaOutlet>(); if (subOutlet == null) { subOutlet = root.AddComponent <UILuaOutlet>(); } if (Dic.ContainsKey(root)) { var list = Dic[root]; subOutlet.OutletInfos = list; for (int j = 0; j < list.Count; j++) { var item = list[j]; for (var k = outlet.OutletInfos.Count - 1; k >= 0; k--) { if (outlet.OutletInfos[k].Object == item.Object) { outlet.OutletInfos.RemoveAt(k); break; } } } } } } if (outlet.OutletInfos == null || outlet.OutletInfos.Count == 0) { if (GUILayout.Button("Add New Outlet")) { if (outlet.OutletInfos == null) { outlet.OutletInfos = new List <UILuaOutlet.OutletInfo> (); } Undo.RecordObject(target, "Add OutletInfo"); outlet.OutletInfos.Add(new UILuaOutlet.OutletInfo()); } } else { // outlet ui edit for (var j = outlet.OutletInfos.Count - 1; j >= 0; j--) { var currentTypeIndex = -1; var outletInfo = outlet.OutletInfos [j]; string[] typesOptions = new string[0]; var isValid = outletInfo.Object != null && !_cachedPropertyNames.Contains(outletInfo.Name); // check duplicate property name _cachedPropertyNames.Add(outletInfo.Name); if (outletInfo.Object != null) { if (outletInfo.Object is GameObject) { currentTypeIndex = 0; // give it default var gameObj = outletInfo.Object as GameObject; Component[] components = gameObj.GetComponents <Component> (); // //TODO 把Transform组件增加进去 // var count = components.Length + 1; // components[count - 1] = gameObj.transform; _outletObjects [gameObj] = outletInfo.Name; typesOptions = new string[components.Length + 1]; typesOptions[components.Length] = "UnityEngine.GameObject"; for (var i = 0; i < components.Length; i++) { var com = components [i]; if (com) { var typeName = typesOptions[i] = com.GetType().FullName; if (typeName == outletInfo.ComponentType) { currentTypeIndex = i; } else if (outletInfo.ComponentType == "UnityEngine.GameObject") { currentTypeIndex = components.Length; } } } } } EditorGUILayout.Separator(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(string.Format("Lua Property: '{0}'", outletInfo.Name), isValid ? GreenFont : RedFont); EditorGUILayout.Space(); if (GUILayout.Button("+")) { Undo.RecordObject(target, "Insert OutletInfo"); outlet.OutletInfos.Insert(j, new UILuaOutlet.OutletInfo()); } if (GUILayout.Button("-")) { Undo.RecordObject(target, "Remove OutletInfo"); outlet.OutletInfos.RemoveAt(j); } EditorGUILayout.EndHorizontal(); // if (outletInfo.Name == findName) // { // GUI.SetNextControlName("Find"); // } outletInfo.Name = EditorGUILayout.TextField("Name:", outletInfo.Name); outletInfo.Object = EditorGUILayout.ObjectField("Object:", outletInfo.Object, typeof(UnityEngine.Object), true); //在开发期可以考虑自动填充Name,不会修改原已赋值的name if (outlet.FillByObjectName && outletInfo.Object != null && string.IsNullOrEmpty(outletInfo.Name)) { outletInfo.Name = outletInfo.Object.name; } if (currentTypeIndex >= 0) { var typeIndex = EditorGUILayout.Popup("Component:", currentTypeIndex, typesOptions); outletInfo.ComponentType = typesOptions [typeIndex].ToString(); } } } //base.OnInspectorGUI (); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "GUI Change Check"); } }