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); } } }
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)); }
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)); }
private void NuclearFire() { scripts.SetScript(3); player.ChangeMoveRotaState(false); director.Play(nuclear); director.SetGenericBinding(nuclear.GetOutputTrack(0), Camera.main.gameObject); Invoke("gameover", 2.5f); }
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(); }
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); } } } } } }
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]); } } }
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 }
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); } } }
// 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(); }
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"); }
/** * <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); } } } } }
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(); }
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 }