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 pointList = new List(); #if UNITY_EDITOR private bool showDetail; 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(); _transferPoint.capsuleCollider = _go.AddComponent(); 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.customStyles[3]); 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(); _transferPoint.capsuleCollider = _go.AddComponent(); 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 } }