| Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/MapEditor/Behavior/Bhv_Evt_RefreshSceneObject.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/MapEditor/Behavior/Bhv_MapTrigger.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/MapEditor/Behavior/Bhv_MonsterData.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/MapEditor/Data/Event/Evt_RefreshMonster.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/MapEditor/Data/MapTrigger.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/MapEditor/Editor/MapEditor.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/Stage/Dungeon/DungeonStage.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs
@@ -11,7 +11,7 @@ public class Bhv_Evt_RefreshMonster : Bhv_Evt { [HideInInspector] public Evt_RefreshMonster.E_OverCondition overCondition = Evt_RefreshMonster.E_OverCondition.None; public Evt_RefreshMonster.E_OverCondition overCondition = Evt_RefreshMonster.E_OverCondition.DeadCount; [HideInInspector] public Evt_RefreshMonster.E_RefreshType refreshType = Evt_RefreshMonster.E_RefreshType.All; [HideInInspector] @@ -20,11 +20,15 @@ public int conditionParam; [HideInInspector] public int overParam; [HideInInspector] public int nextEventID = -1; #if UNITY_EDITOR [HideInInspector] private bool showMonsterList = false; private int npcID = -1; private string resName; public override void Save(BinaryWriter bw) { @@ -33,6 +37,7 @@ bw.Write((byte)refreshType); bw.Write(conditionParam); bw.Write(overParam); bw.Write(nextEventID); bw.Write(monsterList.Count); foreach (var _monster in monsterList) { @@ -47,6 +52,7 @@ bw.Write((byte)refreshType); bw.Write(conditionParam); bw.Write(overParam); bw.Write(nextEventID); bw.Write(monsterList.Count); foreach (var _monster in monsterList) { @@ -61,6 +67,7 @@ refreshType = (Evt_RefreshMonster.E_RefreshType)br.ReadByte(); conditionParam = br.ReadInt32(); overParam = br.ReadInt32(); nextEventID = br.ReadInt32(); int _count = br.ReadInt32(); for (int i = 0; i < _count; ++i) { @@ -130,21 +137,33 @@ } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(guiSkin.customStyles[1], GUILayout.Height(22)); EditorGUILayout.LabelField("下一事件", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60)); nextEventID = EditorGUILayout.IntField(nextEventID, guiSkin.textField, GUILayout.Height(22)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(guiSkin.customStyles[1]); EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); showMonsterList = EditorGUILayout.Foldout(showMonsterList, " 刷怪列表", true, guiSkin.customStyles[3]); EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50)); npcID = EditorGUILayout.IntField(npcID, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(70)); EditorGUILayout.LabelField("模型名", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50)); resName = EditorGUILayout.TextField(resName, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(70)); 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 = CreateNPC(npcID, resName); if (_monsterData) { monsterList.Add(_monsterData); showMonsterList = true; var _monsterData = _go.AddComponent<Bhv_MonsterData>(); monsterList.Add(_monsterData); showMonsterList = true; Selection.activeGameObject = _monsterData.gameObject; if (Selection.activeGameObject) { SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position); } } } EditorGUILayout.EndHorizontal(); if (showMonsterList) @@ -152,13 +171,10 @@ 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"; } EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50)); EditorGUILayout.LabelField(monsterList[i].npcID.ToString(), guiSkin.textField, GUILayout.Height(20)); EditorGUILayout.LabelField("模型名", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50)); EditorGUILayout.LabelField(monsterList[i].resName, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(70)); if (GUILayout.Button("定高", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20))) { Vector3 _pos = monsterList[i].transform.position; @@ -194,6 +210,47 @@ EditorGUILayout.EndVertical(); return _result; } private Bhv_MonsterData CreateNPC(int id, string name) { if (id <= 0) { Debug.Log("NPCID非法"); return null; } if (string.IsNullOrEmpty(name.Trim())) { Debug.Log("模型名不应该为空"); return null; } string _path = "Assets/ResourcesOut/Mob/Prefab_Race_" + name + ".prefab"; var _obj = AssetDatabase.LoadAssetAtPath<GameObject>(_path); if (!_obj) { Debug.LogError("所要创建的资源不存在: " + _path); return null; } _obj = Instantiate(_obj); RaycastHit _hit; Ray _ray = SceneView.lastActiveSceneView.camera.ViewportPointToRay(new Vector3(.5f, .5f, 0)); if (Physics.Raycast(_ray, out _hit, 1000f, LayerUtility.WalkbleMask)) { _obj.transform.position = _hit.point; } _obj.transform.SetParent(transform); _obj.transform.eulerAngles = Vector3.zero; _obj.transform.localScale = Vector3.one; var _monsterData = _obj.AddComponent<Bhv_MonsterData>(); _monsterData.npcID = id; _monsterData.resName = name; return _monsterData; } #endif } } Core/MapEditor/Behavior/Bhv_Evt_RefreshSceneObject.cs
@@ -164,7 +164,7 @@ _sceneObjData.resName = sceneName; RaycastHit _hit; Ray _ray = SceneView.lastActiveSceneView.camera.ViewportPointToRay(new Vector3(.5f, .5f, 0)); if (Physics.Raycast(_ray, out _hit, 1000f, LayerUtility.WalkbleMask)) if (Physics.Raycast(_ray, out _hit, 10000f, LayerUtility.WalkbleMask)) { _sceneObjData.transform.position = _hit.point; } Core/MapEditor/Behavior/Bhv_MapTrigger.cs
@@ -19,6 +19,8 @@ [HideInInspector] public int prevID = -1; [HideInInspector] public int nextID = -1; [HideInInspector] public List<int> eventIDList = new List<int>(); #if UNITY_EDITOR @@ -35,6 +37,7 @@ bw.Write((byte)triggerType); bw.Write((byte)type); bw.Write(prevID); bw.Write(nextID); 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)); @@ -59,6 +62,7 @@ triggerType = (MapTrigger.E_TriggerType)br.ReadByte(); type = (Evt.E_EventType)br.ReadByte(); prevID = br.ReadInt32(); nextID = br.ReadInt32(); float _pX = br.ReadSingle(); float _pY = br.ReadSingle(); float _pZ = br.ReadSingle(); @@ -98,10 +102,24 @@ if (showDetail) { EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); EditorGUILayout.LabelField("前置触发器", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80)); prevID = EditorGUILayout.IntField(prevID, guiSkin.textField, GUILayout.Height(20)); EditorGUILayout.LabelField("触发器类型", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80)); triggerType = (MapTrigger.E_TriggerType)EditorGUILayout.EnumPopup(triggerType, guiSkin.customStyles[1], GUILayout.Height(20), GUILayout.Width(100)); if (triggerType != MapTrigger.E_TriggerType.EnterStage) { var _descript = string.Empty; if (triggerType == MapTrigger.E_TriggerType.Trigger) { _descript = "前置ID"; } else if (triggerType == MapTrigger.E_TriggerType.Mission) { _descript = "任务ID"; } EditorGUILayout.LabelField(_descript, guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(55)); prevID = EditorGUILayout.IntField(prevID, guiSkin.textField, GUILayout.Height(20)); } EditorGUILayout.LabelField("结束触发", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(55)); nextID = EditorGUILayout.IntField(nextID, guiSkin.textField, GUILayout.Height(20)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(guiSkin.customStyles[1]); Core/MapEditor/Behavior/Bhv_MonsterData.cs
@@ -8,6 +8,8 @@ [HideInInspector] public int npcID; [HideInInspector] public string resName; [HideInInspector] public byte ai; #if UNITY_EDITOR @@ -15,6 +17,7 @@ public void Save(BinaryWriter bw) { bw.Write(npcID); bw.Write(resName); bw.Write(ai); bw.Write((float)System.Math.Round(transform.position.x, 2)); bw.Write((float)System.Math.Round(transform.position.y, 2)); @@ -24,6 +27,7 @@ public void Load(BinaryReader br) { npcID = br.ReadInt32(); resName = br.ReadString(); ai = br.ReadByte(); float _x = br.ReadSingle(); float _y = br.ReadSingle(); @@ -34,7 +38,11 @@ public void Export(BinaryWriter bw) { Save(bw); bw.Write(npcID); bw.Write(ai); 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)); } #endif Core/MapEditor/Data/Event/Evt_RefreshMonster.cs
@@ -8,7 +8,6 @@ { public enum E_OverCondition { None, DeadCount, Time, } @@ -21,7 +20,7 @@ } public MonsterData[] monsters; public E_OverCondition overCondition = E_OverCondition.None; public E_OverCondition overCondition = E_OverCondition.DeadCount; public E_RefreshType refreshType = E_RefreshType.All; /// <summary> /// 参数 @@ -34,6 +33,7 @@ /// <para>刷新类型: OneByOneTime, 作为时间(毫秒)</para> /// </summary> public int refreshParam; public int nextEventID = -1; public override void Load(BinaryReader br) { @@ -42,6 +42,7 @@ refreshType = (Evt_RefreshMonster.E_RefreshType)br.ReadByte(); refreshParam = br.ReadInt32(); conditionParam = br.ReadInt32(); nextEventID = br.ReadInt32(); int _count = br.ReadInt32(); monsters = new MonsterData[_count]; for (int i = 0; i < _count; ++i) Core/MapEditor/Data/MapTrigger.cs
@@ -9,7 +9,8 @@ public enum E_TriggerType { Trigger, EnterStage EnterStage, Mission, } public Evt.E_EventType type; Core/MapEditor/Editor/MapEditor.cs
@@ -52,6 +52,7 @@ _root.AddComponent<MeshCollider>(); _root.transform.position = _go.transform.position; _root.transform.rotation = _go.transform.rotation; _root.layer = LayerUtility.Walkble; break; } } Fight/Stage/Dungeon/DungeonStage.cs
@@ -477,6 +477,23 @@ } } public Vector3 GetCloseTransPoint(Vector3 pos) { // 遍历找到离给定点最近并且可寻路至的传送点 P // 找到 P点的 另一端 P1 // 判断当前传入的点是否可以寻路至 P1 // 不行的话重新寻找 可以的话返回 P1 的坐标 float _compareDis; float _dis; foreach (var _p in m_TransferGroupList) { } return Vector3.zero; } private void SceneResourceReplace10010() { for (var i = 100101; i <= 100109; i++)