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;
}