From d324ec3aa11bb15a5454648c710ff0e68b2fb564 Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Sun, 19 Apr 2026 14:58:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(timeline-kit):=20=E4=BF=AE=E5=A4=8D=20Timel?= =?UTF-8?q?ine=20=E9=87=8D=E5=A4=8D=E6=92=AD=E6=94=BE=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E4=BB=8E=E5=A4=B4=E5=BC=80=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Prefabs/Timeline管理器.prefab | 175 ------------------ Assets/Prefabs/Timeline管理器.prefab.meta | 7 - .../TimelineKit/DirectorHandler.cs | 31 ++-- 3 files changed, 14 insertions(+), 199 deletions(-) delete mode 100644 Assets/Prefabs/Timeline管理器.prefab delete mode 100644 Assets/Prefabs/Timeline管理器.prefab.meta diff --git a/Assets/Prefabs/Timeline管理器.prefab b/Assets/Prefabs/Timeline管理器.prefab deleted file mode 100644 index 0419f8ff5..000000000 --- a/Assets/Prefabs/Timeline管理器.prefab +++ /dev/null @@ -1,175 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &110333134186518973 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4484639372422530251} - - component: {fileID: 2061319565109939302} - - component: {fileID: 4974988147973287594} - - component: {fileID: 8024805593218196570} - - component: {fileID: 7450747883882295617} - m_Layer: 0 - m_Name: "\u8C03\u9152\u8499\u592A\u5947" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4484639372422530251 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 110333134186518973} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1776037001249689229} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!212 &2061319565109939302 -SpriteRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 110333134186518973} - m_Enabled: 1 - m_CastShadows: 0 - m_ReceiveShadows: 0 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 0 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 0 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 315200563 - m_SortingLayer: 16 - m_SortingOrder: 0 - m_Sprite: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_FlipX: 0 - m_FlipY: 0 - m_DrawMode: 0 - m_Size: {x: 13.348837, y: 3.5348837} - m_AdaptiveModeThreshold: 0.5 - m_SpriteTileMode: 0 - m_WasSpriteAssigned: 0 - m_MaskInteraction: 0 - m_SpriteSortPoint: 0 ---- !u!95 &4974988147973287594 -Animator: - serializedVersion: 5 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 110333134186518973} - m_Enabled: 1 - m_Avatar: {fileID: 0} - m_Controller: {fileID: 0} - m_CullingMode: 0 - m_UpdateMode: 0 - m_ApplyRootMotion: 0 - m_LinearVelocityBlending: 0 - m_StabilizeFeet: 0 - m_WarningMessage: - m_HasTransformHierarchy: 1 - m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorStateOnDisable: 0 - m_WriteDefaultValuesOnDisable: 0 ---- !u!320 &8024805593218196570 -PlayableDirector: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 110333134186518973} - m_Enabled: 1 - serializedVersion: 3 - m_PlayableAsset: {fileID: 11400000, guid: 2d9baefeca916a942ab57a6714f7dc9e, type: 2} - m_InitialState: 0 - m_WrapMode: 2 - m_DirectorUpdateMode: 1 - m_InitialTime: 0 - m_SceneBindings: - - key: {fileID: 8951948241001910536, guid: 2d9baefeca916a942ab57a6714f7dc9e, type: 2} - value: {fileID: 4974988147973287594} - m_ExposedReferences: - m_References: [] ---- !u!114 &7450747883882295617 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 110333134186518973} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 07d657d6b80509b4eb04f59afaa9aa2d, type: 3} - m_Name: - m_EditorClassIdentifier: - timelineName: "\u8C03\u9152\u8499\u592A\u5947" - director: {fileID: 8024805593218196570} ---- !u!1 &7609156256298449229 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1776037001249689229} - m_Layer: 0 - m_Name: "Timeline\u7BA1\u7406\u5668" - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1776037001249689229 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7609156256298449229} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 4484639372422530251} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Prefabs/Timeline管理器.prefab.meta b/Assets/Prefabs/Timeline管理器.prefab.meta deleted file mode 100644 index c6479a7d8..000000000 --- a/Assets/Prefabs/Timeline管理器.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 4b35a149a0fc9214faaf88701fde8c77 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs b/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs index da472dcd1..6d102d7e9 100644 --- a/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs +++ b/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using Cinemachine; using UnityEngine; @@ -217,16 +217,14 @@ namespace AibisDream return; } - // 先停止再播放 + // 先停止、回到起点再播放(保证同一 Timeline 可重复从头播放) CancelPendingResetToStartCoroutine(); director.stopped -= OnDirectorStopped; - if (director.state == PlayState.Playing) - { - director.Stop(); - } - + director.Stop(); + ApplyPlaybackTimeZero(); + _onCompleteCallback = onComplete; - + if (ShouldSubscribeStopped(onComplete)) { director.stopped += OnDirectorStopped; @@ -235,6 +233,7 @@ namespace AibisDream // 自动绑定 CinemachineBrain AutoBindCinemachineBrain(); + Debug.Log($"DirectorHandler {timelineName}: Play"); director.Play(); } @@ -251,10 +250,8 @@ namespace AibisDream CancelPendingResetToStartCoroutine(); director.stopped -= OnDirectorStopped; - if (director.state == PlayState.Playing) - { - director.Stop(); - } + director.Stop(); + ApplyPlaybackTimeZero(); if (ShouldSubscribeStopped(null)) { @@ -264,6 +261,7 @@ namespace AibisDream // 自动绑定 CinemachineBrain AutoBindCinemachineBrain(); + Debug.Log($"DirectorHandler {timelineName}: Play"); director.Play(); // 等待播放完成 @@ -329,10 +327,7 @@ namespace AibisDream CancelPendingResetToStartCoroutine(); director.stopped -= OnDirectorStopped; - if (director.state == PlayState.Playing) - { - director.Stop(); - } + director.Stop(); _savedPlayableAsset = director.playableAsset; director.playableAsset = loadedAsset; @@ -341,7 +336,9 @@ namespace AibisDream // 自动绑定 CinemachineBrain(必须在 RebuildGraph 之后) AutoBindCinemachineBrain(); - + + ApplyPlaybackTimeZero(); + _addressableHandle = loadedHandle; _onCompleteCallback = onComplete;