Files
plugin-library/Assets/11.PointCloudTools/Runtime/Script/PointSystem/Data/PointGatherData.cs

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