Esempio n. 1
0
    //创建地图
    public static GameObject CreateMap(Object mapSource, Vector3 worldPos = default(Vector3), Vector2 mapGridSize = default(Vector2), Color GridGolor = default(Color))
    {
        if (mapGridSize == default(Vector2))
        {
            mapGridSize = new Vector2(72f, 40f);
        }
        if (GridGolor == default(Color))
        {
            GridGolor.a = 1f;
        }

        GameObject map = PrefabUtility.InstantiatePrefab(mapSource) as GameObject;

        SceneEditorSettings.currMap = map;

        map.transform.localPosition = worldPos;
        map.transform.localScale    = Vector3.one;

        UISceneMap uimap = map.AddComponent <UISceneMap>();

        uimap.mapSettingData.sourcePath = AssetDatabase.GetAssetPath(mapSource);
        uimap.mapSettingData.Type       = SceneElementType.MAP;
        uimap.axisColors = GridGolor;
        uimap.renderFrom = new Vector3(-mapGridSize.x, -mapGridSize.y, 0);
        uimap.renderTo   = new Vector3(mapGridSize.x, mapGridSize.y, 0);
        uimap.InitData();
        return(map);
    }
Esempio n. 2
0
    //bool isfllowCamera = false;

    public void OnSceneGUI()
    {
        base.OnSceneGUI();
        if (uiMap == null)
        {
            uiMap = (UISceneMap)target;
        }

        Handles.BeginGUI();

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

        /*正在编辑*/
        GUILayout.Label(EditorStringConfig.getString(10030) + ":" + uiMap.gameObject.name);

        //GFGrid gfGrid = SceneEditorSettings.mapGrid;

        /*显示网格*/
        uiMap.isShowMap = GUILayout.Toggle(uiMap.isShowMap, EditorStringConfig.getString(10005));

        /*允许复活*/
        uiMap.mapData.canReborn = System.Convert.ToInt32(GUILayout.Toggle(System.Convert.ToBoolean(uiMap.mapData.canReborn), EditorStringConfig.getString(10039)));

        GUILayout.EndArea();
        Handles.EndGUI();
    }
Esempio n. 3
0
    //自动生成游戏数据
    public static void AutoGenerateGameData()
    {
        if (SceneEditorSettings.currMap == null)
        {
            EditorUtility.DisplayDialog("友情提示", "当前是场景为空,请先创建场景", "确定");
            return;
        }
        //获取地图
        UISceneMap mapData = SceneEditorSettings.currMap.GetComponent <UISceneMap>();

        //获取NPC
        UINPC[] npcDatas = SceneEditorSettings.currMap.GetComponentsInChildren <UINPC>();
        //获取碰撞盒子
        UISpecialArea[] areaData = SceneEditorSettings.currMap.GetComponentsInChildren <UISpecialArea>();

        string path = EditorUtility.SaveFilePanel("导出配置文件", Application.dataPath + "/StreamingAssets/Config", "SceneEditorData", "cfg");

        if (string.IsNullOrEmpty(path))
        {
            return;
        }

        try
        {
            FileStream   aFile = new FileStream(path, FileMode.Create);
            StreamWriter sw    = new StreamWriter(aFile);
            //写入地图
            mapData.UpdateData();
            sw.WriteLine("M" + fastJSON.JSON.Instance.ToJSON(mapData.mapData));

            //写入NPC
            foreach (UINPC data  in  npcDatas)
            {
                data.UpdateData();
                sw.WriteLine("N" + fastJSON.JSON.Instance.ToJSON(data.npcData));
            }

            //写入碰撞盒子
            foreach (UISpecialArea data in areaData)
            {
                data.UpdateData();
                sw.WriteLine("C" + fastJSON.JSON.Instance.ToJSON(data.areaData));
            }
            sw.Close();
        }
        catch (IOException ex)
        {
            EditorUtility.DisplayDialog("错误", ex.ToString(), "确定");
        }
    }
Esempio n. 4
0
    public override void OnInspectorGUI()
    {
        if (uiMap == null)
        {
            uiMap = (UISceneMap)target;
        }

        uiMap.mapData.canReborn = System.Convert.ToInt32(GUILayout.Toggle(System.Convert.ToBoolean(uiMap.mapData.canReborn), "canReborn"));


        if (GUI.changed)
        {
            SceneView.RepaintAll();
        }
    }
Esempio n. 5
0
    //创建种植物
    public static GameObject CreatePlant(Object resource, Vector3 worldpos, Vector3 scale, SceneElementType type, bool BornAtMap = true, Vector3 worldrotation = default(Vector3))
    {
        GameObject createObj  = PrefabUtility.InstantiatePrefab(resource) as GameObject;
        UISceneMap uiSceneMap = SceneEditorSettings.currMap.GetComponent <UISceneMap>();
        int        TypeIndex  = (int)type;

        if (uiSceneMap != null)
        {
            createObj.transform.parent     = uiSceneMap.ElementParents[TypeIndex - 1];
            createObj.transform.localScale = scale;
            createObj.transform.rotation   = Quaternion.Euler(worldrotation);
            createObj.transform.position   = worldpos;
        }

        switch (type)
        {
        case SceneElementType.NPC:
        {
            UINPC npc = null;
            if (createObj != null)
            {
                npc = createObj.AddComponent <UINPC>();
            }
            if (npc != null)
            {
                //保存数据
                npc.npcSettingData.isAtMap    = BornAtMap;
                npc.npcSettingData.Type       = type;
                npc.npcSettingData.sourcePath = AssetDatabase.GetAssetPath(resource);

                CharacterController controller = npc.GetComponent <CharacterController>();
                if (controller != null)
                {
                    CapsuleCollider capsule = npc.gameObject.AddComponent <CapsuleCollider>();
                    if (capsule != null)
                    {
                        capsule.center    = controller.center;
                        capsule.radius    = controller.radius;
                        capsule.height    = controller.height;
                        capsule.direction = 1;
                    }
                }
            }
            break;
        }

        case SceneElementType.BUILDING:
        {
            break;
        }

        case SceneElementType.TREE:
        {
            break;
        }

        default:
        {
            UISpecialArea area = createObj.GetComponent <UISpecialArea>();
            if (area == null)
            {
                area = createObj.AddComponent <UISpecialArea>();
            }
            //保存数据
            area.areaSettingData.isAtMap    = BornAtMap;
            area.areaSettingData.Type       = type;
            area.areaSettingData.sourcePath = AssetDatabase.GetAssetPath(resource);
            break;
        }
        }
        Selection.activeObject = createObj;
        return(createObj);
    }
Esempio n. 6
0
    //自动导入配置文件
    public static void AutoImportSettingFile()
    {
        string path = EditorUtility.OpenFilePanel("导入场景配置文件", Application.dataPath + "/Editor/SceneEditor/JC", "bytes");

        if (string.IsNullOrEmpty(path))
        {
            return;
        }

        List <SceneEditorSettingBaseData> settingDataList = new List <SceneEditorSettingBaseData>();
        string strLine = null;

        try
        {
            FileStream   aFile = new FileStream(path, FileMode.Open);
            StreamReader sr    = new StreamReader(aFile);
            strLine = sr.ReadLine();
            while (strLine != null)
            {
                if (strLine.Length > 0)
                {
                    SceneEditorSettingBaseData settingData = null;
                    string content = strLine.Substring(1);
                    switch (strLine[0])
                    {
                    case 'M':
                    {
                        MapSettingData mapData = fastJSON.JSON.Instance.ToObject <MapSettingData>(content);
                        settingData = (SceneEditorSettingBaseData)mapData;
                        break;
                    }

                    case 'N':
                    {
                        NPCSettingData npcData = fastJSON.JSON.Instance.ToObject <NPCSettingData>(content);
                        settingData = (SceneEditorSettingBaseData)npcData;
                        break;
                    }

                    case 'C':
                    {
                        SpecialAreaSettingData areaData = fastJSON.JSON.Instance.ToObject <SpecialAreaSettingData>(content);
                        settingData = (SceneEditorSettingBaseData)areaData;
                        break;
                    }
                    }
                    if (settingData != null)
                    {
                        settingDataList.Add(settingData);
                    }
                }
                strLine = sr.ReadLine();
            }
            sr.Close();
        }
        catch (IOException ex)
        {
            EditorUtility.DisplayDialog("错误", ex.ToString(), "确定");
            return;
        }

        //Debug.LogError("settingDataList.count="+settingDataList.Count.ToString() );

        //生成场景
        foreach (SceneEditorSettingBaseData baseData in settingDataList)
        {
            GameObject create = null;
            if (baseData.Type == SceneElementType.MAP)
            {
                MapSettingData data = (MapSettingData)baseData;
                create = CreateMap(data.sourcePath, new Vector3(data.Attribute.pos[0], data.Attribute.pos[1], data.Attribute.pos[2]),
                                   new Vector2(data.GridSize[0], data.GridSize[1]), new Color(data.GridColor[0], data.GridColor[1], data.GridColor[2], data.GridColor[3]));
                if (create != null)
                {
                    UISceneMap uimap = create.GetComponent <UISceneMap>();
                    if (uimap != null)
                    {
                        uimap.settingData = data;
                        uimap.mapData     = data.Attribute;
                        uimap.InitData();
                    }
                }
                else
                {
                    break;
                }
            }
            else if (baseData.Type == SceneElementType.NPC)
            {
                NPCSettingData data = (NPCSettingData)baseData;
                create = CreatePlant(data.sourcePath, new Vector3(data.Attribute.pos[0], data.Attribute.pos[1], data.Attribute.pos[2]), new Vector3(data.Attribute.scale[0], data.Attribute.scale[1], data.Attribute.scale[2]),
                                     data.Type, data.isAtMap, new Vector3(data.Attribute.rotation[0], data.Attribute.rotation[1], data.Attribute.rotation[2]));
                if (create != null)
                {
                    //Debug.LogError(data.Attribute.startIntervalTime.ToString());
                    UINPC uinpc = create.GetComponent <UINPC>();
                    if (uinpc != null)
                    {
                        uinpc.settingData = data;
                        uinpc.npcData     = data.Attribute;
                        uinpc.InitData();
                    }
                }
            }
            else
            {
                SpecialAreaSettingData data = (SpecialAreaSettingData)baseData;
                create = CreatePlant(data.sourcePath, new Vector3(data.Attribute.pos[0], data.Attribute.pos[1], data.Attribute.pos[2]), new Vector3(data.Attribute.scale[0], data.Attribute.scale[1], data.Attribute.scale[2]),
                                     data.Type, data.isAtMap, new Vector3(data.Attribute.rotation[0], data.Attribute.rotation[1], data.Attribute.rotation[2]));
                UISpecialArea uiarea = create.GetComponent <UISpecialArea>();
                if (uiarea != null)
                {
                    uiarea.settingData = data;
                    uiarea.areaData    = data.Attribute;
                    uiarea.InitData();
                }
            }
        }
    }
Esempio n. 7
0
    static void OnSceneDraw(SceneView sceneView)
    {
        if (Event.current.isKey)
        {
            if (Event.current.type == EventType.KeyDown)
            {
                if (Event.current.keyCode == KeyCode.A)
                {
                    SceneEditorSettings.isOpenFllowMouse = !SceneEditorSettings.isOpenFllowMouse;
                }
            }
        }
        if (Event.current.isMouse)
        {
            if (Event.current.type == EventType.MouseDown)
            {
                /*拖拽鼠标具备选中功能*/
                if (Tools.current == Tool.View)
                {
                    Vector3 mousePosition = Event.current.mousePosition;
                    float   height        = SceneView.currentDrawingSceneView.position.height;
                    mousePosition.y = height - mousePosition.y - 15f;
                    Ray        ray = sceneView.camera.ScreenPointToRay(mousePosition);
                    RaycastHit hit;
                    Physics.Raycast(ray, out hit);
                    if (hit.transform != null && hit.transform.name != "Grid")
                    {
                        GameObject OldSelection = Selection.activeObject as GameObject;
                        if (OldSelection != hit.transform.gameObject)
                        {
                            UISceneElementBase _old = null;
                            if (OldSelection != null)
                            {
                                _old = OldSelection.GetComponent <UISceneElementBase>();
                            }
                            if (_old != null)
                            {
                                _old.OnLostFocus();
                            }
                            UISceneElementBase _new = hit.transform.gameObject.GetComponent <UISceneElementBase>();
                            if (_new != null)
                            {
                                _new.OnFocus();
                            }
                            Selection.activeObject = hit.transform.gameObject;
                        }
                    }
                }
            }
        }

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

        GUILayout.BeginArea(new Rect(0, sceneView.position.height - 70, 200, 200));
        string currMapName = "";

        if (SceneEditorSettings.currMap != null)
        {
            currMapName = SceneEditorSettings.currMap.name;
        }

        /*正在编辑*/
        GUILayout.Label(EditorStringConfig.getString(10030) + ": " + currMapName);

        #region  标跟随
        /*是否打开了鼠标跟随功能*/
        bool isOpenFllowMouseOld = SceneEditorSettings.isOpenFllowMouse;
        SceneEditorSettings.isOpenFllowMouse = GUILayout.Toggle(SceneEditorSettings.isOpenFllowMouse, EditorStringConfig.getString(10032) + "(" + EditorStringConfig.getString(10045) + ":A)");
        /*从拖拽状态切出*/
        if (isOpenFllowMouseOld != SceneEditorSettings.isOpenFllowMouse && isOpenFllowMouseOld)
        {
            Tools.current = Tool.Move;
        }
        /*强制鼠标拖拽*/
        if (SceneEditorSettings.isOpenFllowMouse)
        {
            Tools.current = Tool.View;
        }
        #endregion

        if (SceneEditorSettings.currMap != null)
        {
            UISceneMap map = SceneEditorSettings.currMap.GetComponent <UISceneMap>();
            if (map != null)
            {
                if (map.EditorCamera != null)
                {
                    //bool isOldOpen = isOpenSceneCamera;
                    /*打开场景摄像机*/
                    isOpenSceneCamera        = GUILayout.Toggle(isOpenSceneCamera, EditorStringConfig.getString(10029));
                    map.EditorCamera.enabled = isOpenSceneCamera;
                    //map.EditorCamera.hideFlags = HideFlags.NotEditable;
                    if (map.EditorCamera.isOrthoGraphic)
                    {
                        map.EditorCamera.isOrthoGraphic = false;
                    }
                    map.EditorCamera.transform.rotation = sceneView.camera.transform.rotation;
                    map.EditorCamera.transform.position = sceneView.camera.transform.position;
                }
            }
        }


        GUILayout.EndArea();
        Handles.EndGUI();
    }
Esempio n. 8
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();
    }