using GameWrapper; using UnityEngine; [ExecuteAlways] public class CameraController : MonoBehaviour { public static CameraController Instance => _instance; public static CameraData Data => Instance?.cameraData; public CameraData CameraData => cameraData; public Camera MainCamera => cameraData?.MainCamera; public float CameraMinSize => cameraData?.CameraMinSize ?? 0f; public float CameraMaxSize => cameraData?.CameraMaxSize ?? 0f; private CameraData cameraData; private ICameraLogic cameraLogic; private static CameraController _instance; #region MainLife private void Awake() { _instance = this; cameraData = gameObject.AddComponent(); cameraLogic = CameraLogicFactory.CreateCameraLogic(cameraData); if (cameraLogic == null) { Debug.LogError("Failed to create camera logic through factory"); } } private void OnEnable() { if (Application.isPlaying && cameraLogic != null) { cameraLogic.Initialize(); } } private void OnDisable() { if (Application.isPlaying && cameraLogic != null) { cameraLogic.Cleanup(); } } private void OnDestroy() { if (_instance == this) { _instance = null; } } private void Update() { if (cameraLogic != null) { cameraLogic.Update(); } } #endregion #region 接口 public void KeepCenter(Vector3 centerPos) { cameraLogic?.KeepCenter(centerPos); } public void CampKeepCenter(Vector3 centerPos) { cameraLogic?.CampKeepCenter(centerPos); } public void InitializeCameraPosition(Vector3 targetPosition, object cameraInfo = null) { // 使用 CameraInfoData.FromMapDataCameraInfo 方法转换 MapData.CameraInfo 为 CameraInfoData var cameraInfoData = CameraInfoData.FromMapDataCameraInfo(cameraInfo); cameraLogic?.InitializeCameraPosition(targetPosition, cameraInfoData); } public void AdjustSelf() { cameraLogic?.AdjustSelf(); } public void SetCameraFOVSize(float initialFOV) { cameraLogic?.SetCameraFOVSize(initialFOV); } public void RecordStartPos() { cameraLogic?.RecordStartPos(); } public void ResetToStartPos(float during = 0.3f) { cameraLogic?.ResetToStartPos(during); } #endregion #region 静态访问属性 public static bool FingerMoveEnable { get => Data?.FingerMoveEnable ?? true; set { if (Data != null) Data.FingerMoveEnable = value; } } #endregion }