コード例 #1
0
        //绘制小组件
        private KingdomsUnityEditor.KingdomsLevelItemConfig DrawLevelItem(KingdomsUnityEditor.KingdomsLevelItemConfig itemConfig)
        {
            if (_prefabNames == null)
            {
                return(itemConfig);
            }
            GUILayout.BeginHorizontal("box");
            GUILayout.BeginVertical();

            itemConfig.Name = EditorGUILayout.TextField("名称", itemConfig.Name);
            int selectSprite = -1;

            if (_prefabNames != null)
            {
                for (int i = 0; i < _prefabNames.Length; i++)
                {
                    if (_prefabNames[i].Equals(itemConfig.Sprite))
                    {
                        selectSprite = i;
                        break;
                    }
                }
            }

            int newSelectSprite = EditorGUILayout.Popup("图片", selectSprite, _prefabNames);

            if (newSelectSprite != selectSprite)
            {
                itemConfig.Sprite = _prefabNames[newSelectSprite];
            }


            //itemConfig.Sprite = EditorGUILayout.TextField("图片",itemConfig.Sprite);
            itemConfig.Size  = EditorGUILayout.Vector2Field("大小", itemConfig.Size);
            itemConfig.Point = EditorGUILayout.Vector2Field("位置", itemConfig.Point);
            GUILayout.EndVertical();


            int        iconSize   = 100;
            string     prefabPath = _target.GetPrafabPath(itemConfig.Sprite);
            GameObject prefab     = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath);

            if (prefab != null)
            {
                GUILayout.Label("", GUILayout.Width(iconSize), GUILayout.Height(iconSize));
                Rect lastRect = GUILayoutUtility.GetLastRect();
                GUI.DrawTexture(new Rect(lastRect.position, Vector2.one * iconSize), prefab.transform.Find("Image").GetComponent <Image>().sprite.texture, ScaleMode.ScaleToFit);
            }
            GUILayout.EndHorizontal();
            return(itemConfig);
        }
コード例 #2
0
        public override void OnInspectorGUI()
        {
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button("Apply", GUILayout.Width(60)))
            {
                //bool save = true;
                //foreach (var item in _target.Config.Levels)
                //{
                //	if (string.IsNullOrEmpty(item.LevelName))
                //	{
                //		save = false;
                //		EditorUtility.DisplayDialog("保证关卡")
                //	}
                //}
                SaveData();
                EditorUtility.DisplayDialog("保存数据", "保存数据", "ok");
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginVertical("helpbox");
            GUILayout.Label("全局配置", EditorStyles.boldLabel);
            _target.Config.Size   = EditorGUILayout.IntField("单位大小", _target.Config.Size);
            _target.Config.Row    = EditorGUILayout.IntField("行数", _target.Config.Row);
            _target.Config.Column = EditorGUILayout.IntField("列数", _target.Config.Column);
            bool showBg = EditorGUILayout.Toggle("运行时显示背景", _target.ShowBgRuntime);

            if (showBg != _target.ShowBgRuntime)
            {
                _target.ShowBgRuntime = showBg;
                EditorUtility.SetDirty(_target);
            }
            GUILayout.EndVertical();

            GUILayout.BeginVertical("helpbox");
            GUILayout.Label($"关卡配置 ({_target.SelectLevel + 1}/{_target.Config.Levels.Count})", EditorStyles.boldLabel);
            if (_target.Config.Levels.Count > 0)
            {
                if (_target.SelectLevel < 0 || _target.SelectLevel >= _target.Config.Levels.Count)
                {
                    _target.SelectLevel = 0;
                    EditorUtility.SetDirty(_target);
                    //return;
                }

                string[] levelNames = new string[_target.Config.Levels.Count];
                for (int i = 0; i < _target.Config.Levels.Count; i++)
                {
                    levelNames[i] = _target.Config.Levels[i].LevelName;
                }
                int selectLevel = EditorGUILayout.Popup("选择关卡", _target.SelectLevel, levelNames);
                if (selectLevel != _target.SelectLevel)
                {
                    _target.SelectLevel = selectLevel;
                    EditorUtility.SetDirty(_target);
                }


                var levelConfig = _target.Config.Levels[_target.SelectLevel];

                GUILayout.BeginVertical("Box");
                levelConfig.LevelName = EditorGUILayout.TextField("关卡名称", levelConfig.LevelName);
                //删除当前关卡
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("删除当前关卡", GUILayout.Width(100)))
                {
                    if (EditorUtility.DisplayDialog("警告", $"是否删除当前关卡:{levelConfig.LevelName}", "ok", "cancel"))
                    {
                        _target.Config.Levels.RemoveAt(_target.SelectLevel);
                        //_target.SelectLevel--;
                        GUIUtility.ExitGUI();
                        return;
                    }
                }
                GUILayout.EndHorizontal();
                //渲染组件
                if (levelConfig.Items != null && levelConfig.Items.Count > 0)
                {
                    int      playerItem  = -1;
                    int      victoryItem = -1;
                    string[] itemNames   = new string[levelConfig.Items.Count];
                    for (int i = 0; i < levelConfig.Items.Count; i++)
                    {
                        itemNames[i] = levelConfig.Items[i].Name;
                        if (itemNames[i].Equals(levelConfig.Player))
                        {
                            playerItem = i;
                        }
                        if (itemNames[i].Equals(levelConfig.Victory))
                        {
                            victoryItem = i;
                        }
                    }
                    int newItem = EditorGUILayout.Popup("角色组件", playerItem, itemNames);
                    if (newItem != playerItem && newItem >= 0)
                    {
                        if (newItem < itemNames.Length)
                        {
                            levelConfig.Player = itemNames[newItem];
                        }
                    }
                    newItem = EditorGUILayout.Popup("胜利组件", victoryItem, itemNames);
                    if (newItem != playerItem && newItem >= 0)
                    {
                        if (newItem < itemNames.Length)
                        {
                            levelConfig.Victory = itemNames[newItem];
                        }
                    }

                    GUILayout.Label($"组件 ({levelConfig.Items.Count})");
                    for (int i = 0; i < levelConfig.Items.Count; i++)
                    {
                        GUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();
                        if (GUILayout.Button("x", GUILayout.Width(30)))
                        {
                            if (EditorUtility.DisplayDialog("警告", $"是否删除当前组件:{levelConfig.Items[i].Name}", "ok", "cancel"))
                            {
                                _target.Config.Levels[_target.SelectLevel].Items.RemoveAt(i);
                                //levelConfig.Items.RemoveAt(i);

                                GUIUtility.ExitGUI();
                                return;
                            }
                        }
                        GUILayout.EndHorizontal();
                        levelConfig.Items[i] = DrawLevelItem(levelConfig.Items[i]);
                    }
                }
                if (GUILayout.Button("添加组件"))
                {
                    if (levelConfig.Items == null)
                    {
                        levelConfig.Items = new List <KingdomsUnityEditor.KingdomsLevelItemConfig>();
                    }
                    KingdomsUnityEditor.KingdomsLevelItemConfig itemConfig;
                    if (levelConfig.Items.Count > 0)
                    {
                        itemConfig = levelConfig.Items[levelConfig.Items.Count - 1];
                    }
                    else
                    {
                        itemConfig = new KingdomsUnityEditor.KingdomsLevelItemConfig();
                    }
                    itemConfig.Name = System.Guid.NewGuid().ToString().Substring(0, 6);
                    levelConfig.Items.Add(itemConfig);
                }
                GUILayout.EndVertical();

                _target.Config.Levels[_target.SelectLevel] = levelConfig;
            }
            if (GUILayout.Button("添加关卡"))
            {
                KingdomsUnityEditor.KingdomsLevelConfig levelConfig;
                if (_target.Config.Levels.Count > 0)
                {
                    levelConfig = _target.Config.Levels[_target.Config.Levels.Count - 1];
                }
                else
                {
                    levelConfig = new KingdomsUnityEditor.KingdomsLevelConfig();
                }
                levelConfig.LevelName = System.Guid.NewGuid().ToString().Substring(0, 10);
                _target.Config.Levels.Add(levelConfig);
                _target.SelectLevel = _target.Config.Levels.Count - 1;
            }
            GUILayout.EndVertical();
            //base.OnInspectorGUI();


            if (GUILayout.Button("Apply", GUILayout.Width(60)))
            {
                //bool save = true;
                //foreach (var item in _target.Config.Levels)
                //{
                //	if (string.IsNullOrEmpty(item.LevelName))
                //	{
                //		save = false;
                //		EditorUtility.DisplayDialog("保证关卡")
                //	}
                //}
                SaveData();
                EditorUtility.DisplayDialog("保存数据", "保存数据", "ok");
            }
        }