Beispiel #1
0
    private void Start()
    {
        if (!director)
        {
            if (GetComponent <PlayableDirector>())
            {
                director = GetComponent <PlayableDirector>();
            }
        }

        // 타임라인에 오브젝트 바인딩. Interact_Window.cs->Start() 참고.
        if (GameObject.FindWithTag("Player"))
        {
            GameObject player = GameObject.FindWithTag("Player");
            // 캐비닛에 들어가는 타임라인.
            TimelineAsset tmp = director.playableAsset as TimelineAsset;
            director.SetGenericBinding(tmp.GetOutputTrack(0), player);

            tmp = bossAndDoctor.playableAsset as TimelineAsset;
            // Interact_Window.cs에서 보스와닥터 타임라인에 플레이어 카메라를 할당을 하나, 만약으로 안되어 있을 경우.
            if (bossAndDoctor.GetGenericBinding(tmp.GetOutputTrack(2)) == null)
            {
                bossAndDoctor.SetGenericBinding(tmp.GetOutputTrack(2), player.GetComponentInChildren <Camera>().gameObject);
            }
        }
    }
Beispiel #2
0
        protected void ShowBindingsUI(TimelineAsset timelineAsset, List <ActionParameter> parameters)
        {
            if (timelineAsset == null)
            {
                return;
            }

            if (newBindings == null || timelineAsset.outputTrackCount != newBindings.Length)
            {
                BindingData[] tempBindings = new BindingData[newBindings.Length];
                for (int i = 0; i < newBindings.Length; i++)
                {
                    tempBindings[i] = new BindingData(newBindings[i]);
                }

                newBindings = new BindingData[timelineAsset.outputTrackCount];
                for (int i = 0; i < newBindings.Length; i++)
                {
                    if (i < tempBindings.Length)
                    {
                        newBindings[i] = new BindingData(tempBindings[i]);
                    }
                    else
                    {
                        newBindings[i] = new BindingData();
                    }
                }
            }

            string[] popUpLabels = new string[newBindings.Length];
            for (int i = 0; i < newBindings.Length; i++)
            {
                string trackName = (timelineAsset.GetOutputTrack(i) != null) ? timelineAsset.GetOutputTrack(i).name : " Track";
                if (string.IsNullOrEmpty(trackName))
                {
                    trackName = " Unnamed";
                }
                popUpLabels[i] = "#" + i.ToString() + ": " + trackName;
            }

            EditorGUILayout.BeginVertical(CustomStyles.thinBox);
            rebindTrackIndex = EditorGUILayout.Popup("Select a track:", rebindTrackIndex, popUpLabels);
            ShowBindingUI(rebindTrackIndex, parameters);

            if (newBindings.Length > 1)
            {
                EditorGUILayout.HelpBox("All bindings will be affected - not just the one selected above.", MessageType.Info);
            }
            CustomGUILayout.EndVertical();
        }
        /**
         * <summary>Serialises appropriate GameObject values into a string.</summary>
         * <returns>The data, serialised as a string</returns>
         */
        public override string SaveData()
        {
            TimelineData timelineData = new TimelineData();

            timelineData.objectID      = constantID;
            timelineData.savePrevented = savePrevented;

                        #if UNITY_2017_1_OR_NEWER
            PlayableDirector director = GetComponent <PlayableDirector>();
            timelineData.isPlaying       = (director.state == PlayState.Playing);
            timelineData.currentTime     = director.time;
            timelineData.trackObjectData = "";
            timelineData.timelineAssetID = "";

            if (director.playableAsset != null)
            {
                TimelineAsset timeline = (TimelineAsset)director.playableAsset;

                if (timeline != null)
                {
                    if (saveTimelineAsset)
                    {
                        timelineData.timelineAssetID = AssetLoader.GetAssetInstanceID(timeline);
                    }

                    if (saveBindings)
                    {
                        int[] bindingIDs = new int[timeline.outputTrackCount];
                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            TrackAsset trackAsset  = timeline.GetOutputTrack(i);
                            GameObject trackObject = director.GetGenericBinding(trackAsset) as GameObject;
                            bindingIDs[i] = 0;
                            if (trackObject != null)
                            {
                                ConstantID cIDComponent = trackObject.GetComponent <ConstantID>();
                                if (cIDComponent != null)
                                {
                                    bindingIDs[i] = cIDComponent.constantID;
                                }
                            }
                        }

                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            timelineData.trackObjectData += bindingIDs[i].ToString();
                            if (i < (bindingIDs.Length - 1))
                            {
                                timelineData.trackObjectData += ",";
                            }
                        }
                    }
                }
            }
                        #else
            ACDebug.LogWarning("The 'Remember Director' component is only compatible with Unity 5.6 onward.", this);
                        #endif

            return(Serializer.SaveScriptData <TimelineData> (timelineData));
        }
Beispiel #4
0
        protected void PrepareDirectorEnd()
        {
                        #if !ACIgnoreTimeline
            TimelineAsset timelineAsset = runtimeDirector.playableAsset as TimelineAsset;
            if (timelineAsset != null)
            {
                for (int i = 0; i < timelineAsset.outputTrackCount; i++)
                {
                    TrackAsset trackAsset = timelineAsset.GetOutputTrack(i);

                    GameObject bindingObject = runtimeDirector.GetGenericBinding(trackAsset) as GameObject;
                    if (bindingObject == null)
                    {
                        Animator bindingAnimator = runtimeDirector.GetGenericBinding(trackAsset) as Animator;
                        if (bindingAnimator != null)
                        {
                            bindingObject = bindingAnimator.gameObject;
                        }
                    }

                    if (bindingObject != null)
                    {
                        Char bindingObjectChar = bindingObject.GetComponent <Char>();
                        if (bindingObjectChar != null)
                        {
                            bindingObjectChar.OnExitTimeline(runtimeDirector, i);
                        }
                    }
                }
            }
                        #endif
        }
    void Awake()
    {
        director = GetComponent <PlayableDirector>();
        TimelineAsset asset = director.playableAsset as TimelineAsset;

        director.SetGenericBinding(asset.GetOutputTrack(0), Camera.main.gameObject);
    }
    public void GenerateMoveClip(PlayableDirector director, int trackIndex)
    {
        List <CurvePoint> points = GetPointsInScene();

        if (points.Count <= 0)
        {
            return;
        }
        string        errorLog = "";
        TimelineAsset asset    = director.playableAsset as TimelineAsset;
        TrackAsset    track    = asset.GetOutputTrack(trackIndex);

        if (track == null)
        {
            errorLog = "Track Index Error";
        }
        if (!(track is RoleMoveTrack))
        {
            errorLog = "Track 类型错误,不是RoleMoveTrack";
        }
        if (string.IsNullOrEmpty(errorLog))
        {
            List <Vector3> pointsPos = points.Select(point => point.transform.position).ToList();
            TimelineClip   clip      = track.CreateDefaultClip();
            RoleMoveClip   moveclip  = clip.asset as RoleMoveClip;
            moveclip.points   = pointsPos;
            moveclip.roleData = director.GetGenericBinding(track) as RoleData;
        }
        else
        {
            Debug.LogError(errorLog);
        }
    }
        /**
         * <summary>Serialises appropriate GameObject values into a string.</summary>
         * <returns>The data, serialised as a string</returns>
         */
        public override string SaveData()
        {
            TimelineData timelineData = new TimelineData();

            timelineData.objectID      = constantID;
            timelineData.savePrevented = savePrevented;

            PlayableDirector director = GetComponent <PlayableDirector>();

            timelineData.isPlaying       = (director.state == PlayState.Playing);
            timelineData.currentTime     = director.time;
            timelineData.trackObjectData = string.Empty;
            timelineData.timelineAssetID = string.Empty;

            if (director.playableAsset != null)
            {
                                #if !ACIgnoreTimeline
                TimelineAsset timeline = (TimelineAsset)director.playableAsset;

                if (timeline != null)
                {
                    if (saveTimelineAsset)
                    {
                        timelineData.timelineAssetID = AssetLoader.GetAssetInstanceID(timeline);
                    }

                    if (saveBindings)
                    {
                        int[] bindingIDs = new int[timeline.outputTrackCount];
                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            TrackAsset trackAsset  = timeline.GetOutputTrack(i);
                            GameObject trackObject = director.GetGenericBinding(trackAsset) as GameObject;
                            bindingIDs[i] = 0;
                            if (trackObject != null)
                            {
                                ConstantID cIDComponent = trackObject.GetComponent <ConstantID>();
                                if (cIDComponent != null)
                                {
                                    bindingIDs[i] = cIDComponent.constantID;
                                }
                            }
                        }

                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            timelineData.trackObjectData += bindingIDs[i].ToString();
                            if (i < (bindingIDs.Length - 1))
                            {
                                timelineData.trackObjectData += ",";
                            }
                        }
                    }
                }
                                #endif
            }

            return(Serializer.SaveScriptData <TimelineData> (timelineData));
        }
Beispiel #8
0
 private void NuclearFire()
 {
     scripts.SetScript(3);
     player.ChangeMoveRotaState(false);
     director.Play(nuclear);
     director.SetGenericBinding(nuclear.GetOutputTrack(0), Camera.main.gameObject);
     Invoke("gameover", 2.5f);
 }
Beispiel #9
0
    private void Start()
    {
        //lastAnimTrigger.SetActive(false);
        player   = FirstPersonCamera.player;
        director = GetComponent <PlayableDirector>();
        TimelineAsset asset = director.playableAsset as TimelineAsset;

        director.SetGenericBinding(asset.GetOutputTrack(0), Camera.main.gameObject);
    }
    // Start is called before the first frame update
    void Start()
    {
        LockViewScript = PlayerCamera.GetComponent <LockView>();
        BathroomAttendantSaysHeNeedsForint = FMODUnity.RuntimeManager.CreateInstance("event:/Dialogue/BathroomAttendant/forintNeededToEnter");
        BathroomAttendantSaysThankYou      = FMODUnity.RuntimeManager.CreateInstance("event:/Dialogue/BathroomAttendant/bathroomAttendantSaysThankYou");
        GottaGoGottaGoGottaGoGoGo          = FMODUnity.RuntimeManager.CreateInstance("event:/Bathroom Cutscene/gottaGoGottaGoGottaGoGoGo");
        RepeatForint = FMODUnity.RuntimeManager.CreateInstance("event:/Dialogue/BathroomAttendant/RepeatForint");

        bathroomCutsceneTimelineTrack = bathroomCutsceneTimeline.GetOutputTrack(0);
        bathroomCutsceneTimelineClip  = bathroomCutsceneTimelineTrack.GetClips();
    }
Beispiel #11
0
        private void PrepareDirector()
        {
            if (newTimeline != null)
            {
                if (director.playableAsset != null && director.playableAsset is TimelineAsset)
                {
                    TimelineAsset oldTimeline      = (TimelineAsset)director.playableAsset;
                    GameObject[]  transferBindings = new GameObject[oldTimeline.outputTrackCount];
                    for (int i = 0; i < transferBindings.Length; i++)
                    {
                        TrackAsset trackAsset = oldTimeline.GetOutputTrack(i);
                        transferBindings[i] = director.GetGenericBinding(trackAsset) as GameObject;
                    }

                    director.playableAsset = newTimeline;

                    for (int i = 0; i < transferBindings.Length; i++)
                    {
                        if (transferBindings[i] != null)
                        {
                            var track = newTimeline.GetOutputTrack(i);
                            if (track != null)
                            {
                                director.SetGenericBinding(track, transferBindings[i].gameObject);
                            }
                        }
                    }
                }
                else
                {
                    director.playableAsset = newTimeline;
                }
            }

            if (updateBindings && newBindings != null)
            {
                TimelineAsset timelineAsset = director.playableAsset as TimelineAsset;
                if (timelineAsset != null)
                {
                    for (var i = 0; i < newBindings.Length; i++)
                    {
                        if (newBindings[i] != null)
                        {
                            var track = timelineAsset.GetOutputTrack(i);
                            if (track != null)
                            {
                                director.SetGenericBinding(track, newBindings[i].gameObject);
                            }
                        }
                    }
                }
            }
        }
Beispiel #12
0
    private void Start()
    {
        capsuleColl           = GetComponent <CapsuleCollider>();
        capsuleColl.isTrigger = true;

        // 다른 Scene에 있는 플레이어 GO를 찾아, 플레이어 GO를 필요로 하는
        // 타임라인(실질적으로는 Playable Director 컴포넌트)에 바인딩.
        if (GameObject.FindWithTag("Player"))
        {
            GameObject player = GameObject.FindWithTag("Player");

            // 오두막 안으로 들어가는 타임라인부터 할당.
            // 트랙 정보는 Timeline에 있기 때문에 PlayableDirector 컴포넌트에서 할당되어 있는 TimelineAsset을 가져온다.
            // PlayableAsset 클래스가 TimelineAsset의 부모(슈퍼) 클래스이기 때문에 형변환 가능.
            TimelineAsset tmp = comeIn.playableAsset as TimelineAsset;
            // PlayableDirector.SetGenericBindding(a, b) a = 오브젝트(b)를 바인딩할 트랙, b = 트랙(a)에 바인딩할 오브젝트.
            // TimelineAsset.GetOutputTrack(n) n = 타임라인에 있는 n+1번째 트랙을 반환한다. (인덱스는 0부터 시작하니깐)
            comeIn.SetGenericBinding(tmp.GetOutputTrack(2), player);

            // 오두막 밖으로 나가는 타임라인에 할당.
            tmp = comeOut.playableAsset as TimelineAsset;
            comeOut.SetGenericBinding(tmp.GetOutputTrack(0), player);

            // 보스와 닥터 타임라인에 할당.
            tmp = timeline.playableAsset as TimelineAsset;
            timeline.SetGenericBinding(tmp.GetOutputTrack(2), player.GetComponentInChildren <Camera>().gameObject);
        }

        if (comeIn.GetComponent <QuickOutline>())
        {
            leftOutline = comeIn.GetComponent <QuickOutline>();
        }
        if (comeOut.GetComponent <QuickOutline>())
        {
            rightOutline = comeOut.GetComponent <QuickOutline>();
        }

        forwardTrigger.SetActive(false);
    }
 public void BindTimelineTracks()
 {
     Debug.Log("Binding Timeline Tracks!");
     timelineAsset = (TimelineAsset)timeline.playableAsset;
     // iterate through tracks and map the objects appropriately
     for (var i = 0; i < trackList.Count; i++)
     {
         if (trackList[i] != null)
         {
             var track = (TrackAsset)timelineAsset.GetOutputTrack(i);
             timeline.SetGenericBinding(track, trackList[i]);
         }
     }
 }
Beispiel #14
0
        public void MuteTrack(int trackIndex, bool mute)
        {
            if (asset == null)
            {
                return;
            }
            // Get track from TimelineAsset
            TrackAsset track = asset.GetOutputTrack(trackIndex);

            // Change TimelineAsset's muted property value
            track.muted = mute;

            double t = director.time; // Store elapsed time

            director.RebuildGraph();  // Rebuild graph
            director.time = t;        // Restore elapsed time
        }
Beispiel #15
0
    public void SetupPlayableDirector()
    {
        PlayableDirector pd = GetComponent <PlayableDirector>();

        if (pd == null)
        {
            pd = gameObject.AddComponent <PlayableDirector>();
        }
        pd.playableAsset     = tl;
        pd.playOnAwake       = playOnAwake;
        pd.extrapolationMode = wrapMode;
        pd.initialTime       = initTime;

        if (bindingInfos != null && bindingInfos.Length > 0)
        {
            int trackCount = tl.outputTrackCount;
            foreach (var item in bindingInfos)
            {
                if (item.index < 0 || item.index >= trackCount || item.obj == null)
                {
                    continue;
                }
                var track = tl.GetOutputTrack(item.index);
                if (track != null)
                {
                    pd.SetGenericBinding(track, item.obj);
                }
            }
        }

        if (exposInfos != null && exposInfos.Length > 0)
        {
            foreach (var item in exposInfos)
            {
                if (!string.IsNullOrEmpty(item.id) && item.obj != null)
                {
                    pd.SetReferenceValue(item.id, item.obj);
                }
            }
        }
    }
    public void ChangeInstance()
    {
        TimelineAsset timelineAsset = (TimelineAsset)director.playableAsset;

        if (timelineAsset == null)
        {
            return;
        }
        TrackAsset track = null;

        if (trackName.Length > 0)
        {
            foreach (TrackAsset t in timelineAsset.GetOutputTracks())
            {
                Debug.Log(t.name);
                if (t.name.Equals(trackName))
                {
                    track = t;
                }
            }
        }
        else
        {
            track = timelineAsset.GetOutputTrack(0);
        }
        if (track != null)
        {
            if (track.GetType() == typeof(AnimationTrack))
            {
                director.SetGenericBinding(track, targetInstance.GetComponent <Animator>());
            }
            else
            {
                director.SetGenericBinding(track, targetInstance);
            }
        }
    }
Beispiel #17
0
    // Start is called before the first frame update
    void Start()
    {
        playable    = gameObject.GetComponent <PlayableDirector>();
        light       = gameObject.GetComponent <Light>();
        bindingDict = new Dictionary <string, PlayableBinding>();
        foreach (var bind in playable.playableAsset.outputs)
        {
            bindingDict.Add(bind.streamName, bind);
        }

        // 动态绑定轨道中的节点 SetGenericBinding
//        playable.SetGenericBinding(bindingDict["LightTrack1"].sourceObject, light);
        playable.SetGenericBinding(bindingDict["Animation1"].sourceObject, sphere);


        // 动态绑定轨道中clip的节点 SetReferenceValue
        foreach (var track in ((TimelineAsset)playable.playableAsset).GetOutputTracks())
        {
//            track.muted = false;
            foreach (var clip in track.GetClips())
            {
                LightControlAsset asset = clip.asset as LightControlAsset;
                if (asset != null)
                {
                    playable.SetReferenceValue(asset.light.exposedName, light);
                }
                ControlPlayableAsset asset2 = clip.asset as ControlPlayableAsset;
                if (asset2 != null)
                {
                    playable.SetReferenceValue(asset2.sourceGameObject.exposedName, sphere);
                }
            }
        }
        playable.SetGenericBinding(bindingDict["ActivationTrack"].sourceObject, null);
//        playable.RebuildGraph();
        // 获取track信息
        TimelineAsset timelineAsset = (TimelineAsset)playable.playableAsset;
//        timelineAsset.DeleteTrack()
//        timelineAsset.A
        var count = timelineAsset.outputTrackCount;

        for (int i = 1; i < count; i++)
        {
            TrackAsset asset = timelineAsset.GetOutputTrack(i);
            var        clips = asset.GetClips();
            foreach (TimelineClip clip in clips)
            {
                var playableAsset = (PlayableAsset)clip.asset;
                var lightAsset    = playableAsset as LightControlAsset;
                if (lightAsset != null)
                {
//                    lightAsset.behaviour.OnGraphStop();
                }
//                var behaviout = playableAsset.behaviour;
            }
        }

//        var graphCount = playable.playableGraph.GetOutputCount();
//        for (int i = 0; i < graphCount; i++)
//        {
//
////            var playable1 = playable.playableGraph.GetRootPlayable(i);
//            PlayableOutput output = playable.playableGraph.GetOutput(i);
//            var p1 = output.GetSourcePlayable();
////            p1.GetInputCount();
//            Playable i1 = p1.GetInput(1);
////            playable.playableAsset
////            i1.SetInputWeight(0);
//
////            output.SetWeight();
//            var graph = playable.playableGraph;
////            graph
//            var playable2 = output.GetSourcePlayable();
//        }
        playable.Play();
    }
Beispiel #18
0
        public IEnumerator Start()
        {
            var mode    = GetParameter(0).ToLower();
            var subject = GetSubject(1, Sequencer.Speaker);
            var nowait  = string.Equals(GetParameter(2), "nowait", System.StringComparison.OrdinalIgnoreCase) ||
                          string.Equals(GetParameter(3), "nowait", System.StringComparison.OrdinalIgnoreCase);

            nostop = string.Equals(GetParameter(2), "nostop", System.StringComparison.OrdinalIgnoreCase) ||
                     string.Equals(GetParameter(3), "nostop", System.StringComparison.OrdinalIgnoreCase);
            playableDirector = (subject != null) ? subject.GetComponent <PlayableDirector>() : null;

            // If no suitable PlayableDirector was found, look for a Timeline asset in Resources:
            timelineAsset = DialogueManager.LoadAsset(GetParameter(1), typeof(TimelineAsset)) as TimelineAsset;
            if (timelineAsset != null)
            {
                playableDirector = new GameObject(GetParameter(1), typeof(PlayableDirector)).GetComponent <PlayableDirector>();
                playableDirector.playableAsset = timelineAsset;
                mustDestroyPlayableDirector    = true;
            }

            if (playableDirector == null)
            {
                if (DialogueDebug.LogWarnings)
                {
                    Debug.LogWarning("Dialogue System: Sequencer: Timeline(" + GetParameters() +
                                     "): Can't find playable director '" + GetParameter(0) + "'.");
                }
            }
            else if (playableDirector.playableAsset == null)
            {
                if (DialogueDebug.LogWarnings)
                {
                    Debug.LogWarning("Dialogue System: Sequencer: Timeline(" + GetParameters() +
                                     "): No timeline asset is assigned to the Playable Director.", playableDirector);
                }
            }
            else
            {
                var isModeValid = (mode == "play" || mode == "pause" || mode == "resume" || mode == "stop");
                if (!isModeValid)
                {
                    if (DialogueDebug.LogWarnings)
                    {
                        Debug.LogWarning("Dialogue System: Sequencer: Timeline(" + GetParameters() +
                                         "): Invalid mode '" + mode + "'. Expected 'play', 'pause', 'resume', or 'stop'.");
                    }
                }
                else
                {
                    if (DialogueDebug.LogInfo)
                    {
                        Debug.Log("Dialogue System: Sequencer: Timeline(" + GetParameters() + ")");
                    }

                    // Check for rebindings:
                    timelineAsset = playableDirector.playableAsset as TimelineAsset;
                    if (timelineAsset != null)
                    {
                        for (int i = 2; i < Parameters.Length; i++)
                        {
                            var s = GetParameter(i);
                            if (s.Contains(":"))
                            {
                                var colonPos   = s.IndexOf(":");
                                var trackIndex = Tools.StringToInt(s.Substring(0, colonPos));
                                var bindName   = s.Substring(colonPos + 1);
                                var track      = timelineAsset.GetOutputTrack(trackIndex);
                                if (track != null)
                                {
                                    playableDirector.SetGenericBinding(track, Tools.GameObjectHardFind(bindName));
                                }
                            }
                        }
                    }

                    switch (mode)
                    {
                    case "play":
                        playableDirector.Play();
                        var endTime = nowait ? 0 : DialogueTime.time + playableDirector.playableAsset.duration;
                        while (DialogueTime.time < endTime)
                        {
                            yield return(null);
                        }
                        break;

                    case "pause":
                        playableDirector.Pause();
                        nostop = true;
                        break;

                    case "resume":
                        playableDirector.Resume();
                        var resumedEndTime = nowait ? 0 : DialogueTime.time + playableDirector.playableAsset.duration - playableDirector.time;
                        while (DialogueTime.time < resumedEndTime)
                        {
                            yield return(null);
                        }
                        break;

                    case "stop":
                        playableDirector.Stop();
                        nostop = false;
                        break;

                    default:
                        isModeValid = false;
                        break;
                    }
                }
            }
            Stop();
        }
    public void BuildTimeline()
    {
        Debug.Log("Buidilng Timeline");
        TimelineAsset timelineAsset = (TimelineAsset)timeline.playableAsset;

        //TODO: make it so that it deletes all tracks and rebuilds them every each time
        for (int i = 0; i < timelineAsset.rootTrackCount; i++)
        {
            timelineAsset.DeleteTrack(timelineAsset.GetRootTrack(0));
        }
        for (int i = 0; i < timelineAsset.outputTrackCount; i++)
        {
            timelineAsset.DeleteTrack(timelineAsset.GetOutputTrack(0));
        }

        ControlTrack controlTrack = (ControlTrack)timelineAsset.CreateTrack(typeof(ControlTrack), null, "Control Track");

        clipToTime = new Dictionary <ClipSettings, double>();

        // map all timeline clips first
        for (int i = 0; i < timelineClips.Count; i++)
        {
            TimelineClip         tc  = controlTrack.CreateDefaultClip();
            ControlPlayableAsset cpa = tc.asset as ControlPlayableAsset;
            cpa.sourceGameObject.exposedName = UnityEditor.GUID.Generate().ToString();
            timeline.SetReferenceValue(cpa.sourceGameObject.exposedName, timelineClips[i].timelineTrack.gameObject);

            if (i != 0)
            {
                tc.start = tc.start + 1;
            }

            clipToTime.Add(timelineClips[i], tc.start);

            tc.duration = timelineClips[i].timelineTrack.duration;
        }

        //map remix clips
        int j = 0;

        foreach (TimelineClip tc in controlTrack.GetClips())
        {
            foreach (TriggerMapping triggerMapping in timelineClips[j].triggers)
            {
                TimeMachineTrack timeMachineTrack = (TimeMachineTrack)timelineAsset.CreateTrack(typeof(TimeMachineTrack), null, "Trigger Track");
                if (triggerMapping.type == TriggerType.CONTINUOUS)
                {
                    TimelineClip     triggerCip = timeMachineTrack.CreateDefaultClip();
                    TimeMachineAsset tma        = triggerCip.asset as TimeMachineAsset;

                    tma.action          = TimeMachineBehavior.TimeMachineAction.JumpToTime;
                    tma.condition       = TimeMachineBehavior.Condition.TriggerOff;
                    tma.timeToJumpTo    = (float)clipToTime[triggerMapping.targetTrack];
                    triggerCip.start    = tc.start;
                    triggerCip.duration = tc.duration;


                    tma.trigger.exposedName = UnityEditor.GUID.Generate().ToString();
                    // tma.timeToJumpTo = triggerMapping.timeToJumpTo;
                    timeline.SetReferenceValue(tma.trigger.exposedName, triggerMapping.trigger);
                }
                else
                {
                    TimelineClip     triggerCip = timeMachineTrack.CreateDefaultClip();
                    TimeMachineAsset tma        = triggerCip.asset as TimeMachineAsset;

                    tma.action          = TimeMachineBehavior.TimeMachineAction.JumpToTime;
                    tma.condition       = TimeMachineBehavior.Condition.TriggerOff;
                    tma.timeToJumpTo    = (float)clipToTime[triggerMapping.targetTrack];
                    triggerCip.start    = tc.end;
                    triggerCip.duration = 1;

                    tma.trigger.exposedName = UnityEditor.GUID.Generate().ToString();
                    timeline.SetReferenceValue(tma.trigger.exposedName, triggerMapping.trigger);
                }
            }
            j++;
        }
        Debug.Log("Finished");
    }
Beispiel #20
0
        /**
         * <summary>Deserialises a string of data, and restores the GameObject to its previous state.</summary>
         * <param name = "stringData">The data, serialised as a string</param>
         * <param name = "restoringSaveFile">True if the game is currently loading a saved game file, as opposed to just switching scene</param>
         */
        public override void LoadData(string stringData, bool restoringSaveFile = false)
        {
            TimelineData data = Serializer.LoadScriptData <TimelineData> (stringData);

            if (data == null)
            {
                return;
            }
            SavePrevented = data.savePrevented; if (savePrevented)
            {
                return;
            }

            PlayableDirector director = GetComponent <PlayableDirector>();

            if (director != null && director.playableAsset != null)
            {
                TimelineAsset timeline = (TimelineAsset)director.playableAsset;

                if (timeline != null)
                {
                    if (saveTimelineAsset)
                    {
                        TimelineAsset _timeline = AssetLoader.RetrieveAsset(timeline, data.timelineAssetID);
                        if (_timeline != null)
                        {
                            director.playableAsset = _timeline;
                            timeline = _timeline;
                        }
                    }

                    if (saveBindings && !string.IsNullOrEmpty(data.trackObjectData))
                    {
                        string[] bindingIDs = data.trackObjectData.Split(","[0]);

                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            int bindingID = 0;
                            if (int.TryParse(bindingIDs[i], out bindingID))
                            {
                                if (bindingID != 0)
                                {
                                    var track = timeline.GetOutputTrack(i);
                                    if (track != null)
                                    {
                                        ConstantID savedObject = Serializer.returnComponent <ConstantID> (bindingID, gameObject);
                                        if (savedObject != null)
                                        {
                                            director.SetGenericBinding(track, savedObject.gameObject);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            director.time = data.currentTime;
            if (data.isPlaying)
            {
                director.Play();
            }
            else
            {
                director.Stop();
            }
        }
        private void PrepareDirector()
        {
            if (newTimeline != null)
            {
                if (director.playableAsset != null && director.playableAsset is TimelineAsset)
                {
                    TimelineAsset oldTimeline      = (TimelineAsset)director.playableAsset;
                    GameObject[]  transferBindings = new GameObject[oldTimeline.outputTrackCount];
                    for (int i = 0; i < transferBindings.Length; i++)
                    {
                        TrackAsset trackAsset = oldTimeline.GetOutputTrack(i);
                        transferBindings[i] = director.GetGenericBinding(trackAsset) as GameObject;
                    }

                    director.playableAsset = newTimeline;

                    for (int i = 0; i < transferBindings.Length; i++)
                    {
                        if (transferBindings[i] != null)
                        {
                            var track = newTimeline.GetOutputTrack(i);
                            if (track != null)
                            {
                                director.SetGenericBinding(track, transferBindings[i].gameObject);
                            }
                        }
                    }
                }
                else
                {
                    director.playableAsset = newTimeline;
                }
            }

            TimelineAsset timelineAsset = director.playableAsset as TimelineAsset;

            if (timelineAsset != null)
            {
                for (int i = 0; i < timelineAsset.outputTrackCount; i++)
                {
                    TrackAsset trackAsset = timelineAsset.GetOutputTrack(i);

                    if (updateBindings && newBindings != null && i < newBindings.Length && newBindings[i] != null)
                    {
                        if (trackAsset != null && newBindings[i].gameObject != null)
                        {
                            director.SetGenericBinding(trackAsset, newBindings[i].gameObject);
                        }
                    }

                    GameObject bindingObject = director.GetGenericBinding(trackAsset) as GameObject;
                    if (bindingObject == null)
                    {
                        Animator bindingAnimator = director.GetGenericBinding(trackAsset) as Animator;
                        if (bindingAnimator != null)
                        {
                            bindingObject = bindingAnimator.gameObject;
                        }
                    }

                    if (bindingObject != null)
                    {
                        Char bindingObjectChar = bindingObject.GetComponent <Char>();
                        if (bindingObjectChar != null)
                        {
                            bindingObjectChar.OnEnterTimeline(director, i);
                        }
                    }
                }
            }
        }
Beispiel #22
0
        private IEnumerator Proceed()
        {
            if (playableDirector == null)
            {
                if (DialogueDebug.LogWarnings)
                {
                    Debug.LogWarning("Dialogue System: Sequencer: Timeline(" + GetParameters() +
                                     "): Can't find playable director '" + GetParameter(1) + "'.");
                }
            }
            else if (playableDirector.playableAsset == null)
            {
                if (DialogueDebug.LogWarnings)
                {
                    Debug.LogWarning("Dialogue System: Sequencer: Timeline(" + GetParameters() +
                                     "): No timeline asset is assigned to the Playable Director.", playableDirector);
                }
            }
            else
            {
                var isModeValid = (mode == "play" || mode == "pause" || mode == "resume" || mode == "stop" || mode == "speed");
                if (!isModeValid)
                {
                    if (DialogueDebug.LogWarnings)
                    {
                        Debug.LogWarning("Dialogue System: Sequencer: Timeline(" + GetParameters() +
                                         "): Invalid mode '" + mode + "'. Expected 'play', 'pause', 'resume', or 'stop'.");
                    }
                }
                else
                {
                    if (DialogueDebug.LogInfo)
                    {
                        Debug.Log("Dialogue System: Sequencer: Timeline(" + GetParameters() + ")");
                    }

                    // Check for rebindings:
                    timelineAsset = playableDirector.playableAsset as TimelineAsset;
                    if (timelineAsset != null)
                    {
                        for (int i = 2; i < Parameters.Length; i++)
                        {
                            var s = GetParameter(i);
                            if (s.Contains(":"))
                            {
                                var colonPos   = s.IndexOf(":");
                                var trackIndex = Tools.StringToInt(s.Substring(0, colonPos)) + 1;
                                var bindName   = s.Substring(colonPos + 1);
                                var track      = timelineAsset.GetOutputTrack(trackIndex);
                                if (track != null)
                                {
                                    playableDirector.SetGenericBinding(track, Tools.GameObjectHardFind(bindName));
                                }
                            }
                        }
                    }

                    switch (mode)
                    {
                    case "play":
                        playableDirector.Play();
                        var endTime = nowait ? 0 : DialogueTime.time + playableDirector.playableAsset.duration;
                        while (DialogueTime.time < endTime)
                        {
                            yield return(null);
                        }
                        break;

                    case "pause":
                        playableDirector.Pause();
                        nostop = true;
                        break;

                    case "resume":
                        playableDirector.Resume();
                        var resumedEndTime = nowait ? 0 : DialogueTime.time + playableDirector.playableAsset.duration - playableDirector.time;
                        while (DialogueTime.time < resumedEndTime)
                        {
                            yield return(null);
                        }
                        break;

                    case "stop":
                        playableDirector.Stop();
                        nostop = false;
                        break;

                    case "speed":
                        playableDirector.playableGraph.GetRootPlayable(0).SetSpeed(GetParameterAsFloat(2));
                        nostop = true;
                        break;

                    default:
                        isModeValid = false;
                        break;
                    }
                }
            }
            Stop();
        }
Beispiel #23
0
        protected void PrepareDirector()
        {
                        #if !ACIgnoreTimeline
            if (newTimeline != null)
            {
                if (runtimeDirector.playableAsset != null && runtimeDirector.playableAsset is TimelineAsset)
                {
                    TimelineAsset oldTimeline      = (TimelineAsset)runtimeDirector.playableAsset;
                    GameObject[]  transferBindings = new GameObject[oldTimeline.outputTrackCount];
                    for (int i = 0; i < transferBindings.Length; i++)
                    {
                        TrackAsset trackAsset = oldTimeline.GetOutputTrack(i);
                        transferBindings[i] = runtimeDirector.GetGenericBinding(trackAsset) as GameObject;
                    }

                    runtimeDirector.playableAsset = newTimeline;

                    for (int i = 0; i < transferBindings.Length; i++)
                    {
                        if (transferBindings[i] != null)
                        {
                            var track = newTimeline.GetOutputTrack(i);
                            if (track != null)
                            {
                                runtimeDirector.SetGenericBinding(track, transferBindings[i].gameObject);
                            }
                        }
                    }
                }
                else
                {
                    runtimeDirector.playableAsset = newTimeline;
                }
            }

            TimelineAsset timelineAsset = runtimeDirector.playableAsset as TimelineAsset;
            if (timelineAsset != null)
            {
                for (int i = 0; i < timelineAsset.outputTrackCount; i++)
                {
                    TrackAsset trackAsset = timelineAsset.GetOutputTrack(i);

                    if (updateBindings && newBindings != null && i < newBindings.Length && newBindings[i] != null)
                    {
                        if (trackAsset != null && newBindings[i].gameObject != null)
                        {
                            SpeechTrack speechTrackAsset = trackAsset as SpeechTrack;
                            if (speechTrackAsset != null)
                            {
                                speechTrackAsset.isPlayerLine  = newBindings[i].isPlayer;
                                speechTrackAsset.playerID      = newBindings[i].playerID;
                                speechTrackAsset.speakerObject = newBindings[i].gameObject;
                            }
                            else
                            {
                                runtimeDirector.SetGenericBinding(trackAsset, newBindings[i].gameObject);
                            }
                        }
                    }

                    GameObject bindingObject = runtimeDirector.GetGenericBinding(trackAsset) as GameObject;
                    if (bindingObject == null)
                    {
                        Animator bindingAnimator = runtimeDirector.GetGenericBinding(trackAsset) as Animator;
                        if (bindingAnimator != null)
                        {
                            bindingObject = bindingAnimator.gameObject;
                        }
                    }

                    if (bindingObject != null)
                    {
                        Char bindingObjectChar = bindingObject.GetComponent <Char>();
                        if (bindingObjectChar != null)
                        {
                            bindingObjectChar.OnEnterTimeline(runtimeDirector, i);
                        }
                    }
                }
            }
                        #endif
        }