Files
plugin-library/Assets/Domain/Main/HotUpdate/Data/PointGatherData.cs
2025-07-02 10:05:26 +08:00

102 lines
3.3 KiB
C#

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<ZoneData> ZoneDatas;
[SerializeField] private GameObject targetGameObject;
#if UNITY_EDITOR
[Button("一键生成坐标数据")]
public void CreatPosData()
{
ZoneController[] zoneControllers = FindObjectsOfType<ZoneController>(true);
PointController[] pointControllers = FindObjectsOfType<PointController>(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
}
/// <summary>
/// 区域数据
/// </summary>
[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<PointData> pointDatas;
}
/// <summary>
/// 点位数据
/// </summary>
[Serializable]
public class PointData
{
public int id;
public string name;
public Vector3 position;
public Vector3 rotation;
public Vector3 scale;
public string desc;
}