From 2bcf02ccf514973e38acd289130f28ba73b1a451 Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期二, 06 十一月 2018 17:39:55 +0800
Subject: [PATCH] Update

---
 Core/GameEngine/Model/ConfigManager.cs                        |    3 
 Fight/GameActor/GActorNpcNoFight.cs                           |  181 +-
 Core/MapEditor/Editor/MapEditor.cs                            |  300 +++++
 Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin.meta |    8 
 Core/MapEditor/Data/Event/MonsterData.cs.meta                 |   11 
 Core/MapEditor/Editor/EditorResources/box_white.png           |    0 
 Core/MapEditor/Data/Transfer/MapTrasfer.cs.meta               |   11 
 Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs.meta   |   12 
 Core/MapEditor/Data/Transfer/MapTransferPoint.cs              |   24 
 Core/MapEditor/Data/Transfer/MapTransferPoint.cs.meta         |   11 
 Core/MapEditor/Editor/EditorResources/box_white.png.meta      |   88 +
 Fight/Stage/Dungeon/FrontEndDungeon.meta                      |    9 
 Core/MapEditor/Behavior/Bhv_MapData.cs                        |  140 ++
 Core/MapEditor/Data/Transfer/MapTrasfer.cs                    |   32 
 Core/MapEditor/Behavior/Bhv_MapTrigger.cs.meta                |   11 
 Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin      | 1559 +++++++++++++++++++++++++
 Core/MapEditor/Behavior/Bhv_MapTrigger.cs                     |  130 ++
 Core/MapEditor/Behavior/Bhv_TransferPoint.cs.meta             |   11 
 Core/MapEditor/Editor.meta                                    |    8 
 Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs        |   13 
 Core/MapEditor/Behavior/Bhv_Evt.cs.meta                       |   11 
 Core/MapEditor/Behavior/Bhv_Trasfer.cs.meta                   |   11 
 Core/MapEditor.meta                                           |    9 
 Core/MapEditor/Data/Event/Evt.cs.meta                         |   11 
 Core/MapEditor/Editor/EditorResources.meta                    |    8 
 Core/MapEditor/Data/Event/Evt_RefreshMonster.cs.meta          |   11 
 Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs.meta |   12 
 Core/MapEditor/Data/Event.meta                                |    8 
 Core/ResModule/AssetBundle/AssetBundleUtility.cs              |    4 
 Core/MapEditor/Data.meta                                      |    8 
 Core/MapEditor/Editor/MapEditor.cs.meta                       |   11 
 Core/MapEditor/Data/MapTrigger.cs                             |   39 
 Core/MapEditor/Behavior/Bhv_Trasfer.cs                        |  159 ++
 Core/MapEditor/Data/MapData.cs                                |   75 +
 Core/MapEditor/Behavior/Bhv_MapData.cs.meta                   |   11 
 Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs      |    4 
 Core/MapEditor/Behavior/Bhv_Evt.cs                            |   42 
 Core/MapEditor/Behavior/Bhv_MonsterData.cs.meta               |   11 
 Core/MapEditor/Behavior.meta                                  |    8 
 Fight/Stage/StageManager.cs                                   |    6 
 Core/MapEditor/Data/MapTrigger.cs.meta                        |   11 
 Fight/GameActor/GA_NpcFunc.cs                                 |    9 
 Core/MapEditor/Data/Event/Evt_RefreshMonster.cs               |   85 +
 Core/MapEditor/Data/Event/Evt.cs                              |   22 
 Fight/GameActor/GActor.cs                                     |    6 
 /dev/null                                                     |    9 
 Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs.meta        |   11 
 Core/MapEditor/Data/Event/MonsterData.cs                      |   23 
 Core/MapEditor/Data/Transfer.meta                             |    8 
 Core/MapEditor/Behavior/Bhv_MonsterData.cs                    |   38 
 Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs             |  198 +++
 Core/ResModule/InstanceResourcesLoader.cs                     |   60 +
 Core/MapEditor/Data/MapData.cs.meta                           |   11 
 Core/MapEditor/Behavior/Bhv_TransferPoint.cs                  |   38 
 54 files changed, 3,468 insertions(+), 82 deletions(-)

diff --git a/Core/GameEngine/Model/ConfigManager.cs b/Core/GameEngine/Model/ConfigManager.cs
index 606f64f..9581612 100644
--- a/Core/GameEngine/Model/ConfigManager.cs
+++ b/Core/GameEngine/Model/ConfigManager.cs
@@ -14,7 +14,8 @@
     bool isPlaying = true;
 
     bool m_Inited = false;
-    public bool inited {
+    public bool inited
+    {
         get { return m_Inited; }
         private set { m_Inited = value; }
     }
diff --git a/Core/MapEditor.meta b/Core/MapEditor.meta
new file mode 100644
index 0000000..5c754bd
--- /dev/null
+++ b/Core/MapEditor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b0344dc10812b4a459780c854ec6b5cc
+folderAsset: yes
+timeCreated: 1541130161
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior.meta b/Core/MapEditor/Behavior.meta
new file mode 100644
index 0000000..202e5fa
--- /dev/null
+++ b/Core/MapEditor/Behavior.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4638bdf69b2751946b84fa0b126f7d22
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior/Bhv_Evt.cs b/Core/MapEditor/Behavior/Bhv_Evt.cs
new file mode 100644
index 0000000..c02087e
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_Evt.cs
@@ -0,0 +1,42 @@
+using UnityEngine;
+using System.IO;
+
+namespace H2Engine
+{
+    public abstract class Bhv_Evt : MonoBehaviour
+    {
+        [HideInInspector]
+        public int id;
+        [HideInInspector]
+        public Evt.E_EventType type;
+        [HideInInspector]
+        protected bool showDetail = false;
+
+#if UNITY_EDITOR
+        public abstract bool DrawUI(GUISkin guiSkin);
+        public virtual void Save(BinaryWriter bw)
+        {
+            bw.Write((byte)type);
+            bw.Write(id);
+            bw.Write((float)System.Math.Round(transform.position.x));
+            bw.Write((float)System.Math.Round(transform.position.y));
+            bw.Write((float)System.Math.Round(transform.position.z));
+        }
+
+        public virtual void Load(BinaryReader br)
+        {
+            id = br.ReadInt32();
+            float _x = br.ReadSingle();
+            float _y = br.ReadSingle();
+            float _z = br.ReadSingle();
+            transform.position = new Vector3(_x, _y, _z);
+        }
+
+        public virtual void Export(BinaryWriter bw)
+        {
+            bw.Write((byte)type);
+            bw.Write(id);
+        }
+#endif
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Behavior/Bhv_Evt.cs.meta b/Core/MapEditor/Behavior/Bhv_Evt.cs.meta
new file mode 100644
index 0000000..bfc838e
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_Evt.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ad56736fc2a1a6a4ebed455e40f3c338
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs b/Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs
new file mode 100644
index 0000000..f6f20d8
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs
@@ -0,0 +1,198 @@
+using System.Collections.Generic;
+using UnityEngine;
+using System.IO;
+
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+namespace H2Engine
+{
+    public class Bhv_Evt_RefreshMonster : Bhv_Evt
+    {
+        [HideInInspector]
+        public Evt_RefreshMonster.E_OverCondition overCondition = Evt_RefreshMonster.E_OverCondition.None;
+        [HideInInspector]
+        public Evt_RefreshMonster.E_RefreshType refreshType = Evt_RefreshMonster.E_RefreshType.All;
+        [HideInInspector]
+        public List<Bhv_MonsterData> monsterList = new List<Bhv_MonsterData>();
+        [HideInInspector]
+        public int conditionParam;
+        [HideInInspector]
+        public int overParam;
+        [HideInInspector]
+        private bool showMonsterList = false;
+
+#if UNITY_EDITOR
+
+        public override void Save(BinaryWriter bw)
+        {
+            base.Save(bw);
+            bw.Write((byte)overCondition);
+            bw.Write((byte)refreshType);
+            bw.Write(conditionParam);
+            bw.Write(overParam);
+            bw.Write(monsterList.Count);
+            foreach (var _monster in monsterList)
+            {
+                _monster.Save(bw);
+            }
+        }
+
+        public override void Export(BinaryWriter bw)
+        {
+            base.Export(bw);
+            bw.Write((byte)overCondition);
+            bw.Write((byte)refreshType);
+            bw.Write(conditionParam);
+            bw.Write(overParam);
+            bw.Write(monsterList.Count);
+            foreach (var _monster in monsterList)
+            {
+                _monster.Export(bw);
+            }
+        }
+
+        public override void Load(BinaryReader br)
+        {
+            base.Load(br);
+            overCondition = (Evt_RefreshMonster.E_OverCondition)br.ReadByte();
+            refreshType = (Evt_RefreshMonster.E_RefreshType)br.ReadByte();
+            conditionParam = br.ReadInt32();
+            overParam = br.ReadInt32();
+            int _count = br.ReadInt32();
+            for (int i = 0; i < _count; ++i)
+            {
+                var _go = new GameObject();
+                _go.transform.SetParent(transform);
+                _go.transform.localPosition = Vector3.zero;
+                _go.transform.eulerAngles = Vector3.zero;
+                _go.transform.localScale = Vector3.one;
+
+                var _monsterData = _go.AddComponent<Bhv_MonsterData>();
+                monsterList.Add(_monsterData);
+
+                _monsterData.Load(br);
+            }
+        }
+
+        public override bool DrawUI(GUISkin guiSkin)
+        {
+            bool _result = false;
+            EditorGUILayout.BeginVertical(guiSkin.box);
+            EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+            EditorGUI.indentLevel += 1;
+            showDetail = EditorGUILayout.Foldout(showDetail, "  ID:" + id + " | Type: " + type, true, guiSkin.toggle);
+            if (GUILayout.Button("瀹氫綅", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                Selection.activeGameObject = gameObject;
+                if (Selection.activeGameObject)
+                {
+                    SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position);
+                }
+            }
+            if (GUILayout.Button("鍒犻櫎", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                _result = true;
+            }
+            EditorGUILayout.EndHorizontal();
+            if (showDetail)
+            {
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                EditorGUILayout.LabelField("鍒锋�柟寮�", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
+                refreshType = (Evt_RefreshMonster.E_RefreshType)EditorGUILayout.EnumPopup(refreshType, guiSkin.box, GUILayout.Height(20));
+                EditorGUILayout.EndHorizontal();
+
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                if (refreshType == Evt_RefreshMonster.E_RefreshType.OneByOneTime)
+                {
+                    EditorGUILayout.LabelField("绛夊緟鏃堕棿", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
+                    conditionParam = EditorGUILayout.IntField(conditionParam, guiSkin.textField, GUILayout.Height(20));
+                }
+                EditorGUILayout.EndHorizontal();
+
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                EditorGUILayout.LabelField("瀹屾垚鏂瑰紡", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
+                overCondition = (Evt_RefreshMonster.E_OverCondition)EditorGUILayout.EnumPopup(overCondition, guiSkin.box, GUILayout.Height(20));
+                EditorGUILayout.EndHorizontal();
+
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                if (overCondition == Evt_RefreshMonster.E_OverCondition.DeadCount)
+                {
+                    EditorGUILayout.LabelField("姝讳骸鏁伴噺", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
+                    overParam = EditorGUILayout.IntField(overParam, guiSkin.textField, GUILayout.Height(20));
+                }
+                else if (overCondition == Evt_RefreshMonster.E_OverCondition.Time)
+                {
+                    EditorGUILayout.LabelField("缁撴潫鏃堕棿", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
+                    overParam = EditorGUILayout.IntField(overParam, guiSkin.textField, GUILayout.Height(20));
+                }
+                EditorGUILayout.EndHorizontal();
+
+                EditorGUILayout.BeginVertical(guiSkin.customStyles[1]);
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                showMonsterList = EditorGUILayout.Foldout(showMonsterList, "  鍒锋�垪琛�", true, guiSkin.toggle);
+                if (GUILayout.Button("娣诲姞", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+                {
+                    var _go = new GameObject("RefreshMonster");
+                    _go.transform.SetParent(transform);
+                    _go.transform.localPosition = Vector3.zero;
+                    _go.transform.eulerAngles = Vector3.zero;
+                    _go.transform.localScale = Vector3.one;
+
+                    var _monsterData = _go.AddComponent<Bhv_MonsterData>();
+                    monsterList.Add(_monsterData);
+
+                    showMonsterList = true;
+                }
+                EditorGUILayout.EndHorizontal();
+                if (showMonsterList)
+                {
+                    for (int i = monsterList.Count - 1; i >= 0; --i)
+                    {
+                        EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                        EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
+                        var _npcID = monsterList[i].npcID;
+                        monsterList[i].npcID = EditorGUILayout.IntField(monsterList[i].npcID, guiSkin.textField, GUILayout.Height(20));
+                        if (_npcID != monsterList[i].npcID)
+                        {
+                            monsterList[i].name = monsterList[i].npcID + "_RefreshNPC";
+                        }
+                        if (GUILayout.Button("瀹氶珮", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+                        {
+                            Vector3 _pos = monsterList[i].transform.position;
+                            _pos.y = 0;
+                            RaycastHit _hit;
+
+                            Ray _ray = new Ray(_pos + Vector3.up * 100, Vector3.down);
+                            if (Physics.Raycast(_ray, out _hit, 200, 1 << LayerMask.NameToLayer("Walkable")))
+                            {
+                                monsterList[i].transform.position = _hit.point;
+                            }
+                        }
+                        if (GUILayout.Button("鏌ユ壘", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+                        {
+                            Selection.activeGameObject = monsterList[i].gameObject;
+                            if (Selection.activeGameObject)
+                            {
+                                SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position);
+                            }
+                        }
+                        if (GUILayout.Button("鍒犻櫎", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+                        {
+                            DestroyImmediate(monsterList[i].gameObject);
+                            monsterList.RemoveAt(i);
+                        }
+                        EditorGUILayout.EndHorizontal();
+                    }
+                }
+                EditorGUILayout.EndVertical();
+            }
+
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.EndVertical();
+            return _result;
+        }
+#endif
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs.meta b/Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs.meta
new file mode 100644
index 0000000..904e437
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 86cb95cb9f7327a45b701b48c6d717d2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior/Bhv_MapData.cs b/Core/MapEditor/Behavior/Bhv_MapData.cs
new file mode 100644
index 0000000..2aba8a9
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_MapData.cs
@@ -0,0 +1,140 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.IO;
+
+namespace H2Engine
+{
+    public class Bhv_MapData : MonoBehaviour
+    {
+        [HideInInspector]
+        public int id;
+        public bool showTriggerList = false;
+        public bool showEventList = false;
+        public bool showTransferList = false;
+        [HideInInspector]
+        public List<Bhv_MapTrigger> triggerList = new List<Bhv_MapTrigger>();
+        [HideInInspector]
+        public List<Bhv_Evt> eventList = new List<Bhv_Evt>();
+        [HideInInspector]
+        public List<Bhv_Trasfer> transferList = new List<Bhv_Trasfer>();
+
+#if UNITY_EDITOR
+
+        public const string NodeName_Root = "MapEditor";
+        public const string NodeName_TriggerList = "TriggerList";
+        public const string NodeName_EventList = "EventList";
+        public const string NodeName_TransferList = "TransferList";
+        public const string NodeName_Trigger = "Trigger_";
+        public const string NodeName_Event = "Event_";
+        public const string NodeName_Transfer = "Transfer_";
+
+        public void Save(BinaryWriter bw)
+        {
+            bw.Write(id);
+            bw.Write(triggerList.Count);
+            foreach (var _trigger in triggerList)
+            {
+                _trigger.Save(bw);
+            }
+            bw.Write(eventList.Count);
+            foreach (var _event in eventList)
+            {
+                _event.Save(bw);
+            }
+            bw.Write(transferList.Count);
+            foreach (var _transfer in transferList)
+            {
+                _transfer.Save(bw);
+            }
+        }
+
+        public void Export(BinaryWriter bw)
+        {
+            bw.Write(id);
+            bw.Write(triggerList.Count);
+            foreach (var _trigger in triggerList)
+            {
+                _trigger.Export(bw);
+            }
+            bw.Write(eventList.Count);
+            foreach (var _event in eventList)
+            {
+                _event.Export(bw);
+            }
+            bw.Write(transferList.Count);
+            foreach (var _transfer in transferList)
+            {
+                _transfer.Export(bw);
+            }
+        }
+
+        public void Load(BinaryReader br)
+        {
+            id = br.ReadInt32();
+            int _count = br.ReadInt32();
+            GameObject _go = null;
+            for (int i = 0; i < _count; ++i)
+            {
+                _go = new GameObject(NodeName_Trigger + i);
+                _go.transform.position = Vector3.zero;
+                _go.transform.eulerAngles = Vector3.zero;
+                _go.transform.localScale = Vector3.one;
+                var _triggerBhv = _go.AddComponent<Bhv_MapTrigger>();
+                _triggerBhv.boxCollider = _go.AddComponent<BoxCollider>();
+                _triggerBhv.transform.SetParent(transform.Find(NodeName_TriggerList));
+                triggerList.Add(_triggerBhv);
+                _triggerBhv.Load(br);
+            }
+            _count = br.ReadInt32();
+            for (int i = 0; i < _count; ++i)
+            {
+                _go = new GameObject(NodeName_Event + i);
+                _go.transform.position = Vector3.zero;
+                _go.transform.eulerAngles = Vector3.zero;
+                _go.transform.localScale = Vector3.one;
+                var _type = (Evt.E_EventType)br.ReadByte();
+                if (_type == Evt.E_EventType.Enemy)
+                {
+                    var _eventBhv = _go.AddComponent<Bhv_Evt_RefreshMonster>();
+                    _eventBhv.type = _type;
+                    _eventBhv.transform.SetParent(transform.Find(NodeName_EventList));
+                    eventList.Add(_eventBhv);
+                    _eventBhv.Load(br);
+                }
+            }
+            _count = br.ReadInt32();
+            for (int i = 0; i < _count; ++i)
+            {
+                _go = new GameObject(NodeName_Transfer + i);
+                _go.transform.position = Vector3.zero;
+                _go.transform.eulerAngles = Vector3.zero;
+                _go.transform.localScale = Vector3.one;
+                var _transferBhv = _go.AddComponent<Bhv_Trasfer>();
+                _transferBhv.transform.SetParent(transform.Find(NodeName_TransferList));
+                transferList.Add(_transferBhv);
+                _transferBhv.Load(br);
+            }
+
+        }
+
+        public void Clear()
+        {
+            showTriggerList = false;
+            showEventList = false;
+            showTriggerList = false;
+
+            triggerList.Clear();
+            eventList.Clear();
+            transferList.Clear();
+
+            for (int i = 0; i < transform.childCount; ++i)
+            {
+                for (int j = transform.GetChild(i).childCount - 1; j >= 0; --j)
+                {
+                    DestroyImmediate(transform.GetChild(i).GetChild(j).gameObject);
+                }
+            }
+        }
+#endif
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Behavior/Bhv_MapData.cs.meta b/Core/MapEditor/Behavior/Bhv_MapData.cs.meta
new file mode 100644
index 0000000..9d07758
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_MapData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dc90d6f805d82a24a83203b93f99deba
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior/Bhv_MapTrigger.cs b/Core/MapEditor/Behavior/Bhv_MapTrigger.cs
new file mode 100644
index 0000000..084ee12
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_MapTrigger.cs
@@ -0,0 +1,130 @@
+using System.Collections.Generic;
+using UnityEngine;
+using System.IO;
+
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+namespace H2Engine
+{
+    public class Bhv_MapTrigger : MonoBehaviour
+    {
+        [HideInInspector]
+        public int id;
+        [HideInInspector]
+        public Evt.E_EventType type = Evt.E_EventType.Enemy;
+        [HideInInspector]
+        public int prevID = -1;
+        [HideInInspector]
+        public BoxCollider boxCollider;
+        private bool showDetail = false;
+        private bool showEventList = false;
+        [HideInInspector]
+        public List<int> eventIDList = new List<int>();
+
+#if UNITY_EDITOR
+
+        public void Save(BinaryWriter bw)
+        {
+            bw.Write(id);
+            bw.Write((byte)type);
+            bw.Write(prevID);
+            bw.Write((float)System.Math.Round(transform.position.x, 2));
+            bw.Write((float)System.Math.Round(transform.position.y, 2));
+            bw.Write((float)System.Math.Round(transform.position.z, 2));
+            bw.Write((float)System.Math.Round(boxCollider.size.x, 2));
+            bw.Write((float)System.Math.Round(boxCollider.size.z, 2));
+            bw.Write((float)System.Math.Round(transform.eulerAngles.y, 2));
+            bw.Write(eventIDList.Count);
+            foreach (var _eventID in eventIDList)
+            {
+                bw.Write(_eventID);
+            }
+        }
+
+        public void Export(BinaryWriter bw)
+        {
+            Save(bw);
+        }
+
+        public void Load(BinaryReader br)
+        {
+            id = br.ReadInt32();
+            type = (Evt.E_EventType)br.ReadByte();
+            prevID = br.ReadInt32();
+            float _pX = br.ReadSingle();
+            float _pY = br.ReadSingle();
+            float _pZ = br.ReadSingle();
+            float _x = br.ReadSingle();
+            float _z = br.ReadSingle();
+            float _eY = br.ReadSingle();
+            int _count = br.ReadInt32();
+            for (int i = 0; i < _count; ++i)
+            {
+                eventIDList.Add(br.ReadInt32());
+            }
+            transform.position = new Vector3(_pX, _pY, _pZ);
+            boxCollider.size = new Vector3(_x, 1, _z);
+            transform.eulerAngles = new Vector3(0, _eY, 0);
+        }
+
+        public bool DrawUI(GUISkin guiSkin)
+        {
+            bool _result = false;
+            EditorGUILayout.BeginVertical(guiSkin.box);
+            EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+            EditorGUI.indentLevel += 1;
+            showDetail = EditorGUILayout.Foldout(showDetail, "  瑙﹀彂鍣↖D:" + id, true, guiSkin.toggle);
+            if (GUILayout.Button("鏌ユ壘", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                Selection.activeGameObject = gameObject;
+                if (Selection.activeGameObject)
+                {
+                    SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position);
+                }
+            }
+            if (GUILayout.Button("鍒犻櫎", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                _result = true;
+            }
+            EditorGUILayout.EndHorizontal();
+            if (showDetail)
+            {
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                EditorGUILayout.LabelField("鍓嶇疆瑙﹀彂鍣↖D", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80));
+                prevID = EditorGUILayout.IntField(prevID, guiSkin.textField, GUILayout.Height(20));
+                EditorGUILayout.EndHorizontal();
+                EditorGUILayout.BeginVertical(guiSkin.customStyles[1]);
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                showEventList = EditorGUILayout.Foldout(showEventList, "  瑙﹀彂浜嬩欢鍒楄〃", true, guiSkin.toggle);
+                if (GUILayout.Button("娣诲姞", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+                {
+                    eventIDList.Add(0);
+                    showEventList = true;
+                }
+                EditorGUILayout.EndHorizontal();
+                if (showEventList)
+                {
+                    for (int i = eventIDList.Count - 1; i >= 0; --i)
+                    {
+                        EditorGUILayout.BeginHorizontal(guiSkin.box, GUILayout.Height(22));
+                        EditorGUILayout.LabelField("浜嬩欢ID", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(60));
+                        eventIDList[i] = EditorGUILayout.IntField(eventIDList[i], guiSkin.textField, GUILayout.Height(22));
+                        if (GUILayout.Button("鍒犻櫎", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+                        {
+                            eventIDList.RemoveAt(i);
+                        }
+                        EditorGUILayout.EndHorizontal();
+                    }
+                }
+                EditorGUILayout.EndVertical();
+            }
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.EndVertical();
+
+            return _result;
+        }
+#endif
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Behavior/Bhv_MapTrigger.cs.meta b/Core/MapEditor/Behavior/Bhv_MapTrigger.cs.meta
new file mode 100644
index 0000000..c18272e
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_MapTrigger.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5bac32a5b5beec741993b2c88f45f4da
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior/Bhv_MonsterData.cs b/Core/MapEditor/Behavior/Bhv_MonsterData.cs
new file mode 100644
index 0000000..6eac0a7
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_MonsterData.cs
@@ -0,0 +1,38 @@
+using UnityEngine;
+using System.IO;
+
+namespace H2Engine
+{
+    public class Bhv_MonsterData : MonoBehaviour
+    {
+        [HideInInspector]
+        public int npcID;
+        [HideInInspector]
+        public byte ai;
+
+        public void Save(BinaryWriter bw)
+        {
+            bw.Write(npcID);
+            bw.Write(ai);
+            bw.Write((float)System.Math.Round(transform.position.x));
+            bw.Write((float)System.Math.Round(transform.position.y));
+            bw.Write((float)System.Math.Round(transform.position.z));
+        }
+
+        public void Load(BinaryReader br)
+        {
+            npcID = br.ReadInt32();
+            ai = br.ReadByte();
+            float _x = br.ReadSingle();
+            float _y = br.ReadSingle();
+            float _z = br.ReadSingle();
+            transform.position = new Vector3(_x, _y, _z);
+            name = npcID + "_RefreshMonster";
+        }
+
+        public void Export(BinaryWriter bw)
+        {
+            Save(bw);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Behavior/Bhv_MonsterData.cs.meta b/Core/MapEditor/Behavior/Bhv_MonsterData.cs.meta
new file mode 100644
index 0000000..c747064
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_MonsterData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 74afc638dfa0d2b42b7e4f0b2c07cfa3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior/Bhv_TransferPoint.cs b/Core/MapEditor/Behavior/Bhv_TransferPoint.cs
new file mode 100644
index 0000000..2991e7b
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_TransferPoint.cs
@@ -0,0 +1,38 @@
+using UnityEngine;
+using System.IO;
+
+namespace H2Engine
+{
+    public class Bhv_TransferPoint : MonoBehaviour
+    {
+        [HideInInspector]
+        public int effectID = -1;
+        [HideInInspector]
+        public CapsuleCollider capsuleCollider;
+
+        public void Save(BinaryWriter bw)
+        {
+            bw.Write(effectID);
+            bw.Write((float)System.Math.Round(transform.position.x));
+            bw.Write((float)System.Math.Round(transform.position.y));
+            bw.Write((float)System.Math.Round(transform.position.z));
+            bw.Write((float)System.Math.Round(capsuleCollider.radius));
+        }
+
+        public void Load(BinaryReader br)
+        {
+            effectID = br.ReadInt32();
+            float _x = br.ReadSingle();
+            float _y = br.ReadSingle();
+            float _z = br.ReadSingle();
+            transform.position = new Vector3(_x, _y, _z);
+            float _r = br.ReadSingle();
+            capsuleCollider.radius = _r;
+        }
+
+        public void Export(BinaryWriter bw)
+        {
+            Save(bw);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Behavior/Bhv_TransferPoint.cs.meta b/Core/MapEditor/Behavior/Bhv_TransferPoint.cs.meta
new file mode 100644
index 0000000..864ec0e
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_TransferPoint.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0d831f11e6aad15478664877854852c1
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Behavior/Bhv_Trasfer.cs b/Core/MapEditor/Behavior/Bhv_Trasfer.cs
new file mode 100644
index 0000000..8a5859b
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_Trasfer.cs
@@ -0,0 +1,159 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System.IO;
+
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+namespace H2Engine
+{
+    public class Bhv_Trasfer : MonoBehaviour
+    {
+        [HideInInspector]
+        public int id;
+        [HideInInspector]
+        public MapTrasfer.E_TransferType transferType = MapTrasfer.E_TransferType.None;
+        [HideInInspector]
+        public int param;
+        [HideInInspector]
+        public List<Bhv_TransferPoint> pointList = new List<Bhv_TransferPoint>();
+        private bool showDetail;
+
+#if UNITY_EDITOR
+
+        public void Save(BinaryWriter bw)
+        {
+            bw.Write((byte)transferType);
+            bw.Write(param);
+            bw.Write(pointList.Count);
+            foreach (var _point in pointList)
+            {
+                _point.Save(bw);
+            }
+        }
+
+        public void Export(BinaryWriter bw)
+        {
+            bw.Write((byte)transferType);
+            bw.Write(param);
+            bw.Write(pointList.Count);
+            foreach (var _point in pointList)
+            {
+                _point.Export(bw);
+            }
+        }
+
+        public void Load(BinaryReader br)
+        {
+            transferType = (MapTrasfer.E_TransferType)br.ReadByte();
+            param = br.ReadInt32();
+            int _count = br.ReadInt32();
+            for (int i = 0; i < _count; ++i)
+            {
+                var _go = new GameObject(pointList.Count + "_TransferPoint");
+                _go.transform.SetParent(transform);
+                _go.transform.localPosition = Vector3.zero;
+                _go.transform.eulerAngles = Vector3.zero;
+                _go.transform.localScale = Vector3.one;
+                var _transferPoint = _go.AddComponent<Bhv_TransferPoint>();
+                _transferPoint.capsuleCollider = _go.AddComponent<CapsuleCollider>();
+                pointList.Add(_transferPoint);
+
+                _transferPoint.Load(br);
+            }
+        }
+
+        public bool DrawUI(Bhv_MapData mapData, GUISkin guiSkin)
+        {
+            bool _result = false;
+            EditorGUILayout.BeginVertical(guiSkin.box);
+            EditorGUILayout.BeginHorizontal(GUILayout.Height(20));
+            EditorGUI.indentLevel += 1;
+            showDetail = EditorGUILayout.Foldout(showDetail, "  No." + mapData.transferList.IndexOf(this), true, guiSkin.toggle);
+            if (GUILayout.Button("鍒犻櫎", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+            {
+                _result = true;
+            }
+            EditorGUILayout.EndHorizontal();
+            if (showDetail)
+            {
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                EditorGUILayout.LabelField("绫诲瀷", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(40));
+                transferType = (MapTrasfer.E_TransferType)EditorGUILayout.EnumPopup(transferType, guiSkin.box, GUILayout.Height(20));
+                EditorGUILayout.EndHorizontal();
+                if (transferType == MapTrasfer.E_TransferType.Other)
+                {
+                    EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                    EditorGUILayout.LabelField("MapID", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(40));
+                    param = EditorGUILayout.IntField(param, guiSkin.textField, GUILayout.Height(20));
+                    EditorGUILayout.EndHorizontal();
+                }
+
+                EditorGUILayout.BeginVertical(guiSkin.customStyles[1]);
+
+                EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+                EditorGUILayout.LabelField("浼犻�佺偣鍒楄〃", guiSkin.customStyles[0], GUILayout.Height(20));
+                if (GUILayout.Button("娣诲姞", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+                {
+                    var _go = new GameObject(pointList.Count + "_TransferPoint");
+                    _go.transform.SetParent(transform);
+                    _go.transform.localPosition = Vector3.zero;
+                    _go.transform.eulerAngles = Vector3.zero;
+                    _go.transform.localScale = Vector3.one;
+                    var _transferPoint = _go.AddComponent<Bhv_TransferPoint>();
+                    _transferPoint.capsuleCollider = _go.AddComponent<CapsuleCollider>();
+                    pointList.Add(_transferPoint);
+                }
+                EditorGUILayout.EndHorizontal();
+                if (pointList.Count > 0)
+                {
+                    for (int i = pointList.Count - 1; i >= 0; --i)
+                    {
+                        if (pointList[i] == null)
+                        {
+                            pointList.RemoveAt(i);
+                            continue;
+                        }
+                        EditorGUILayout.BeginHorizontal(guiSkin.box, GUILayout.Height(22));
+                        EditorGUILayout.LabelField("[" + (i + 1) + "]", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(40));
+                        EditorGUILayout.LabelField("鐗规晥ID", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(40));
+                        pointList[i].effectID = EditorGUILayout.IntField(pointList[i].effectID, guiSkin.textField, GUILayout.Height(20));
+                        if (GUILayout.Button("瀹氶珮", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+                        {
+                            Vector3 _pos = pointList[i].transform.position;
+                            _pos.y = 0;
+                            RaycastHit _hit;
+
+                            Ray _ray = new Ray(_pos + Vector3.up * 100, Vector3.down);
+                            if (Physics.Raycast(_ray, out _hit, 200, 1 << LayerMask.NameToLayer("Walkable")))
+                            {
+                                pointList[i].transform.position = _hit.point;
+                            }
+                        }
+                        if (GUILayout.Button("鏌ユ壘", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+                        {
+                            Selection.activeGameObject = pointList[i].gameObject;
+                            if (Selection.activeGameObject)
+                            {
+                                SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position);
+                            }
+                        }
+                        if (GUILayout.Button("鍒犻櫎", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
+                        {
+                            DestroyImmediate(pointList[i].gameObject);
+                            pointList.RemoveAt(i);
+                        }
+                        EditorGUILayout.EndHorizontal();
+                    }
+                }
+                EditorGUILayout.EndVertical();
+            }
+
+            EditorGUI.indentLevel -= 1;
+            EditorGUILayout.EndVertical();
+            return _result;
+        }
+#endif
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Behavior/Bhv_Trasfer.cs.meta b/Core/MapEditor/Behavior/Bhv_Trasfer.cs.meta
new file mode 100644
index 0000000..1b63940
--- /dev/null
+++ b/Core/MapEditor/Behavior/Bhv_Trasfer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 88dd76332d137b74d8602981120d28af
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data.meta b/Core/MapEditor/Data.meta
new file mode 100644
index 0000000..9ce9e81
--- /dev/null
+++ b/Core/MapEditor/Data.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e56a787a1268b094095d54b1de99d288
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/Event.meta b/Core/MapEditor/Data/Event.meta
new file mode 100644
index 0000000..1a24315
--- /dev/null
+++ b/Core/MapEditor/Data/Event.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fe4bd498013ad644e942356fbf3ec201
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/Event/Evt.cs b/Core/MapEditor/Data/Event/Evt.cs
new file mode 100644
index 0000000..8cfa01a
--- /dev/null
+++ b/Core/MapEditor/Data/Event/Evt.cs
@@ -0,0 +1,22 @@
+using System.IO;
+
+namespace H2Engine
+{
+    [System.Serializable]
+    public class Evt
+    {
+        public enum E_EventType
+        {
+            Enemy
+        }
+
+        public int id;
+
+        public E_EventType type;
+
+        public virtual void Load(BinaryReader br)
+        {
+            id = br.ReadInt32();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Data/Event/Evt.cs.meta b/Core/MapEditor/Data/Event/Evt.cs.meta
new file mode 100644
index 0000000..e357be5
--- /dev/null
+++ b/Core/MapEditor/Data/Event/Evt.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fab56c4da5511ec439e595f422819588
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/Event/Evt_RefreshMonster.cs b/Core/MapEditor/Data/Event/Evt_RefreshMonster.cs
new file mode 100644
index 0000000..5ba0b93
--- /dev/null
+++ b/Core/MapEditor/Data/Event/Evt_RefreshMonster.cs
@@ -0,0 +1,85 @@
+using System.IO;
+
+namespace H2Engine
+{
+    [System.Serializable]
+    public class Evt_RefreshMonster : Evt
+    {
+        public enum E_OverCondition
+        {
+            None,
+            DeadCount,
+            Time,
+        }
+
+        public enum E_RefreshType
+        {
+            All,
+            OneByOneTime,// 鏍规嵁鏃堕棿鍒锋柊
+            OneByOnePrevDie,// 鍓嶄竴鍙埛鍑哄凡姝讳骸
+        }
+
+        public MonsterData[] monsters;
+        public E_OverCondition overCondition = E_OverCondition.None;
+        public E_RefreshType refreshType = E_RefreshType.All;
+        /// <summary>
+        /// 鍙傛暟
+        /// <para>褰撲娇鐢∣verCondition绫诲瀷涓篋eadCount鐨勬椂鍊欎负涓暟</para>
+        /// <para>褰撲娇鐢∣verCondition绫诲瀷涓篢ime鐨勬椂鍊欎负鏃堕棿(姣)</para>
+        /// </summary>
+        public int conditionParam;
+        /// <summary>
+        /// 鍒锋柊鍙傛暟
+        /// <para>鍒锋柊绫诲瀷: OneByOneTime, 浣滀负鏃堕棿(姣)</para>
+        /// </summary>
+        public int refreshParam;
+
+        public override void Load(BinaryReader br)
+        {
+            base.Load(br);
+            overCondition = (Evt_RefreshMonster.E_OverCondition)br.ReadByte();
+            refreshType = (Evt_RefreshMonster.E_RefreshType)br.ReadByte();
+            refreshParam = br.ReadInt32();
+            conditionParam = br.ReadInt32();
+            int _count = br.ReadInt32();
+            monsters = new MonsterData[_count];
+            for (int i = 0; i < _count; ++i)
+            {
+                monsters[i] = new MonsterData();
+                monsters[i].Load(br);
+            }
+        }
+
+        /*
+            float delay = Time.now
+            float interval
+            int index
+
+            update
+                if refreshType == all
+                    for index = 0; index < monsters.Length; ++index
+                        doRefresh(monsters[index]);
+                else if refreshType == onebyoneTime
+                    if Time.now - delay > interval
+                        doRefresh(monster[index]);
+                        index++;
+                        delay = Time.now;
+                else if refreshType == onebyoneDie
+                    if prevNpc.isDie
+                        prevNpc = doRefresh(monster[index]);
+                        index++;
+
+            int deadCount
+            float overTime = conditionParam * 0.001f;
+            float timePast = Time.now
+
+            over
+                if condition == None
+                    return true;
+                else if condition == DeadCount
+                    return deadCount > monsters.Length || deadCount > conditionParam;
+                else if condition == Time
+                    return Time.now - timePast >= overTime;
+         */
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Data/Event/Evt_RefreshMonster.cs.meta b/Core/MapEditor/Data/Event/Evt_RefreshMonster.cs.meta
new file mode 100644
index 0000000..33e7573
--- /dev/null
+++ b/Core/MapEditor/Data/Event/Evt_RefreshMonster.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d5b73b47c82904a45965261e4e2ab644
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/Event/MonsterData.cs b/Core/MapEditor/Data/Event/MonsterData.cs
new file mode 100644
index 0000000..05851cb
--- /dev/null
+++ b/Core/MapEditor/Data/Event/MonsterData.cs
@@ -0,0 +1,23 @@
+using UnityEngine;
+using System.IO;
+
+namespace H2Engine
+{
+    [System.Serializable]
+    public class MonsterData
+    {
+        public int npcID;
+        public Vector3 position;
+        public int ai;
+
+        public void Load(BinaryReader br)
+        {
+            npcID = br.ReadInt32();
+            ai = br.ReadByte();
+            float _x = br.ReadSingle();
+            float _y = br.ReadSingle();
+            float _z = br.ReadSingle();
+            position = new Vector3(_x, _y, _z);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Data/Event/MonsterData.cs.meta b/Core/MapEditor/Data/Event/MonsterData.cs.meta
new file mode 100644
index 0000000..6db0cac
--- /dev/null
+++ b/Core/MapEditor/Data/Event/MonsterData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fe4b1c68c1bbb2548b31ee3fc81227e9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/MapData.cs b/Core/MapEditor/Data/MapData.cs
new file mode 100644
index 0000000..a704731
--- /dev/null
+++ b/Core/MapEditor/Data/MapData.cs
@@ -0,0 +1,75 @@
+using UnityEngine;
+using System.IO;
+using System.Collections.Generic;
+
+namespace H2Engine
+{
+    [System.Serializable]
+    public class MapData
+    {
+        public int id;
+        public MapTrigger[] triggers;
+        public Dictionary<int, Evt> eventDict = new Dictionary<int, Evt>();
+        public MapTrasfer[] transfers;
+
+        public static MapData LoadFormFile(string fileName)
+        {
+            string _path = null;
+            if (AssetSource.refdataFromEditor)
+            {
+                _path = ResourcesPath.ResourcesOutPath + "Refdata/MapData/" + fileName + ".gd";
+            }
+            else
+            {
+                _path = AssetVersionUtility.GetAssetFilePath(StringUtility.Contact("mapdata/", fileName, ".gd"));
+            }
+            MapData _mapData = null;
+            if (File.Exists(_path))
+            {
+                using (var _fileStream = File.OpenRead(_path))
+                {
+                    using (var _br = new BinaryReader(_fileStream))
+                    {
+                        _mapData = new MapData();
+                        _mapData.Load(_br);
+                    }
+                }
+            }
+            return _mapData;
+        }
+
+        public void Load(BinaryReader br)
+        {
+            id = br.ReadInt32();
+            int _count = br.ReadInt32();
+            triggers = new MapTrigger[_count];
+            for (int i = 0; i < _count; ++i)
+            {
+                triggers[i] = new MapTrigger();
+                triggers[i].Load(br);
+            }
+            _count = br.ReadInt32();
+            for (int i = 0; i < _count; ++i)
+            {
+                var _type = (Evt.E_EventType)br.ReadByte();
+                Evt _event = null;
+                if (_type == Evt.E_EventType.Enemy)
+                {
+                    _event = new Evt_RefreshMonster();
+                }
+                if (_event != null)
+                {
+                    _event.Load(br);
+                    eventDict[_event.id] = _event;
+                }
+            }
+            _count = br.ReadInt32();
+            transfers = new MapTrasfer[_count];
+            for (int i = 0; i < _count; ++i)
+            {
+                transfers[i] = new MapTrasfer();
+                transfers[i].Load(br);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Data/MapData.cs.meta b/Core/MapEditor/Data/MapData.cs.meta
new file mode 100644
index 0000000..40cbfca
--- /dev/null
+++ b/Core/MapEditor/Data/MapData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f75edd0d82af12043ae3ad0b00caf91f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/MapTrigger.cs b/Core/MapEditor/Data/MapTrigger.cs
new file mode 100644
index 0000000..cd04dae
--- /dev/null
+++ b/Core/MapEditor/Data/MapTrigger.cs
@@ -0,0 +1,39 @@
+using UnityEngine;
+using System.IO;
+
+namespace H2Engine
+{
+    [System.Serializable]
+    public class MapTrigger
+    {
+        public Evt.E_EventType type;
+        public int prevID;
+        public int id;
+        public int[] evevntIDs;
+        public Vector3 position;
+        public float rotationY;
+        public Vector3 size;
+
+        public void Load(BinaryReader br)
+        {
+            id = br.ReadInt32();
+            type = (Evt.E_EventType)br.ReadByte();
+            prevID = br.ReadInt32();
+            float _pX = br.ReadSingle();
+            float _pY = br.ReadSingle();
+            float _pZ = br.ReadSingle();
+            float _x = br.ReadSingle();
+            float _z = br.ReadSingle();
+            float _eY = br.ReadSingle();
+            int _count = br.ReadInt32();
+            evevntIDs = new int[_count];
+            for (int i = 0; i < _count; ++i)
+            {
+                evevntIDs[i] = br.ReadInt32();
+            }
+            position = new Vector3(_pX, _pY, _pZ);
+            size = new Vector3(_x, 1, _z);
+            rotationY = _eY;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Data/MapTrigger.cs.meta b/Core/MapEditor/Data/MapTrigger.cs.meta
new file mode 100644
index 0000000..1363cda
--- /dev/null
+++ b/Core/MapEditor/Data/MapTrigger.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 73e3f521830f9854bad41fef4ad96f15
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/Transfer.meta b/Core/MapEditor/Data/Transfer.meta
new file mode 100644
index 0000000..a5a654f
--- /dev/null
+++ b/Core/MapEditor/Data/Transfer.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a69b49b0350da7846baa3c669009d8af
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/Transfer/MapTransferPoint.cs b/Core/MapEditor/Data/Transfer/MapTransferPoint.cs
new file mode 100644
index 0000000..c90c417
--- /dev/null
+++ b/Core/MapEditor/Data/Transfer/MapTransferPoint.cs
@@ -0,0 +1,24 @@
+using UnityEngine;
+using System.IO;
+
+namespace H2Engine
+{
+    [System.Serializable]
+    public class MapTransferPoint
+    {
+        public int effectID;
+        public float radius;
+        public Vector3 position;
+
+        public void Load(BinaryReader br)
+        {
+            effectID = br.ReadInt32();
+            float _x = br.ReadSingle();
+            float _y = br.ReadSingle();
+            float _z = br.ReadSingle();
+            position = new Vector3(_x, _y, _z);
+            float _r = br.ReadSingle();
+            radius = _r;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Data/Transfer/MapTransferPoint.cs.meta b/Core/MapEditor/Data/Transfer/MapTransferPoint.cs.meta
new file mode 100644
index 0000000..2dfe6b3
--- /dev/null
+++ b/Core/MapEditor/Data/Transfer/MapTransferPoint.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a08607a0e6ea4ad4997da27d036e9059
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Data/Transfer/MapTrasfer.cs b/Core/MapEditor/Data/Transfer/MapTrasfer.cs
new file mode 100644
index 0000000..66d97a6
--- /dev/null
+++ b/Core/MapEditor/Data/Transfer/MapTrasfer.cs
@@ -0,0 +1,32 @@
+using System.IO;
+
+namespace H2Engine
+{
+    [System.Serializable]
+    public class MapTrasfer
+    {
+        public int id;
+        public enum E_TransferType
+        {
+            None,
+            Current,
+            Other,
+        }
+        public E_TransferType transferType;
+        public int param;
+        public MapTransferPoint[] transferPoints;
+
+        public void Load(BinaryReader br)
+        {
+            transferType = (MapTrasfer.E_TransferType)br.ReadByte();
+            param = br.ReadInt32();
+            int _count = br.ReadInt32();
+            transferPoints = new MapTransferPoint[_count];
+            for (int i = 0; i < _count; ++i)
+            {
+                transferPoints[i] = new MapTransferPoint();
+                transferPoints[i].Load(br);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Data/Transfer/MapTrasfer.cs.meta b/Core/MapEditor/Data/Transfer/MapTrasfer.cs.meta
new file mode 100644
index 0000000..89aaa56
--- /dev/null
+++ b/Core/MapEditor/Data/Transfer/MapTrasfer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 548fffb2921aaba4b96139b1976f7ba7
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Editor.meta b/Core/MapEditor/Editor.meta
new file mode 100644
index 0000000..d4d5e36
--- /dev/null
+++ b/Core/MapEditor/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6c3fdea6dbf8f6c44b0b1f941f63c7c0
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Editor/EditorResources.meta b/Core/MapEditor/Editor/EditorResources.meta
new file mode 100644
index 0000000..af869b1
--- /dev/null
+++ b/Core/MapEditor/Editor/EditorResources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5607bcbf23a156943a0e0162e30605c8
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin b/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin
new file mode 100644
index 0000000..47c819d
--- /dev/null
+++ b/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin
@@ -0,0 +1,1559 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 1
+  m_Script: {fileID: 12001, guid: 0000000000000000e000000000000000, type: 0}
+  m_Name: EditorSkin
+  m_EditorClassIdentifier: 
+  m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+  m_box:
+    m_Name: box
+    m_Normal:
+      m_Background: {fileID: 11001, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 6
+      m_Bottom: 6
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 1
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_button:
+    m_Name: button
+    m_Normal:
+      m_Background: {fileID: 11006, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1}
+    m_Hover:
+      m_Background: {fileID: 11003, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_Active:
+      m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 11005, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 11004, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 11002, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 6
+      m_Bottom: 4
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 3
+      m_Bottom: 3
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 4
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_toggle:
+    m_Name: toggle
+    m_Normal:
+      m_Background: {fileID: 11018, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.89112896, g: 0.89112896, b: 0.89112896, a: 1}
+    m_Hover:
+      m_Background: {fileID: 11014, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_Active:
+      m_Background: {fileID: 11013, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 11016, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.8901961, g: 0.8901961, b: 0.8901961, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 11015, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 11017, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 14
+      m_Right: 0
+      m_Top: 14
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 15
+      m_Right: 0
+      m_Top: 3
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: -1
+      m_Right: 0
+      m_Top: -4
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 12
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_label:
+    m_Name: label
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 3
+      m_Bottom: 3
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 1
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_textField:
+    m_Name: textfield
+    m_Normal:
+      m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1}
+    m_Hover:
+      m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.9, g: 0.9, b: 0.9, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 3
+      m_Right: 3
+      m_Top: 3
+      m_Bottom: 3
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 0
+    m_TextClipping: 1
+    m_ImagePosition: 3
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_textArea:
+    m_Name: textarea
+    m_Normal:
+      m_Background: {fileID: 11024, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.9019608, g: 0.9019608, b: 0.9019608, a: 1}
+    m_Hover:
+      m_Background: {fileID: 11026, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0.79999995, g: 0.79999995, b: 0.79999995, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 11025, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 3
+      m_Right: 3
+      m_Top: 3
+      m_Bottom: 3
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 1
+    m_RichText: 0
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_window:
+    m_Name: window
+    m_Normal:
+      m_Background: {fileID: 11023, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 11022, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 8
+      m_Right: 8
+      m_Top: 18
+      m_Bottom: 8
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 10
+      m_Right: 10
+      m_Top: 20
+      m_Bottom: 10
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 1
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: -18}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_horizontalSlider:
+    m_Name: horizontalslider
+    m_Normal:
+      m_Background: {fileID: 11009, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 3
+      m_Right: 3
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: -1
+      m_Right: -1
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: -2
+      m_Bottom: -3
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 2
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 12
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_horizontalSliderThumb:
+    m_Name: horizontalsliderthumb
+    m_Normal:
+      m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 7
+      m_Right: 7
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: -1
+      m_Right: -1
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 2
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 12
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_verticalSlider:
+    m_Name: verticalslider
+    m_Normal:
+      m_Background: {fileID: 11021, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 3
+      m_Bottom: 3
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: -1
+      m_Bottom: -1
+    m_Overflow:
+      m_Left: -2
+      m_Right: -3
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 0
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 12
+    m_FixedHeight: 0
+    m_StretchWidth: 0
+    m_StretchHeight: 1
+  m_verticalSliderThumb:
+    m_Name: verticalsliderthumb
+    m_Normal:
+      m_Background: {fileID: 11011, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 11012, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 11010, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 7
+      m_Bottom: 7
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: -1
+      m_Bottom: -1
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 12
+    m_FixedHeight: 0
+    m_StretchWidth: 0
+    m_StretchHeight: 1
+  m_horizontalScrollbar:
+    m_Name: horizontalscrollbar
+    m_Normal:
+      m_Background: {fileID: 11008, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 9
+      m_Right: 9
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 1
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 2
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 15
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_horizontalScrollbarThumb:
+    m_Name: horizontalscrollbarthumb
+    m_Normal:
+      m_Background: {fileID: 11007, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 6
+      m_Bottom: 6
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: -1
+      m_Bottom: 1
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 13
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_horizontalScrollbarLeftButton:
+    m_Name: horizontalscrollbarleftbutton
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_horizontalScrollbarRightButton:
+    m_Name: horizontalscrollbarrightbutton
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_verticalScrollbar:
+    m_Name: verticalscrollbar
+    m_Normal:
+      m_Background: {fileID: 11020, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 9
+      m_Bottom: 9
+    m_Margin:
+      m_Left: 1
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 1
+      m_Bottom: 1
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 15
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_verticalScrollbarThumb:
+    m_Name: verticalscrollbarthumb
+    m_Normal:
+      m_Background: {fileID: 11019, guid: 0000000000000000e000000000000000, type: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 6
+      m_Bottom: 6
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 6
+      m_Bottom: 6
+    m_Overflow:
+      m_Left: -1
+      m_Right: -1
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 2
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 15
+    m_FixedHeight: 0
+    m_StretchWidth: 0
+    m_StretchHeight: 1
+  m_verticalScrollbarUpButton:
+    m_Name: verticalscrollbarupbutton
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_verticalScrollbarDownButton:
+    m_Name: verticalscrollbardownbutton
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_ScrollView:
+    m_Name: scrollview
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 0
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 1
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_CustomStyles:
+  - m_Name: label_12
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Margin:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Padding:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 12
+    m_FontStyle: 0
+    m_Alignment: 4
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 0
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  - m_Name: box_gray
+    m_Normal:
+      m_Background: {fileID: 2800000, guid: 974bc19b782e5c241897a5476ecbbe36, type: 3}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 6
+      m_Bottom: 6
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 0
+    m_FontStyle: 0
+    m_Alignment: 4
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 0
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  - m_Name: label_11
+    m_Normal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 1, g: 1, b: 1, a: 1}
+    m_Hover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Active:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Focused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnNormal:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnHover:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnActive:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_OnFocused:
+      m_Background: {fileID: 0}
+      m_ScaledBackgrounds: []
+      m_TextColor: {r: 0, g: 0, b: 0, a: 1}
+    m_Border:
+      m_Left: 6
+      m_Right: 6
+      m_Top: 6
+      m_Bottom: 6
+    m_Margin:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Padding:
+      m_Left: 4
+      m_Right: 4
+      m_Top: 4
+      m_Bottom: 4
+    m_Overflow:
+      m_Left: 0
+      m_Right: 0
+      m_Top: 0
+      m_Bottom: 0
+    m_Font: {fileID: 0}
+    m_FontSize: 11
+    m_FontStyle: 0
+    m_Alignment: 4
+    m_WordWrap: 0
+    m_RichText: 1
+    m_TextClipping: 0
+    m_ImagePosition: 0
+    m_ContentOffset: {x: 0, y: 0}
+    m_FixedWidth: 0
+    m_FixedHeight: 0
+    m_StretchWidth: 1
+    m_StretchHeight: 0
+  m_Settings:
+    m_DoubleClickSelectsWord: 1
+    m_TripleClickSelectsLine: 1
+    m_CursorColor: {r: 1, g: 1, b: 1, a: 1}
+    m_CursorFlashSpeed: -1
+    m_SelectionColor: {r: 1, g: 0.38403907, b: 0, a: 0.7}
diff --git a/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin.meta b/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin.meta
new file mode 100644
index 0000000..af5831b
--- /dev/null
+++ b/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 62a8bf0ea5371314fa045af4833ad1f1
+NativeFormatImporter:
+  externalObjects: {}
+  mainObjectFileID: 11400000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Editor/EditorResources/box_white.png b/Core/MapEditor/Editor/EditorResources/box_white.png
new file mode 100644
index 0000000..a173857
--- /dev/null
+++ b/Core/MapEditor/Editor/EditorResources/box_white.png
Binary files differ
diff --git a/Core/MapEditor/Editor/EditorResources/box_white.png.meta b/Core/MapEditor/Editor/EditorResources/box_white.png.meta
new file mode 100644
index 0000000..28d8116
--- /dev/null
+++ b/Core/MapEditor/Editor/EditorResources/box_white.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 974bc19b782e5c241897a5476ecbbe36
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 7
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: -1
+    wrapV: -1
+    wrapW: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/MapEditor/Editor/MapEditor.cs b/Core/MapEditor/Editor/MapEditor.cs
new file mode 100644
index 0000000..c56e25c
--- /dev/null
+++ b/Core/MapEditor/Editor/MapEditor.cs
@@ -0,0 +1,300 @@
+using System.IO;
+using UnityEditor;
+using UnityEngine;
+
+namespace H2Engine
+{
+    [CustomEditor(typeof(Bhv_MapData))]
+    public class MapEditor : Editor
+    {
+        private string LS_KEY_SAVEPATH;
+
+        private int m_TriggerSeed;
+        private int m_EventSeed;
+        private int m_TransferSeed;
+        private int RequestTriggerID()
+        {
+            return m_TriggerSeed++;
+        }
+        private int RequestEventID()
+        {
+            return m_EventSeed++;
+        }
+
+        private Evt.E_EventType eventType = Evt.E_EventType.Enemy;
+
+        [MenuItem("绋嬪簭/MapEditor | 鍦板浘缂栬緫鍣�")]
+        static void Init()
+        {
+            var _mono = GameObject.FindObjectOfType<Bhv_MapData>();
+            if (_mono == null)
+            {
+                var _root = CreateNewGO(Bhv_MapData.NodeName_Root);
+                _root.AddComponent<Bhv_MapData>();
+                Selection.activeGameObject = _root;
+
+                var _child = CreateNewGO(Bhv_MapData.NodeName_TriggerList);
+                _child.transform.SetParent(_root.transform);
+
+                _child = CreateNewGO(Bhv_MapData.NodeName_EventList);
+                _child.transform.SetParent(_root.transform);
+
+                _child = CreateNewGO(Bhv_MapData.NodeName_TransferList);
+                _child.transform.SetParent(_root.transform);
+            }
+        }
+
+        public static GameObject CreateNewGO(string name)
+        {
+            var _go = new GameObject(name);
+            _go.transform.position = Vector3.zero;
+            _go.transform.eulerAngles = Vector3.zero;
+            _go.transform.localScale = Vector3.one;
+            return _go;
+        }
+
+        private GUISkin gUISkin;
+
+        /// <summary>
+        /// This function is called when the object becomes enabled and active.
+        /// </summary>
+        void OnEnable()
+        {
+            target.name = "MapEditor";
+            LS_KEY_SAVEPATH = System.Environment.CurrentDirectory + "/MapEditor/Save";
+        }
+
+        public override void OnInspectorGUI()
+        {
+            if (gUISkin == null)
+            {
+                gUISkin = AssetDatabase.LoadAssetAtPath<GUISkin>("Assets/Scripts/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin");
+            }
+
+            serializedObject.Update();
+
+            var _mapData = target as Bhv_MapData;
+            GUILayout.Space(5);
+
+            EditorGUILayout.BeginVertical(gUISkin.box);
+
+            EditorGUILayout.BeginHorizontal(gUISkin.box, GUILayout.Height(24));
+            EditorGUILayout.LabelField("鏁版嵁ID", gUISkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60));
+            _mapData.id = EditorGUILayout.IntField(_mapData.id, gUISkin.textField, GUILayout.Height(22));
+            if (GUILayout.Button("鍔犺浇", gUISkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                Load();
+            }
+            if (GUILayout.Button("淇濆瓨", gUISkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                Save();
+            }
+            if (GUILayout.Button("瀵煎嚭", gUISkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                Export();
+            }
+            EditorGUILayout.EndHorizontal();
+
+            /// --------------------------------------------------------------------------------
+            /// 瑙﹀彂鍣ㄥ垪琛� Start
+            EditorGUILayout.BeginVertical(gUISkin.box);
+            EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+            EditorGUI.indentLevel += 1;
+            _mapData.showTriggerList = EditorGUILayout.Foldout(_mapData.showTriggerList, "  瑙﹀彂鍣ㄥ垪琛�", true, gUISkin.toggle);
+            EditorGUI.indentLevel -= 1;
+            if (GUILayout.Button("娣诲姞", gUISkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                CreateTrigger();
+                _mapData.showTriggerList = true;
+            }
+            EditorGUILayout.EndHorizontal();
+            if (_mapData.showTriggerList)
+            {
+                for (int i = _mapData.triggerList.Count - 1; i >= 0; --i)
+                {
+                    var _trigger = _mapData.triggerList[i];
+                    if (_trigger == null)
+                    {
+                        _mapData.triggerList.RemoveAt(i);
+                        continue;
+                    }
+                    if (_trigger.DrawUI(gUISkin))
+                    {
+                        _mapData.triggerList.RemoveAt(i);
+                        DestroyImmediate(_trigger.gameObject);
+                    }
+                }
+            }
+            EditorGUILayout.EndVertical();
+            /// 瑙﹀彂鍣ㄥ垪琛� End
+            /// --------------------------------------------------------------------------------
+
+            /// --------------------------------------------------------------------------------
+            /// 浜嬩欢鍒楄〃 Start
+            EditorGUILayout.BeginVertical(gUISkin.box);
+            EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+            EditorGUI.indentLevel += 1;
+            _mapData.showEventList = EditorGUILayout.Foldout(_mapData.showEventList, "  浜嬩欢鍒楄〃", true, gUISkin.toggle);
+            EditorGUI.indentLevel -= 1;
+            eventType = (Evt.E_EventType)EditorGUILayout.EnumPopup(eventType, gUISkin.box, GUILayout.Height(22), GUILayout.Width(100));
+            if (GUILayout.Button("娣诲姞", gUISkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                CreateEvent(eventType);
+                _mapData.showEventList = true;
+            }
+            EditorGUILayout.EndHorizontal();
+            if (_mapData.showEventList)
+            {
+                for (int i = _mapData.eventList.Count - 1; i >= 0; --i)
+                {
+                    var _event = _mapData.eventList[i];
+                    if (_event == null)
+                    {
+                        _mapData.eventList.RemoveAt(i);
+                        continue;
+                    }
+                    if (_event.DrawUI(gUISkin))
+                    {
+                        _mapData.eventList.RemoveAt(i);
+                        DestroyImmediate(_event.gameObject);
+                    }
+                }
+            }
+            EditorGUILayout.EndVertical();
+            /// 浜嬩欢鍒楄〃 End
+            /// --------------------------------------------------------------------------------
+
+            /// --------------------------------------------------------------------------------
+            /// 浼犻�佺偣鍒楄〃 Start
+            EditorGUILayout.BeginVertical(gUISkin.box);
+            EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
+            EditorGUI.indentLevel += 1;
+            _mapData.showTransferList = EditorGUILayout.Foldout(_mapData.showTransferList, "  浼犻�佺粍鍒楄〃", true, gUISkin.toggle);
+            EditorGUI.indentLevel -= 1;
+            if (GUILayout.Button("娣诲姞", gUISkin.button, GUILayout.Width(60), GUILayout.Height(22)))
+            {
+                CreateTransferPoint();
+                _mapData.showTransferList = true;
+            }
+            EditorGUILayout.EndHorizontal();
+            if (_mapData.showTransferList)
+            {
+                for (int i = _mapData.transferList.Count - 1; i >= 0; --i)
+                {
+                    var _transfer = _mapData.transferList[i];
+                    if (_transfer == null)
+                    {
+                        _mapData.transferList.RemoveAt(i);
+                        continue;
+                    }
+                    if (_transfer.DrawUI(_mapData, gUISkin))
+                    {
+                        _mapData.transferList.RemoveAt(i);
+                        DestroyImmediate(_transfer.gameObject);
+                    }
+                }
+            }
+            EditorGUILayout.EndVertical();
+            /// 浼犻�佺偣鍒楄〃 End
+            /// --------------------------------------------------------------------------------
+
+            EditorGUILayout.EndVertical();
+
+            if (GUI.changed)
+            {
+                EditorUtility.SetDirty(target);
+                serializedObject.ApplyModifiedProperties();
+            }
+        }
+
+        private void CreateTrigger()
+        {
+            var _mapData = target as Bhv_MapData;
+            var _trigger = CreateNewGO(Bhv_MapData.NodeName_Trigger + RequestTriggerID());
+            var _triggerBhv = _trigger.AddComponent<Bhv_MapTrigger>();
+            _triggerBhv.boxCollider = _trigger.AddComponent<BoxCollider>();
+            _trigger.transform.SetParent(_mapData.transform.Find(Bhv_MapData.NodeName_TriggerList));
+            _mapData.triggerList.Add(_triggerBhv);
+        }
+
+        private void CreateEvent(Evt.E_EventType type)
+        {
+            var _mapData = target as Bhv_MapData;
+
+            if (type == Evt.E_EventType.Enemy)
+            {
+                var _event = CreateNewGO(Bhv_MapData.NodeName_Event + RequestEventID());
+                var _eventBhv = _event.AddComponent<Bhv_Evt_RefreshMonster>();
+                _eventBhv.type = type;
+                _event.transform.SetParent(_mapData.transform.Find(Bhv_MapData.NodeName_EventList));
+                _mapData.eventList.Add(_eventBhv);
+            }
+        }
+
+        private void CreateTransferPoint()
+        {
+            var _mapData = target as Bhv_MapData;
+            var _transfer = CreateNewGO(Bhv_MapData.NodeName_Transfer + _mapData.transferList.Count);
+            var _transferBhv = _transfer.AddComponent<Bhv_Trasfer>();
+            _transfer.transform.SetParent(_mapData.transform.Find(Bhv_MapData.NodeName_TransferList));
+            _mapData.transferList.Add(_transferBhv);
+        }
+
+        private void Save()
+        {
+            var _mapData = target as Bhv_MapData;
+            string _defaultPath = EditorPrefs.GetString(LS_KEY_SAVEPATH, System.Environment.CurrentDirectory);
+            string _path = EditorUtility.SaveFilePanel("淇濆瓨鏁版嵁", _defaultPath, "map_" + _mapData.id, "ed");
+            if (string.IsNullOrEmpty(_path))
+            {
+                return;
+            }
+            using (var _fileStream = File.OpenWrite(_path))
+            {
+                using (var _binaryWriter = new BinaryWriter(_fileStream))
+                {
+                    _mapData.Save(_binaryWriter);
+                }
+            }
+        }
+
+        private void Export()
+        {
+            var _mapData = target as Bhv_MapData;
+            string _defaultPath = EditorPrefs.GetString(LS_KEY_SAVEPATH, System.Environment.CurrentDirectory);
+            string _path = EditorUtility.SaveFilePanel("瀵煎嚭鏁版嵁", _defaultPath, "map_" + _mapData.id, "gd");
+            if (string.IsNullOrEmpty(_path))
+            {
+                return;
+            }
+            using (var _fileStream = File.OpenWrite(_path))
+            {
+                using (var _binaryWriter = new BinaryWriter(_fileStream))
+                {
+                    _mapData.Save(_binaryWriter);
+                }
+            }
+        }
+
+        private void Load()
+        {
+            var _mapData = target as Bhv_MapData;
+            string _defaultPath = EditorPrefs.GetString(LS_KEY_SAVEPATH, System.Environment.CurrentDirectory);
+            string _path = EditorUtility.OpenFilePanel("鎵撳紑鏁版嵁", _defaultPath, "ed");
+            if (string.IsNullOrEmpty(_path))
+            {
+                return;
+            }
+
+            _mapData.Clear();
+
+            using (var _fileStream = File.OpenRead(_path))
+            {
+                using (var _binaryReader = new BinaryReader(_fileStream))
+                {
+                    _mapData.Load(_binaryReader);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Core/MapEditor/Editor/MapEditor.cs.meta b/Core/MapEditor/Editor/MapEditor.cs.meta
new file mode 100644
index 0000000..e5f1723
--- /dev/null
+++ b/Core/MapEditor/Editor/MapEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bf0eaba683a1e8a49bb87626ce3a7568
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Core/NetworkPackage/DTCFile/ClientPack.meta b/Core/NetworkPackage/DTCFile/ClientPack.meta
deleted file mode 100644
index a5a6f03..0000000
--- a/Core/NetworkPackage/DTCFile/ClientPack.meta
+++ /dev/null
@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: 722e5e3d30096674e811f5bd191246a0
-folderAsset: yes
-timeCreated: 1539228128
-licenseType: Pro
-DefaultImporter:
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Core/ResModule/AssetBundle/AssetBundleUtility.cs b/Core/ResModule/AssetBundle/AssetBundleUtility.cs
index 559f1b9..6b3cc16 100644
--- a/Core/ResModule/AssetBundle/AssetBundleUtility.cs
+++ b/Core/ResModule/AssetBundle/AssetBundleUtility.cs
@@ -241,6 +241,10 @@
 
     private IEnumerator Co_DoLoadAsset(string assetBundleName, string assetName, Action<bool, UnityEngine.Object> callBack = null)
     {
+#if UNITY_5
+        assetBundleName = assetBundleName.ToLower();
+#endif
+
 #if UNITY_EDITOR
         RunTimeABLoadLog.AddLog(assetBundleName, assetName, UnityEngine.SceneManagement.SceneManager.GetActiveScene().name);
 #endif
diff --git a/Core/ResModule/InstanceResourcesLoader.cs b/Core/ResModule/InstanceResourcesLoader.cs
index 1a3d2f9..1f37b9f 100644
--- a/Core/ResModule/InstanceResourcesLoader.cs
+++ b/Core/ResModule/InstanceResourcesLoader.cs
@@ -62,6 +62,13 @@
                        GeneralDefine.ModeDefaultConfig[0][1]);
     }
 
+    public static void AsyncLoadDefaultFuncNpc(Action<bool, UnityEngine.Object> callBack)
+    {
+        AsyncLoadNpc(GeneralDefine.ModeDefaultConfig[0][0],
+                     GeneralDefine.ModeDefaultConfig[0][1],
+                     callBack);
+    }
+
     public static GameObject LoadDefaultHorse()
     {
         return LoadMob(GeneralDefine.ModeDefaultConfig[3][0],
@@ -334,4 +341,57 @@
             AssetBundleUtility.Instance.Co_LoadAsset(bundleName, config.fxName, _callBack);
         }
     }
+
+    public static void AsyncLoadNpc(int npcID, Action<bool, UnityEngine.Object> callBack = null)
+    {
+        NPCConfig _m = Config.Instance.Get<NPCConfig>(npcID);
+
+        if (_m == null || _m.MODE.Equals("0"))
+        {
+            if (callBack != null)
+            {
+                callBack(false, null);
+            }
+        }
+
+        string _assetName;
+        string _assetBundleName;
+
+        if (GAMgr.Instance.s_NpcID2Assetname.TryGetValue(npcID, out _assetName))
+        {
+            _assetBundleName = GAMgr.Instance.s_NpcID2BundleName[npcID];
+        }
+        else
+        {
+            _assetName = StringUtility.Contact(raceSuffix, _m.MODE);
+            _assetBundleName = StringUtility.Contact(ResourcesPath.MOB_FOLDER_NAME, _assetName);
+            GAMgr.Instance.s_NpcID2Assetname[npcID] = _assetName;
+            GAMgr.Instance.s_NpcID2BundleName[npcID] = _assetBundleName;
+        }
+
+        AsyncLoadNpc(_assetBundleName, _assetName, callBack);
+    }
+
+    public static void AsyncLoadNpc(string assetBundleName, string assetName, Action<bool, UnityEngine.Object> callBack = null)
+    {
+        if (AssetSource.mobFromEditor)
+        {
+#if UNITY_EDITOR
+            string _resourcePath = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath,
+                                                        "Mob/",
+                                                        assetName,
+                                                        ".prefab");
+
+            var _p = AssetDatabase.LoadAssetAtPath<GameObject>(_resourcePath);
+            if (callBack != null)
+            {
+                callBack(true, _p);
+            }
+#endif
+        }
+        else
+        {
+            AssetBundleUtility.Instance.Co_LoadAsset(assetBundleName, assetName, callBack);
+        }
+    }
 }
diff --git a/Fight/GameActor/GA_NpcFunc.cs b/Fight/GameActor/GA_NpcFunc.cs
index 67edfe4..ad3358d 100644
--- a/Fight/GameActor/GA_NpcFunc.cs
+++ b/Fight/GameActor/GA_NpcFunc.cs
@@ -119,9 +119,14 @@
         }
     }
 
-    public override void InitPerformance(uint clientInstID, int npcID)
+    protected override void OnPrefabLoadFinished(bool result, Object prefab)
     {
-        base.InitPerformance(clientInstID, npcID);
+        base.OnPrefabLoadFinished(result, prefab);
+
+        if (!result)
+        {
+            return;
+        }
 
         if (string.IsNullOrEmpty(NpcConfig.Equips))
         {
diff --git a/Fight/GameActor/GActor.cs b/Fight/GameActor/GActor.cs
index 3514de7..8973d42 100644
--- a/Fight/GameActor/GActor.cs
+++ b/Fight/GameActor/GActor.cs
@@ -14,8 +14,8 @@
     public Transform MP_Stun { get; protected set; }
     public Transform MP_Weapon { get; protected set; }
 
-    public uint ClientInstID { get; private set; }
-    public uint ServerInstID { get; private set; }
+    public uint ClientInstID { get; protected set; }
+    public uint ServerInstID { get; protected set; }
 
     protected Transform m_Root = null;
     public Transform Root { get { return m_Root; } }
@@ -93,7 +93,7 @@
 
     public GameObjType ActorType { get; protected set; }
 
-    public E_ActorGroup Group { get; private set; }
+    public E_ActorGroup Group { get; protected set; }
     public GActorInfo ActorInfo { get; protected set; }
 
     private E_ActorState m_State;
diff --git a/Fight/GameActor/GActorNpcNoFight.cs b/Fight/GameActor/GActorNpcNoFight.cs
index 8cd150f..9c69a97 100644
--- a/Fight/GameActor/GActorNpcNoFight.cs
+++ b/Fight/GameActor/GActorNpcNoFight.cs
@@ -25,17 +25,57 @@
         }
     }
 
+    protected GameNetPackBasic m_Package = null;
+
     public void Init(uint serverInstID, uint clientInstID, uint npcID, E_ActorGroup group, GameNetPackBasic package)
     {
         m_LoadDefaultRes = false;
+        m_Package = package;
 
         NpcConfig = Config.Instance.Get<NPCConfig>((int)npcID);
+        ClientInstID = clientInstID;
 
         if (NpcConfig == null)
         {
             // 鎶ラ敊
             return;
         }
+
+        ShowOrHide = true;
+        needSyncGroundHeight = true;
+
+        if (!m_Root)
+        {
+            m_Root = new GameObject().transform;
+            // 灏嗚澶嶇敤,涓嶈閿�姣�
+            Object.DontDestroyOnLoad(m_Root);
+        }
+
+        m_Root.localScale = Vector3.one;
+        Forward = m_Root.forward;
+        // 瑙掕壊灞炴��
+        if (ActorInfo == null)
+        {
+            ActorInfo = new GActorInfo();
+        }
+
+        ActorInfo.sid = serverInstID;
+        ActorInfo.ownerSID = 0;
+        ActorInfo.serverDie = false;
+
+#if UNITY_EDITOR
+        m_Root.name = string.Format("{0}_{1}_{2}",
+                                    GetType().ToString(),
+                                    serverInstID,
+                                    clientInstID);
+#endif
+
+        ServerInstID = serverInstID;
+        ClientInstID = clientInstID;
+
+        Group = group;
+
+        State = E_ActorState.Idle;
 
         //        if (!m_AudioSource)
         //        {
@@ -48,15 +88,7 @@
         //            _audioSourceNode.transform.localPosition = new Vector3(0, 0.5f, 0);
         //            m_AudioSource = _audioSourceNode.GetComponent<AudioSource>();
         //        }
-
-
         ActorType = GameObjType.gotNPC;
-
-        // 鍒濆鍖栬〃鐜板眰
-        InitPerformance(clientInstID, (int)npcID);
-
-        // 鎵ц鐖剁被鐨勫垵濮嬪寲
-        Init(serverInstID, clientInstID, group, package);
 
         Root.gameObject.layer = LayerUtility.Monster;
 
@@ -74,7 +106,6 @@
         }
 
         RequestShadow();
-        RequestName();
 
         // 杩欓噷閽堝鎸囧畾鐨凬PC鐗规畩鐭浣嶇疆
         if (GeneralDefine.NpcPosOffset.ContainsKey(NpcConfig.NPCID))
@@ -97,6 +128,9 @@
             //    SoundPlayer.Instance.PlayAudio(m_AudioSource, _effectConfig.audio);
             //}
         }
+
+        // 鍒濆鍖栬〃鐜板眰
+        InitPerformance(clientInstID, (int)npcID);
     }
 
     protected override void OnUnit()
@@ -145,76 +179,89 @@
     {
     }
 
-    public virtual void InitPerformance(uint clientInstID, int npcID)
+    protected virtual void OnPrefabLoadFinished(bool result, UnityEngine.Object prefab)
     {
-        GameObject _prefab = InstanceResourcesLoader.LoadNpcPrefab(npcID);
-
-        if (_prefab == null)
+        if (!result)
         {
-            _prefab = InstanceResourcesLoader.LoadDefaultFuncNPC();
-
-            if (_prefab)
-            {
-                m_LoadDefaultRes = true;
-            }
+            return;
         }
 
-        if (_prefab != null)
+        if (prefab == null)
         {
-            if (PreFightMission.Instance.IsFinished())
+            if (!m_LoadDefaultRes)
             {
-                GAMgr.Instance.AddNeedDestroyPrefab(_prefab);
-            }
-            if (this is GA_Guard)
-            {
-                GAMgr.Instance.RemoveNeedDestroyPrefab(_prefab);
-            }
-
-            if (m_LoadDefaultRes)
-            {
-                m_Model = GameObjectPoolManager.Instance.RequestDefaultFuncNpc();
+                InstanceResourcesLoader.AsyncLoadDefaultFuncNpc(OnPrefabLoadFinished);
+                m_LoadDefaultRes = true;
             }
             else
             {
-                m_Model = GameObjectPoolManager.Instance.RequestNpcGameObject(npcID);
+                m_LoadDefaultRes = false;
             }
 
-            if (m_Model)
-            {
-                m_Animator = m_Model.GetComponent<Animator>();
-                if (m_Animator)
-                {
-                    RuntimeAnimatorController _controller = null;
-                    if (m_LoadDefaultRes)
-                    {
-                        _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Func();
-                    }
-                    else
-                    {
-                        string _name = NpcConfig.MODE;
-                        if (_name.Contains("A_Zs"))
-                        {
-                            _name = "A_Zs";
-                            GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
-                        }
-                        else if (_name.Contains("A_Fs"))
-                        {
-                            _name = "A_Fs";
-                            GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
-                        }
-                        _controller = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, _name);
-                    }
-                    if (_controller)
-                    {
-                        m_Animator.runtimeAnimatorController = _controller;
-                    }
-                    m_Animator.enabled = true;
-                    m_Animator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)clientInstID);
-                }
-
-                SetupBindNode(m_Model.transform);
-            }
+            return;
         }
+
+        if (PreFightMission.Instance.IsFinished())
+        {
+            GAMgr.Instance.AddNeedDestroyPrefab(prefab as GameObject);
+        }
+        if (this is GA_Guard)
+        {
+            GAMgr.Instance.RemoveNeedDestroyPrefab(prefab as GameObject);
+        }
+
+        if (m_LoadDefaultRes)
+        {
+            m_Model = GameObjectPoolManager.Instance.RequestDefaultFuncNpc();
+        }
+        else
+        {
+            m_Model = GameObjectPoolManager.Instance.RequestGameObject(prefab as GameObject);
+        }
+
+        if (m_Model)
+        {
+            m_Animator = m_Model.GetComponent<Animator>();
+            if (m_Animator)
+            {
+                RuntimeAnimatorController _controller = null;
+                if (m_LoadDefaultRes)
+                {
+                    _controller = InstanceResourcesLoader.LoadDefaultMobAnimatorController_Func();
+                }
+                else
+                {
+                    string _name = NpcConfig.MODE;
+                    if (_name.Contains("A_Zs"))
+                    {
+                        _name = "A_Zs";
+                        GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
+                    }
+                    else if (_name.Contains("A_Fs"))
+                    {
+                        _name = "A_Fs";
+                        GameObjectPoolManager.Instance.AddDontDestroyGoInstID(m_Model.GetInstanceID());
+                    }
+                    _controller = AnimatorControllerLoader.LoadMobController(AnimatorControllerLoader.controllerSuffix, _name);
+                }
+                if (_controller)
+                {
+                    m_Animator.runtimeAnimatorController = _controller;
+                }
+                m_Animator.enabled = true;
+                m_Animator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)ClientInstID);
+            }
+
+            SetupBindNode(m_Model.transform);
+        }
+
+        OnInit(m_Package);
+    }
+
+    public virtual void InitPerformance(uint clientInstID, int npcID)
+    {
+        GameObject _prefab = InstanceResourcesLoader.LoadNpcPrefab(npcID);
+        InstanceResourcesLoader.AsyncLoadNpc(npcID, OnPrefabLoadFinished);
     }
 
     public sealed override void SetAnimatorSpeed(float speed)
diff --git a/Fight/Stage/Dungeon/FrontEndDungeon.meta b/Fight/Stage/Dungeon/FrontEndDungeon.meta
new file mode 100644
index 0000000..78db471
--- /dev/null
+++ b/Fight/Stage/Dungeon/FrontEndDungeon.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 26d1f2a39b41ff94189c36bf8259f9a3
+folderAsset: yes
+timeCreated: 1541424855
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs b/Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs
new file mode 100644
index 0000000..6133098
--- /dev/null
+++ b/Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs
@@ -0,0 +1,13 @@
+public class FrontEndDungeon : Singleton<FrontEndDungeon>
+{
+    public void Build(H2Engine.MapData mapData)
+    {
+
+    }
+
+    public void CreateTrasfer(H2Engine.MapTrasfer transfer)
+    {
+
+    }
+
+}
\ No newline at end of file
diff --git a/Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs.meta b/Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs.meta
new file mode 100644
index 0000000..6c75221
--- /dev/null
+++ b/Fight/Stage/Dungeon/FrontEndDungeon/FrontEndDungeon.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: daf42844aeeb3ce48a661b3e1cdf146b
+timeCreated: 1541424855
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs b/Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs
new file mode 100644
index 0000000..64036cc
--- /dev/null
+++ b/Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs
@@ -0,0 +1,4 @@
+public class MapTransferSystem
+{
+
+}
\ No newline at end of file
diff --git a/Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs.meta b/Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs.meta
new file mode 100644
index 0000000..e0e959b
--- /dev/null
+++ b/Fight/Stage/Dungeon/FrontEndDungeon/MapTransferSystem.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5e82b2edb21ac044c9cc21aa0d31038b
+timeCreated: 1541424855
+licenseType: Free
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Fight/Stage/StageManager.cs b/Fight/Stage/StageManager.cs
index 7f76c19..020d1fb 100644
--- a/Fight/Stage/StageManager.cs
+++ b/Fight/Stage/StageManager.cs
@@ -336,6 +336,12 @@
             mapOk.MapID = PlayerDatas.Instance.baseData.MapID;
             mapOk.Type = 0;
             GameNetSystem.Instance.SendInfo(mapOk);
+
+            var _mapData = H2Engine.MapData.LoadFormFile("map_" + _stageId);
+            if (_mapData != null)
+            {
+
+            }
         }
         else
         {

--
Gitblit v1.8.0