//----------------------------------------------------------------------------------------------------------------------

        private static void InitTest(bool enableSceneCacheGo, out PlayableDirector director,
                                     out SceneCachePlayer sceneCachePlayer, out TimelineClip clip)
        {
            EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects);

            director         = CreateTestDirector();
            sceneCachePlayer = CreateTestSceneCachePlayer();
            sceneCachePlayer.gameObject.SetActive(enableSceneCacheGo);
            clip = SceneCachePlayerEditorUtility.AddSceneCacheTrackAndClip(director, "TestSceneCacheTrack", sceneCachePlayer);

            TimelineEditorUtility.SelectDirectorInTimelineWindow(director); //trigger the TimelineWindow's update etc.
            TimelineEditorUtility.RefreshTimelineEditor();
        }
        public IEnumerator CheckGameObjectActiveStateReferredInMultipleTracks()
        {
            InitTest(true, out PlayableDirector director, out SceneCachePlayer sceneCachePlayer, out TimelineClip clip0);
            yield return(null);

            TimelineClip clip1 = SceneCachePlayerEditorUtility.AddSceneCacheTrackAndClip(director, "TestSceneCacheTrack 1", sceneCachePlayer);

            clip1.start = clip0.end;
            TimelineEditorUtility.RefreshTimelineEditor(RefreshReason.ContentsAddedOrRemoved);
            yield return(null);

            GameObject scGameObject = sceneCachePlayer.gameObject;

            SetDirectorTime(director, clip0.start);
            yield return(null);

            Assert.IsTrue(scGameObject.activeSelf);

            SetDirectorTime(director, clip1.start + clip1.duration * 0.5f);
            yield return(null);

            Assert.IsTrue(scGameObject.activeSelf);
        }