137 lines
3.8 KiB
C#
137 lines
3.8 KiB
C#
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
|
|
{
|
|
|
|
/// <summary>
|
|
/// 碰撞盒是否渲染
|
|
/// </summary>
|
|
public bool isGizmo = false;
|
|
|
|
#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.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<ZoneData> ZoneDatas;
|
|
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 区域数据
|
|
/// </summary>
|
|
[Serializable]
|
|
public class ZoneData
|
|
{
|
|
public string id;
|
|
public string name;
|
|
[BoxGroup("坐标数据"), HideLabel][ReadOnly] public TransformData transformData;
|
|
|
|
|
|
//[HideLabel] public ColliderData colliderData;
|
|
|
|
|
|
public List<PointData> pointDatas;
|
|
|
|
public ZoneData()
|
|
{
|
|
transformData = new TransformData();
|
|
pointDatas = new List<PointData>();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点位数据
|
|
/// </summary>
|
|
[Serializable]
|
|
public class PointData
|
|
{
|
|
public int order;
|
|
public string id;
|
|
public bool isTigger = true;
|
|
public string name;
|
|
[HideLabel][ReadOnly] public ColliderData colliderData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点位数据
|
|
/// </summary>
|
|
[Serializable]
|
|
public struct TransformData
|
|
{
|
|
public Vector3 position;
|
|
public Vector3 rotation;
|
|
public Vector3 scale;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点位数据
|
|
/// </summary>
|
|
[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;
|
|
} |