76 lines
2.6 KiB
C#
76 lines
2.6 KiB
C#
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
namespace GameWrapper
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 相机信息数据类,用于跨程序集传递相机配置
|
|||
|
|
/// 替代原来的MapData.CameraInfo
|
|||
|
|
/// </summary>
|
|||
|
|
[System.Serializable]
|
|||
|
|
public class CameraInfoData
|
|||
|
|
{
|
|||
|
|
// 边距设置
|
|||
|
|
public float rightMarginInPre = 1.5f;
|
|||
|
|
public float leftMarginInPre = 1.5f;
|
|||
|
|
public float topMarginInInPre = 0.9f;
|
|||
|
|
public float bottomMarginInPre = 0.9f;
|
|||
|
|
|
|||
|
|
// FOV设置
|
|||
|
|
public float initialFOV = 30f;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 从MapData.CameraInfo创建CameraInfoData的静态工厂方法
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="cameraInfo">MapData.CameraInfo实例</param>
|
|||
|
|
/// <returns>对应的CameraInfoData实例</returns>
|
|||
|
|
public static CameraInfoData FromMapDataCameraInfo(object cameraInfo)
|
|||
|
|
{
|
|||
|
|
// 如果传入为null,返回默认值
|
|||
|
|
if (cameraInfo == null)
|
|||
|
|
{
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建新的实例
|
|||
|
|
var result = new CameraInfoData();
|
|||
|
|
|
|||
|
|
// 使用反射获取属性值
|
|||
|
|
var type = cameraInfo.GetType();
|
|||
|
|
|
|||
|
|
// TODO 优化
|
|||
|
|
// 获取并设置边距
|
|||
|
|
TryGetPropertyValue(type, cameraInfo, "rightMarginInPre", ref result.rightMarginInPre);
|
|||
|
|
TryGetPropertyValue(type, cameraInfo, "leftMarginInPre", ref result.leftMarginInPre);
|
|||
|
|
TryGetPropertyValue(type, cameraInfo, "topMarginInInPre", ref result.topMarginInInPre);
|
|||
|
|
TryGetPropertyValue(type, cameraInfo, "bottomMarginInPre", ref result.bottomMarginInPre);
|
|||
|
|
|
|||
|
|
// 获取并设置FOV
|
|||
|
|
TryGetPropertyValue(type, cameraInfo, "initialFOV", ref result.initialFOV);
|
|||
|
|
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 尝试通过反射获取对象的属性值
|
|||
|
|
/// </summary>
|
|||
|
|
private static void TryGetPropertyValue<T>(System.Type type, object obj, string propertyName, ref T targetValue)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
var property = type.GetProperty(propertyName);
|
|||
|
|
if (property != null)
|
|||
|
|
{
|
|||
|
|
var value = property.GetValue(obj);
|
|||
|
|
if (value != null && value is T typedValue)
|
|||
|
|
{
|
|||
|
|
targetValue = typedValue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (System.Exception ex)
|
|||
|
|
{
|
|||
|
|
Debug.LogWarning($"Failed to get property {propertyName}: {ex.Message}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|