using UnityEngine; using Unity.Cinemachine; namespace BaseGames.Camera { /// /// 相机服务接口。通过 ServiceLocator.GetOrDefault<ICameraService>() 访问。 /// public interface ICameraService { /// /// 切换到目标相机区域。 /// 用于触发区域优先级仲裁: /// 仅当 priority ≥ 当前激活优先级时才执行切换。 /// 传 0(默认)时始终切换(适合 RoomController 初始化或场景加载)。 /// /// = true 时使用即时切断混合(房间入口硬切:相机直接跳到目标位置、无过渡动画), /// 同时重置窥视偏移,避免旧房间的窥视偏移残留到新房间。 /// 适合通过门传送后的首次相机初始化;区域内触发区域切换应保持默认 false。 /// /// void SwitchArea(CameraArea area, int priority = 0, bool instantCut = false); /// /// 释放 (通常由 CameraTriggerZone.OnTriggerExit 调用)。 /// 若 正是当前激活区域,切换到 ; /// 否则无操作。 /// void ReleaseArea(CameraArea releasedArea, CameraArea fallback); /// 运行时设置跟随目标(Player/CameraFollowTarget),激活区域时自动同步到专属 VCam。 void SetFollowTarget(Transform followTarget); /// 触发屏幕抖动(指定速度矢量)。 void TriggerImpulse(Vector3 velocity); /// 触发屏幕抖动(向下方向)。 void TriggerImpulse(float strength = 0.3f); /// /// 平滑过渡视野尺寸(可视半高,世界单位)。 = 0 时瞬间切换。 /// 透视相机下自动换算为 FOV,与正交相机的 OrthographicSize 语义等价。 /// 适用于 Boss 战拉远、特殊演出室拉近等场景。 /// void SetLensSize(float visibleHalfHeight, float duration = 0f); /// /// 进入过场模式,激活指定 VCam(优先级高于所有区域相机),Brain 自动混合。 /// VCam 的 Follow / LookAt / Lens 由设计者在 Inspector 中配置,接口不强制覆写。 /// void EnterCutsceneMode(CinemachineCamera cutsceneCamera); /// /// 退出过场模式,撤销过场 VCam 的优先级,Brain 自动混合回当前区域相机。 /// void ExitCutsceneMode(); /// /// 通知相机系统玩家的面朝方向,使方向感知偏置立即响应。 /// 由 PlayerController 在精灵翻转时调用(OnFlip)。 /// direction: +1 = 朝右,-1 = 朝左,0 = 清除外部输入(回退到速度估算)。 /// void SetPlayerFacing(int direction); } }