102 lines
3.3 KiB
C#
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;
|
|
} |