// 업데이트
        //--------------------------------------------------------------------
        public void Update()
        {
            //플레이중인 TrackSet을 찾고 바로 업데이트
            _curTrackSet = null;

#if UNITY_2017_1_OR_NEWER
            _lastPlayedTimelineClipPrev = _lastPlayedTimelineClip;

            _lastPlayedTimelineClip = null;
#endif
            _lastPlayedLocalTime = 0.0f;

            for (int i = 0; i < _nTrackSets; i++)
            {
                _curTrackSet = _trackSets[i];
                if (_curTrackSet.IsPlaying)
                {
                    _curTrackSet.Update(_animPlayManager);

                    //마지막으로 계산된 클립을 저장한다.
#if UNITY_2017_1_OR_NEWER
                    _lastPlayedTimelineClip = _curTrackSet._lastPlayedTimelineClip;
#endif
                    _lastPlayedLocalTime = _curTrackSet._lastPlayedLocalTime;


                    return;
                }
            }
        }
        // Functions
        //-------------------------------------------------
        public bool AddTrack(
#if UNITY_2017_1_OR_NEWER
            PlayableDirector playableDirector,
#endif
            string trackName, int layer, apAnimPlayUnit.BLEND_METHOD blendMethod)
        {
#if UNITY_2017_1_OR_NEWER
            if (playableDirector == null)
            {
                Debug.LogError("AnyPortrait : AddTimelineTrack() is Failed. PlayableDirector is Null.");
                return(false);
            }
            if (playableDirector.playableAsset == null)
            {
                Debug.LogError("AnyPortrait : AddTimelineTrack() is Failed. PlayableAsset(Timeline) is Null.");
                return(false);
            }
#endif
            if (string.IsNullOrEmpty(trackName))
            {
                Debug.LogError("AnyPortrait : AddTimelineTrack() is Failed. Track Name is empty.");
                return(false);
            }

#if UNITY_2017_1_OR_NEWER
            bool isValidTrack = DirectorTrackSet.CheckTrackValidation(playableDirector, playableDirector.playableAsset, trackName);
            if (!isValidTrack)
            {
                Debug.LogError("AnyPortrait : AddTimelineTrack() is Failed. The requested track could not be found.");
                return(false);
            }

            //이미 등록된 Director에 대하여 새로운 Track을 추가하는 경우일 수 있다.
            //없다면 새로 Director를 만들고, 있으면 재활용

            DirectorTrackSet targetDirectorSet = _trackSets.Find(delegate(DirectorTrackSet a)
            {
                return(a._playableDirector == playableDirector && a._playableAsset == playableDirector.playableAsset);
            });

            if (targetDirectorSet == null)
            {
                //새로운 Director로 등록해야 한다.
                targetDirectorSet = new DirectorTrackSet();
                targetDirectorSet.SetPlayableDirector(playableDirector, playableDirector.playableAsset);
                _trackSets.Add(targetDirectorSet);

                _nTrackSets = _trackSets.Count;
            }

            bool result = targetDirectorSet.AddTrack(trackName, layer, blendMethod, _portrait, _animPlayManager);

            return(result);
#else
            return(false);
#endif
        }
 // 종료시 모두 초기화
 public void UnlinkAll()
 {
     _curTrackSet = null;
     for (int i = 0; i < _nTrackSets; i++)
     {
         _curTrackSet = _trackSets[i];
         _curTrackSet.UnlinkAll();
     }
 }
            //초기화
            public TimelineTrackData(DirectorTrackSet parentTrackSet)
            {
#if UNITY_2017_1_OR_NEWER
                _parentTrackSet = parentTrackSet;
#endif
            }