diff --git a/Assets/Scripts/Framework/OtherKit/CameraKit.cs b/Assets/Scripts/Framework/OtherKit/CameraKit.cs index 238efaf65..09efc26e6 100644 --- a/Assets/Scripts/Framework/OtherKit/CameraKit.cs +++ b/Assets/Scripts/Framework/OtherKit/CameraKit.cs @@ -29,6 +29,7 @@ namespace AibisDream.Framework private CameraEnum _curCameraEnum; private CamState _curInitState; private Camera _orthoMainCamera; + private Tween _shakeTween; private struct CamState { @@ -288,9 +289,23 @@ namespace AibisDream.Framework yield break; } - yield return curCamera.VirtualCameraGameObject.transform + var transform = curCamera.VirtualCameraGameObject.transform; + + // 停止并清理之前的震动,防止多个 tween 叠加导致无法回归原点 + if (_shakeTween != null && _shakeTween.IsActive()) + { + _shakeTween.Kill(); + if (_camInitStateDict.TryGetValue(_curCameraEnum, out var camState)) + { + transform.localPosition = camState.pos; + } + } + + _shakeTween = transform .DOShakePosition(duration, strength, vibrate, 90, false, false) - .WaitForCompletion(); + .OnComplete(() => _shakeTween = null); + + yield return _shakeTween.WaitForCompletion(); } /// diff --git a/Assets/Scripts/SceneManagement/SceneCenter/SubwayCenter.cs b/Assets/Scripts/SceneManagement/SceneCenter/SubwayCenter.cs index 319242159..e3ddb5a41 100644 --- a/Assets/Scripts/SceneManagement/SceneCenter/SubwayCenter.cs +++ b/Assets/Scripts/SceneManagement/SceneCenter/SubwayCenter.cs @@ -95,7 +95,7 @@ namespace AibisDream public IEnumerator Enter() { - yield return CameraKit.Instance.SwitchCamera(CameraEnum.Subway); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.Subway, true); DialogUIManager.Instance.LoadBubbles(SubwayCenter.Instance.subwaySlots.CollectData()); } }