From 83acdeaecc9da88a2af98784223a57cb2f32b03a Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Sun, 19 Apr 2026 14:58:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(camera-kit):=20=E4=BF=AE=E5=A4=8D=E7=9B=B8?= =?UTF-8?q?=E6=9C=BA=E9=9C=87=E5=8A=A8=E5=8F=A0=E5=8A=A0=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=9B=9E=E5=BD=92=E5=8E=9F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/Framework/OtherKit/CameraKit.cs | 19 +++++++++++++++++-- .../SceneCenter/SubwayCenter.cs | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) 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()); } }