Exemplo n.º 1
0
    void ShowMapMenu()
    {
        if (SceneEditorSettings.SceneSourceFileObject == null)
        {
            SceneEditorSettings.SceneSourceFileObject = AssetDatabase.LoadMainAssetAtPath("Assets/Resources/UnPack/Scenes");
        }

        /*资源来源*/
        Object resultObject = EditorGUILayout.ObjectField(EditorStringConfig.getString(10012), SceneEditorSettings.SceneSourceFileObject, typeof(Object));

        bool isDifferentFromOld = resultObject != SceneEditorSettings.SceneSourceFileObject;

        SceneEditorSettings.SceneSourceFileObject = resultObject;

        if (SceneEditorSettings.SceneSourceFileObject != null)
        {
            if (isDifferentFromOld)
            {
                RefreshMapResources();
            }

            GUILayout.BeginHorizontal();

            /*地图名称*/
            currMapId = EditorGUILayout.Popup(EditorStringConfig.getString(10014), currMapId, mapNames.ToArray());
            /*刷新*/
            if (GUILayout.Button(EditorStringConfig.getString(10002), GUILayout.Width(50), GUILayout.Height(16)))
            {
                RefreshMapResources();
            }
            GUILayout.EndHorizontal();


            GUILayout.BeginHorizontal();
            /*创建*/
            if (GUILayout.Button(EditorStringConfig.getString(10015), GUILayout.Width(150), GUILayout.Height(40)))
            {
                SceneEditorTools.CreateMap(mapObject[currMapId], Vector3.zero);
            }

            /*载入配置表*/
            if (GUILayout.Button(EditorStringConfig.getString(10016), GUILayout.Width(150), GUILayout.Height(40)))
            {
                SceneEditorTools.AutoImportSettingFile();
            }
            GUILayout.EndHorizontal();
        }
    }
Exemplo n.º 2
0
    void ShowZhongGuai(string[] FarmingType)
    {
        /*出生到地图上(锁定Y轴)*/
        BornAtMap = EditorGUILayout.Toggle(EditorStringConfig.getString(10017), BornAtMap);
        if (BornAtMap)
        {
            Vector2 bornPos = new Vector2(SceneEditorSettings.BronPostionX, SceneEditorSettings.BronPostionZ);
            /*出生坐标*/
            bornPos = EditorGUILayout.Vector2Field(EditorStringConfig.getString(10018), bornPos);
            SceneEditorSettings.BronPostionX = (int)bornPos.x;
            SceneEditorSettings.BronPostionZ = (int)bornPos.y;
        }
        else
        {
            Vector3 bornPos = new Vector3(SceneEditorSettings.BronPostionX, SceneEditorSettings.BronPostionY, SceneEditorSettings.BronPostionZ);
            /*出生坐标*/
            bornPos = EditorGUILayout.Vector3Field(EditorStringConfig.getString(10018), bornPos);
            SceneEditorSettings.BronPostionX = (int)bornPos.x;
            SceneEditorSettings.BronPostionY = (int)bornPos.y;
            SceneEditorSettings.BronPostionZ = (int)bornPos.z;
        }

        GUILayout.Space(20f);
        GUILayout.BeginHorizontal();
        /*创建*/
        if (GUILayout.Button(EditorStringConfig.getString(10015) + FarmingType[SceneEditorSettings.farmingTypeIndex], GUILayout.Width(150), GUILayout.Height(40)))
        {
            SceneEditorTools.CreatePlant(PlantSourceObject[PlantSourceIndex],
                                         new Vector3(SceneEditorSettings.BronPostionX, SceneEditorSettings.BronPostionY, SceneEditorSettings.BronPostionZ),
                                         Vector3.one,
                                         (SceneElementType)SceneEditorSettings.farmingTypeIndex,
                                         BornAtMap);
        }
        /*保存配置表*/
        if (GUILayout.Button(EditorStringConfig.getString(10019), GUILayout.Width(150), GUILayout.Height(40)))
        {
            SceneEditorTools.AutoGenerateSettingFile();
        }
        /*导出游戏数据*/
        if (GUILayout.Button(EditorStringConfig.getString(10020), GUILayout.Width(150), GUILayout.Height(40)))
        {
            SceneEditorTools.AutoGenerateGameData();
        }
        GUILayout.EndHorizontal();
    }
Exemplo n.º 3
0
    public void OnSceneGUI()
    {
        if (element == null)
        {
            element = (UISceneElement)target;
        }

        if (element == null || !element.enabled)
        {
            return;
        }

        if (element.isDeleteGameObject)
        {
            //销毁
            EditorMemoryRecycle.RemoveMemory(element.gameObject);
            element.isDeleteGameObject = false;
        }


        base.OnSceneGUI();

        //反算屏幕坐标
        if (MoveFllowMouse)
        {
            //Debug.LogError("[MoveFllowMouse]"+MoveFllowMouse.ToString());
            Vector3 mypos = element.transform.position;
            if (element.settingData.Type == SceneElementType.NPC)
            {
                mypos.y = 0;
            }
            else
            {
                mypos.y = element.transform.localScale.y / 2f;
            }

            element.transform.position = mypos;
            Vector3 ScenePos      = SceneCamera.WorldToScreenPoint(element.transform.position);
            Vector3 mousePosition = Event.current.mousePosition;
            float   height        = SceneView.currentDrawingSceneView.position.height;
            mousePosition.y = height - mousePosition.y - 15f;
            mousePosition.z = ScenePos.z;
            Vector3 resultPos = SceneCamera.ScreenToWorldPoint(mousePosition);
            element.transform.position = resultPos;
        }


        //绘制文本框
        Handles.Label(element.transform.position + Vector3.up * 3,
                      element.transform.name + " : " + element.transform.position.ToString());

        //开始绘制GUI
        Handles.BeginGUI();

        //规定GUI显示区域
        GUILayout.BeginArea(new Rect(100, 100, 200, 400));

        //GUI绘制文本框
        /*正在编辑*/
        GUILayout.Label(EditorStringConfig.getString(10030) + ":" + element.gameObject.name);


        /*吸附到地图*/
        element.isAtMap = GUILayout.Toggle(element.isAtMap, EditorStringConfig.getString(10031));
//		/*鼠标跟随*/
//		element.isSeletctedFllowMouse = GUILayout.Toggle(element.isSeletctedFllowMouse,EditorStringConfig.getString(10032));
//
//		if(element.isSeletctedFllowMouse) element.isAtMap = true;

        //自动吸附到地图
        if (element.isAtMap)
        {
            element.AdsorptionToMap();
        }
        else
        {
            /*种植*/
            if (GUILayout.Button(EditorStringConfig.getString(10034), GUILayout.Width(100), GUILayout.Height(20)))
            {
                element.CorrectionPostion();
            }
        }

        /*克隆*/
        if (GUILayout.Button(EditorStringConfig.getString(10035), GUILayout.Width(100), GUILayout.Height(20)))
        {
            Object     prefab      = EditorUtility.GetPrefabParent(Selection.activeObject);
            GameObject cloneSource = Selection.activeObject as GameObject;
            GameObject cloneObject = null;
            if (prefab)
            {
                Vector3 oldpos = element.gameObject.transform.position;
                cloneObject = SceneEditorTools.CreatePlant(prefab, new Vector3(oldpos.x + 3f + element.transform.localScale.x, oldpos.y, oldpos.z), element.transform.localScale, element.settingData.Type, element.isAtMap, element.transform.rotation.eulerAngles);
            }
            //克隆代码
            element.CloneScript(cloneSource, cloneObject);
        }

        /*销毁*/
        if (GUILayout.Button(EditorStringConfig.getString(10033), GUILayout.Width(100), GUILayout.Height(20)))
        {
            element.isDeleteGameObject = true;
        }
        //GUILayout.BeginHorizontal();
        element.isSetTransform = GUILayout.Toggle(element.isSetTransform, "Transform(World)", EditorStyles.foldout);
        //GUILayout.EndHorizontal();
        Rect lastRect = GUILayoutUtility.GetLastRect();

        if (element.isSetTransform)
        {
            ++EditorGUI.indentLevel;
            GUILayout.BeginHorizontal();
            if (GUI.Button(new Rect(16, lastRect.yMax, 20, 18), "P"))
            {
                element.transform.position = Vector3.zero;
            }
            element.transform.position = EditorGUI.Vector3Field(new Rect(20, lastRect.yMax + 2, 150, 20), "", element.transform.position);
            GUILayout.EndHorizontal();

            lastRect.yMax += 20f;
            GUILayout.BeginHorizontal();
            if (GUI.Button(new Rect(16, lastRect.yMax, 20, 18), "R"))
            {
                element.transform.rotation = Quaternion.Euler(Vector3.zero);
            }
            element.transform.rotation = Quaternion.Euler(EditorGUI.Vector3Field(new Rect(20, lastRect.yMax + 2, 150, 20), "", element.transform.rotation.eulerAngles));
            GUILayout.EndHorizontal();

            lastRect.yMax += 20f;
            GUILayout.BeginHorizontal();
            if (GUI.Button(new Rect(16, lastRect.yMax, 20, 18), "S"))
            {
                element.transform.localScale = Vector3.one;
            }
            element.transform.localScale = EditorGUI.Vector3Field(new Rect(20, lastRect.yMax + 2, 150, 20), "", element.transform.localScale);
            GUILayout.EndHorizontal();

            --EditorGUI.indentLevel;
        }
        GUILayout.EndArea();

        Handles.EndGUI();
    }
Exemplo n.º 4
0
    void OnGUI()
    {
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("+", GUILayout.Width(50), GUILayout.Height(20)))
        {
            enumDatas.Add(new SceneElementEnumData());
        }
        GUILayout.Space(20f);
        if (GUILayout.Button("-", GUILayout.Width(50), GUILayout.Height(20)))
        {
            int index = enumDatas.Count - 1;
            if (index > 3)
            {
                enumDatas.RemoveAt(index);
            }
        }
        EditorGUILayout.EndHorizontal();


        isHave = EditorGUILayout.Foldout(isHave, "SceneElementType");

        if (isHave)
        {
            ++EditorGUI.indentLevel;
            //bool isControlsEnable = false;
            for (int i = 0; i < enumDatas.Count; i++)
            {
                SceneElementEnumData data = enumDatas[i];
                EditorGUILayout.BeginHorizontal();
                GUILayout.Space(20);

                EditorGUI.BeginDisabledGroup(i < 4);

                GUILayout.Label("Element" + i.ToString(), GUILayout.Width(60));
                data.EnumName    = GUILayout.TextField(data.EnumName, GUILayout.Width(150));
                data.isHaveColor = GUILayout.Toggle(data.isHaveColor, "");
                if (data.isHaveColor)
                {
                    Color color = EditorGUILayout.ColorField(data.GetColor());
                    data.SetColor(color);
                    GUILayout.Label("[" + data.colorR.ToString() + "," + data.colorG.ToString() + "," + data.colorB.ToString() + "," + data.colorA.ToString() + "]");
                }

                EditorGUI.EndDisabledGroup();

                GUILayout.Space(100f);
                EditorGUILayout.EndHorizontal();
            }
            --EditorGUI.indentLevel;
        }



        if (GUILayout.Button("生成代码", GUILayout.Width(150), GUILayout.Height(40)))
        {
            string ColorCode         = "   public static float[][] colorArray = new float[][]\n   {\n";
            string EnumString        = "public enum SceneElementType\n{\n";
            string isHaveColdeString = "   public static bool[] isHaveColor = new bool[]{";
            int    i = 0;
            foreach (SceneElementEnumData data in enumDatas)
            {
                if (!string.IsNullOrEmpty(data.EnumName))
                {
                    string colorString = "      new float[]{" + data.colorR.ToString() + "," + data.colorG.ToString() + "," + data.colorB.ToString() + "," + data.colorA.ToString() + "},\n";
                    ColorCode         += colorString;
                    EnumString        += "      " + data.EnumName + ",\n";
                    isHaveColdeString += data.isHaveColor.ToString().ToLower() + ",";
                    i++;
                }
            }
            ColorCode         += "   };\n\n";
            EnumString        += "};\n\n";
            isHaveColdeString += "};\n\n";
            //代码生成
            SceneEditorTools.AutoGenerateEnumCode(EnumString, ColorCode, isHaveColdeString);
        }
    }
Exemplo n.º 5
0
    void OnGUI()
    {
//		NewDrawTest();
//		return;
        SetFontStyle(Color.gray, 18, FontStyle.Italic, EditorStyles.label);
        GUILayout.BeginHorizontal();

        /*版本:1.0.1*/
        GUILayout.Label(EditorStringConfig.getString(10000), style);

        GUILayout.EndHorizontal();
        DrawLine();
        GUILayout.Space(15);


        GUILayout.BeginHorizontal();
        SetFontStyle(Color.gray, 15, FontStyle.Italic);
        /*正在编辑地图:*/
        GUILayout.Label(EditorStringConfig.getString(10001), style);
        SceneEditorSettings.currMap = EditorGUILayout.ObjectField(SceneEditorSettings.currMap, typeof(GameObject), true) as GameObject;
        /*刷新数据*/
        if (GUILayout.Button(EditorStringConfig.getString(10002, 10003), GUILayout.Width(60), GUILayout.Height(16)))
        {
            RefreshAllData();
        }
        GUILayout.EndHorizontal();

        GameObject currMap   = SceneEditorSettings.currMap;
        bool       isHaveMap = currMap == null;

        if (isHaveMap)
        {
            /*未检测到场景,你可以\n1.创建一个新场景. \n2.导入一个已经保存的场景配置表.\n3.从Hierarchy视图中拖入一个已有的场景*/
            EditorGUILayout.HelpBox(EditorStringConfig.getString(10021), MessageType.Error);
            ShowMapMenu();
        }
        else
        {
            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            /*销毁地图*/
            if (GUILayout.Button(EditorStringConfig.getString(10022), GUILayout.Width(150), GUILayout.Height(40)))
            {
                /*"友情提示","你确定要销毁地图","确定","取消"*/
                bool result = EditorUtility.DisplayDialog(EditorStringConfig.getString(10023), EditorStringConfig.getString(10024) + currMap.name, EditorStringConfig.getString(10025), EditorStringConfig.getString(10026));
                if (result)
                {
                    GameObject currMapObj = GameObject.Find(currMap.name);
                    DestroyImmediate(currMapObj);
                    currMapId = 0;
                    SceneEditorSettings.currMap = null;
                }
            }

            /*载入配置表*/
            if (GUILayout.Button(EditorStringConfig.getString(10016), GUILayout.Width(150), GUILayout.Height(40)))
            {
                /*"友情提示","是否先保存当前场景?","确定","取消"*/
                bool result = EditorUtility.DisplayDialog(EditorStringConfig.getString(10023), EditorStringConfig.getString(10027), EditorStringConfig.getString(10025), EditorStringConfig.getString(10026));
                if (result)
                {
                    SceneEditorTools.AutoGenerateSettingFile();
                }
                else
                {
                    GameObject currMapObj = GameObject.Find(currMap.name);
                    DestroyImmediate(currMapObj);
                    SceneEditorSettings.currMap = null;
                }
                SceneEditorTools.AutoImportSettingFile();
            }
            GUILayout.EndHorizontal();

            //如果当前创建了地图
            if (currMap != null)
            {
                GUILayout.Space(10);

                DrawLine();

                SetFontStyle(Color.gray, 12, FontStyle.Italic, EditorStyles.foldout);
                /*地图编辑*/
                SceneEditorSettings.isEditorMapGrid = EditorGUILayout.Foldout(SceneEditorSettings.isEditorMapGrid, EditorStringConfig.getString(10004), style);
                if (SceneEditorSettings.isEditorMapGrid)
                {
                    ++EditorGUI.indentLevel;
                    GameObject map   = SceneEditorSettings.currMap;
                    UISceneMap uimap = map.GetComponent <UISceneMap>();
                    if (uimap != null)
                    {
                        bool oldShowMap = uimap.isShowMap;
                        /*显示网格*/
                        uimap.isShowMap = EditorGUILayout.Toggle(EditorStringConfig.getString(10005), uimap.isShowMap);
                        if (oldShowMap != uimap.isShowMap)
                        {
                            SceneView.RepaintAll();
                        }

                        float   gridwidth   = uimap.renderTo.x - uimap.renderFrom.x;
                        float   gridheight  = uimap.renderTo.y - uimap.renderFrom.y;
                        Vector2 gridSize    = new Vector3(gridwidth, gridheight);
                        Vector2 oldgridSize = gridSize;
                        /*网格大小*/
                        gridSize         = EditorGUILayout.Vector2Field(EditorStringConfig.getString(10006), gridSize);
                        uimap.renderFrom = new Vector3(-gridSize.x / 2f, -gridSize.y / 2f, 0);
                        uimap.renderTo   = new Vector3(gridSize.x / 2f, gridSize.y / 2f, 0);
                        if (oldgridSize != gridSize)
                        {
                            SceneView.RepaintAll();
                        }

                        Color oldaxisColors = uimap.axisColors;
                        /*网络颜色*/
                        uimap.axisColors = EditorGUILayout.ColorField(EditorStringConfig.getString(10007), uimap.axisColors);
                        if (oldaxisColors != uimap.axisColors)
                        {
                            SceneView.RepaintAll();
                        }
                    }

                    --EditorGUI.indentLevel;
                }



                //显示网络编辑模块
                GUILayout.Space(10);
                DrawLine();

                string[] FarmingType = System.Enum.GetNames(typeof(SceneElementType));
                /*请选择*/
                FarmingType[0] = EditorStringConfig.getString(10008);

                SetFontStyle(Color.gray, 12, FontStyle.Italic, EditorStyles.foldout);
                /*地图种怪编辑*/
                SceneEditorSettings.isOpenFarming = EditorGUILayout.Foldout(SceneEditorSettings.isOpenFarming, EditorStringConfig.getString(10009), style);


                if (SceneEditorSettings.isOpenFarming)
                {
                    ++EditorGUI.indentLevel;
                    EditorGUILayout.BeginHorizontal();
                    /*种植类型*/
                    SceneEditorSettings.farmingTypeIndex = EditorGUILayout.Popup(EditorStringConfig.getString(10010), SceneEditorSettings.farmingTypeIndex, FarmingType);
                    /*编辑*/
                    if (GUILayout.Button(EditorStringConfig.getString(10011), GUILayout.Width(50), GUILayout.Height(16)))
                    {
                        SceneEditorGridWindow window = (SceneEditorGridWindow)EditorWindow.GetWindow(typeof(SceneEditorGridWindow));
                        window.Init();
                    }
                    EditorGUILayout.EndHorizontal();

                    GUILayout.Space(5);
                    //如果用户选择了一种类型
                    if (SceneEditorSettings.farmingTypeIndex > 0)
                    {
                        Object PlantSource = SceneEditorSettings.GetPlantFileObject((SceneElementType)SceneEditorSettings.farmingTypeIndex);
                        EditorGUILayout.BeginHorizontal();
                        /*资源来源*/
                        Object currPlantSource = EditorGUILayout.ObjectField(EditorStringConfig.getString(10012), PlantSource, typeof(Object));
                        //资源文件夹是否发生了改变
                        bool isChanged = PlantSource != currPlantSource;

                        SceneEditorSettings.SetPlantFileObject((SceneElementType)SceneEditorSettings.farmingTypeIndex, currPlantSource);

                        /*刷新*/
                        if (GUILayout.Button(EditorStringConfig.getString(10002), GUILayout.Width(50), GUILayout.Height(16)))
                        {
                            if (currPlantSource != null)
                            {
                                GetGameObjectsNameInFolder(currPlantSource);
                            }
                        }
                        EditorGUILayout.EndHorizontal();

                        if (PlantSource != null)
                        {
                            if (isChanged)
                            {
                                GetGameObjectsNameInFolder(currPlantSource);
                            }

                            GUILayout.Space(5);
                            PlantSourceIndex = EditorGUILayout.Popup(FarmingType[SceneEditorSettings.farmingTypeIndex] + "名称:", PlantSourceIndex, PlantSourceName.ToArray());
                        }
                        GUILayout.Space(5);

                        GUILayout.BeginHorizontal();
                        GUILayout.Space(this.position.width - 100);

                        /*更新地图分类*/
                        if (GUILayout.Button(EditorStringConfig.getString(10013), GUILayout.Width(100), GUILayout.Height(40)))
                        {
                            SceneEditorSettings.currMap.GetComponent <UISceneMap>().RefreshClassification();
                        }
                        GUILayout.EndHorizontal();

                        GUILayout.Space(5);
                        ShowZhongGuai(FarmingType);
                    }

                    --EditorGUI.indentLevel;
                }
            }
        }

        GUILayout.Space(5);
        DrawLine();
    }