Пример #1
0
        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);
        }
Пример #2
0
    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");
        }
    }