using System; using System.Collections; using System.Collections.Generic; using Main; using Sirenix.OdinInspector; using UnityEditor; using UnityEngine; using UnityEngine.Serialization; [CreateAssetMenu(fileName = "PointGatherData", menuName = "Evo/Create PointGatherData")] public class PointGatherData : SerializedScriptableObject { /// /// 碰撞盒是否渲染 /// public bool isGizmo = false; #if UNITY_EDITOR [Button("一键生成坐标数据")] public void CreatPosData() { ZoneController[] zoneControllers = FindObjectsOfType(true); PointController[] pointControllers = FindObjectsOfType(true); for (int i = 0; i < ZoneDatas.Count; i++) { ZoneData zoneData = ZoneDatas[i]; foreach (var zoneController in zoneControllers) { if (zoneController.name == zoneData.name) { zoneData.transformData.position = zoneController.transform.localPosition; zoneData.transformData.rotation = zoneController.transform.localEulerAngles; zoneData.transformData.scale = zoneController.transform.localScale; } } for (int j = 0; j < zoneData.pointDatas.Count; j++) { PointData pointData = zoneData.pointDatas[j]; foreach (var pointController in pointControllers) { if (pointController.name == pointData.name) { pointData.colliderData.position = pointController.transform.localPosition; pointData.colliderData.rotation = pointController.transform.localEulerAngles; pointData.colliderData.scale = pointController.transform.localScale; var collider = pointController.transform.Find("collisionbox"); pointData.colliderData.colPosition = collider.localPosition; pointData.colliderData.colRotation = collider.localEulerAngles; pointData.colliderData.colScale = collider.localScale; } } } } EditorUtility.SetDirty(this); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } #endif public List ZoneDatas; } /// /// 区域数据 /// [Serializable] public class ZoneData { public string id; public string name; [BoxGroup("坐标数据"), HideLabel][ReadOnly] public TransformData transformData; //[HideLabel] public ColliderData colliderData; public List pointDatas; public ZoneData() { transformData = new TransformData(); pointDatas = new List(); } } /// /// 点位数据 /// [Serializable] public class PointData { public int order; public string id; public bool isTigger = true; public string name; [HideLabel][ReadOnly] public ColliderData colliderData; } /// /// 点位数据 /// [Serializable] public struct TransformData { public Vector3 position; public Vector3 rotation; public Vector3 scale; } /// /// 点位数据 /// [Serializable] public struct ColliderData { [BoxGroup("碰撞点坐标数据"), HideLabel] public Vector3 position; [BoxGroup("碰撞点坐标数据"), HideLabel] public Vector3 rotation; [BoxGroup("碰撞点坐标数据"), HideLabel] public Vector3 scale; [BoxGroup("包围盒数据"), HideLabel] public Vector3 colPosition; [BoxGroup("包围盒数据"), HideLabel] public Vector3 colRotation; [BoxGroup("包围盒数据"), HideLabel] public Vector3 colScale; }