60 lines
1.7 KiB
C#
60 lines
1.7 KiB
C#
|
|
using GameWrapper;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 相机逻辑接口 定义在GameWrapper中 实现放在Gameplay命名空间
|
|||
|
|
/// </summary>
|
|||
|
|
public interface ICameraLogic
|
|||
|
|
{
|
|||
|
|
void Initialize();
|
|||
|
|
void Cleanup();
|
|||
|
|
void Update();
|
|||
|
|
void AdjustSelf();
|
|||
|
|
void KeepCenter(Vector3 centerPos);
|
|||
|
|
void CampKeepCenter(Vector3 centerPos);
|
|||
|
|
void InitializeCameraPosition(Vector3 targetPosition, CameraInfoData cameraInfo = null);
|
|||
|
|
void SetCameraFOVSize(float initialFOV);
|
|||
|
|
void RecordStartPos();
|
|||
|
|
void ResetToStartPos(float during = 0.3f);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 相机逻辑工厂
|
|||
|
|
/// </summary>
|
|||
|
|
public static class CameraLogicFactory
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 委托定义 创建CameraLogic的工厂方法
|
|||
|
|
/// </summary>
|
|||
|
|
public delegate ICameraLogic CreateCameraLogicDelegate(CameraData cameraData);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 工厂方法 默认返回null
|
|||
|
|
/// </summary>
|
|||
|
|
private static CreateCameraLogicDelegate _factoryMethod = null;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 注册相机逻辑工厂方法
|
|||
|
|
/// </summary>
|
|||
|
|
public static void RegisterFactory(CreateCameraLogicDelegate factoryMethod)
|
|||
|
|
{
|
|||
|
|
_factoryMethod = factoryMethod;
|
|||
|
|
Debug.Log("Registered CameraLogic factory method");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 创建相机逻辑实例
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="cameraData">相机数据</param>
|
|||
|
|
/// <returns>相机逻辑实例,如果未注册工厂方法则返回null</returns>
|
|||
|
|
public static ICameraLogic CreateCameraLogic(CameraData cameraData)
|
|||
|
|
{
|
|||
|
|
if (_factoryMethod == null)
|
|||
|
|
{
|
|||
|
|
Debug.LogError("CameraLogic factory method not registered!");
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return _factoryMethod(cameraData);
|
|||
|
|
}
|
|||
|
|
}
|