using System; using System.Collections; using System.Collections.Generic; using Main; using Sirenix.OdinInspector; using UnityEditor; using UnityEngine; [CreateAssetMenu(fileName = "PointGatherData", menuName = "Evo/Create PointGatherData")] public class PointGatherData : ScriptableObject { public List ZoneDatas; [SerializeField] private GameObject targetGameObject; #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.position = zoneController.transform.localPosition; zoneData.rotation = zoneController.transform.localEulerAngles; zoneData.scale = zoneController.transform.localScale; zoneData.boundingBoxCenter = zoneController.ZoneCollider.center; zoneData.boundingBoxSize = zoneController.ZoneCollider.size; zoneData.ColliderPosition = zoneController.ZoneColliderPoint.transform.localPosition; zoneData.ColliderRotation = zoneController.ZoneColliderPoint.transform.localEulerAngles; zoneData.ColliderScale = zoneController.ZoneColliderPoint.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.position = pointController.transform.localPosition; pointData.rotation = pointController.transform.localEulerAngles; pointData.scale = pointController.transform.localScale; } } } } EditorUtility.SetDirty(this); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } #endif } /// /// 区域数据 /// [Serializable] public class ZoneData { public int id; public string name; public string desc; public string spriteName; [BoxGroup("坐标数据")] public Vector3 position; [BoxGroup("坐标数据")] public Vector3 rotation; [BoxGroup("坐标数据")] public Vector3 scale; [BoxGroup("碰撞点坐标数据")] public Vector3 ColliderPosition; [BoxGroup("碰撞点坐标数据")] public Vector3 ColliderRotation; [BoxGroup("碰撞点坐标数据")] public Vector3 ColliderScale; [BoxGroup("包围盒数据")] public Vector3 boundingBoxCenter; [BoxGroup("包围盒数据")] public Vector3 boundingBoxSize; public List pointDatas; } /// /// 点位数据 /// [Serializable] public class PointData { public int id; public string name; public Vector3 position; public Vector3 rotation; public Vector3 scale; public string desc; }