Playable CompileTrackPlayable(PlayableGraph graph, TrackAsset track, GameObject go, IntervalTree <RuntimeElement> tree, AppliedOffsetMode mode) { var mixer = AnimationMixerPlayable.Create(graph, track.clips.Length); for (int i = 0; i < track.clips.Length; i++) { var c = track.clips[i]; var asset = c.asset as PlayableAsset; if (asset == null) { continue; } var animationAsset = asset as AnimationPlayableAsset; if (animationAsset != null) { animationAsset.appliedOffsetMode = mode; } var source = asset.CreatePlayable(graph, go); if (source.IsValid()) { var clip = new RuntimeClip(c, source, mixer); tree.Add(clip); graph.Connect(source, 0, mixer, i); mixer.SetInputWeight(i, 0.0f); } } return(ApplyTrackOffset(graph, mixer, go, mode)); }
Playable CreateInfiniteTrackPlayable(PlayableGraph graph, GameObject go, IntervalTree <RuntimeElement> tree, AppliedOffsetMode mode) { if (m_InfiniteClip == null) { return(Playable.Null); } var mixer = AnimationMixerPlayable.Create(graph, 1); // In infinite mode, we always force the loop mode of the clip off because the clip keys are offset in infinite mode // which causes loop to behave different. // The inline curve editor never shows loops in infinite mode. var playable = AnimationPlayableAsset.CreatePlayable(graph, m_InfiniteClip, m_InfiniteClipOffsetPosition, m_InfiniteClipOffsetEulerAngles, false, mode, infiniteClipApplyFootIK, AnimationPlayableAsset.LoopMode.Off); if (playable.IsValid()) { tree.Add(new InfiniteRuntimeClip(playable)); graph.Connect(playable, 0, mixer, 0); mixer.SetInputWeight(0, 1.0f); } if (!AnimatesRootTransform()) { return(mixer); } var rootTrack = isSubTrack ? (AnimationTrack)parent : this; return(rootTrack.ApplyTrackOffset(graph, mixer, go, mode)); }
internal virtual Playable OnCreateClipPlayableGraph(PlayableGraph graph, GameObject go, IntervalTree <RuntimeElement> tree) { if (tree == null) { throw new ArgumentException("IntervalTree argument cannot be null", "tree"); } if (go == null) { throw new ArgumentException("GameObject argument cannot be null", "go"); } var blend = CreateTrackMixer(graph, go, clips.Length); for (var c = 0; c < clips.Length; c++) { var source = CreatePlayable(graph, go, clips[c]); if (source.IsValid()) { source.SetDuration(clips[c].duration); var clip = new RuntimeClip(clips[c], source, blend); tree.Add(clip); graph.Connect(source, 0, blend, c); blend.SetInputWeight(c, 0.0f); } } return(blend); }
internal virtual Playable OnCreatePlayableGraph(PlayableGraph graph, GameObject go, IntervalTree <RuntimeElement> tree) { if (tree == null) { throw new ArgumentException("IntervalTree argument cannot be null", "tree"); } if (go == null) { throw new ArgumentException("GameObject argument cannot be null", "go"); } Playable playable = this.CreateTrackMixer(graph, go, this.clips.Length); for (int i = 0; i < this.clips.Length; i++) { Playable playable2 = this.CreatePlayable(graph, go, this.clips[i]); if (playable2.IsValid <Playable>()) { playable2.SetDuration(this.clips[i].duration); RuntimeClip item = new RuntimeClip(this.clips[i], playable2, playable); tree.Add(item); graph.Connect <Playable, Playable>(playable2, 0, playable, i); playable.SetInputWeight(i, 0f); } } return(playable); }
internal override Playable OnCreatePlayableGraph(PlayableGraph graph, GameObject go, IntervalTree <RuntimeElement> tree) { AudioMixerPlayable audioMixerPlayable = AudioMixerPlayable.Create(graph, base.clips.Length, false); for (int i = 0; i < base.clips.Length; i++) { TimelineClip timelineClip = base.clips[i]; PlayableAsset playableAsset = timelineClip.asset as PlayableAsset; if (!(playableAsset == null)) { float num = 0.1f; AudioPlayableAsset audioPlayableAsset = timelineClip.asset as AudioPlayableAsset; if (audioPlayableAsset != null) { num = audioPlayableAsset.bufferingTime; } Playable playable = playableAsset.CreatePlayable(graph, go); if (playable.IsValid <Playable>()) { tree.Add(new ScheduleRuntimeClip(timelineClip, playable, audioMixerPlayable, (double)num, 0.1)); graph.Connect <Playable, AudioMixerPlayable>(playable, 0, audioMixerPlayable, i); playable.SetSpeed(timelineClip.timeScale); playable.SetDuration(timelineClip.extrapolatedDuration); audioMixerPlayable.SetInputWeight(playable, 1f); } } } return(audioMixerPlayable); }
internal Playable CompileTrackPlayable(PlayableGraph graph, TrackAsset track, GameObject go, IntervalTree <RuntimeElement> tree) { AnimationMixerPlayable animationMixerPlayable = AnimationMixerPlayable.Create(graph, track.clips.Length, false); for (int i = 0; i < track.clips.Length; i++) { TimelineClip timelineClip = track.clips[i]; PlayableAsset playableAsset = timelineClip.asset as PlayableAsset; if (!(playableAsset == null)) { if (timelineClip.recordable) { AnimationPlayableAsset animationPlayableAsset = playableAsset as AnimationPlayableAsset; if (animationPlayableAsset != null) { animationPlayableAsset.removeStartOffset = !timelineClip.recordable; } } Playable playable = playableAsset.CreatePlayable(graph, go); if (playable.IsValid <Playable>()) { RuntimeClip item = new RuntimeClip(timelineClip, playable, animationMixerPlayable); tree.Add(item); graph.Connect <Playable, AnimationMixerPlayable>(playable, 0, animationMixerPlayable, i); animationMixerPlayable.SetInputWeight(i, 0f); } } } return(this.ApplyTrackOffset(graph, animationMixerPlayable)); }
internal override Playable CompileClips(PlayableGraph graph, GameObject go, IList <TimelineClip> timelineClips, IntervalTree <RuntimeElement> tree) { var clipBlender = AudioMixerPlayable.Create(graph, timelineClips.Count); #if UNITY_EDITOR clipBlender.GetHandle().SetScriptInstance(m_TrackProperties.Clone()); m_LiveMixerPlayable = clipBlender; #else if (hasCurves) { clipBlender.GetHandle().SetScriptInstance(m_TrackProperties.Clone()); } #endif for (int i = 0; i < timelineClips.Count; i++) { var c = timelineClips[i]; var asset = c.asset as PlayableAsset; if (asset == null) { continue; } var buffer = 0.1f; var audioAsset = c.asset as AudioPlayableAsset; if (audioAsset != null) { buffer = audioAsset.bufferingTime; } var source = asset.CreatePlayable(graph, go); if (!source.IsValid()) { continue; } if (source.IsPlayableOfType <AudioClipPlayable>()) { // Enforce initial values on all clips var audioClipPlayable = (AudioClipPlayable)source; var audioClipProperties = audioClipPlayable.GetHandle().GetObject <AudioClipProperties>(); audioClipPlayable.SetVolume(Mathf.Clamp01(m_TrackProperties.volume * audioClipProperties.volume)); audioClipPlayable.SetStereoPan(Mathf.Clamp(m_TrackProperties.stereoPan, -1.0f, 1.0f)); audioClipPlayable.SetSpatialBlend(Mathf.Clamp01(m_TrackProperties.spatialBlend)); } tree.Add(new ScheduleRuntimeClip(c, source, clipBlender, buffer)); graph.Connect(source, 0, clipBlender, i); source.SetSpeed(c.timeScale); source.SetDuration(c.extrapolatedDuration); clipBlender.SetInputWeight(source, 1.0f); } ConfigureTrackAnimation(tree, go, clipBlender); return(clipBlender); }
internal void ConfigureTrackAnimation(IntervalTree<RuntimeElement> tree, GameObject go, Playable blend) { if (!hasCurves) return; blend.SetAnimatedProperties(m_Curves); tree.Add(new InfiniteRuntimeClip(blend)); if (OnTrackAnimationPlayableCreate != null) OnTrackAnimationPlayableCreate.Invoke(this, go, blend); }
internal virtual Playable CompileClips(PlayableGraph graph, GameObject go, IList<TimelineClip> timelineClips, IntervalTree<RuntimeElement> tree) { var blend = CreateTrackMixer(graph, go, timelineClips.Count); for (var c = 0; c < timelineClips.Count; c++) { var source = CreatePlayable(graph, go, timelineClips[c]); if (source.IsValid()) { source.SetDuration(timelineClips[c].duration); var clip = new RuntimeClip(timelineClips[c], source, blend); tree.Add(clip); graph.Connect(source, 0, blend, c); blend.SetInputWeight(c, 0.0f); } } ConfigureTrackAnimation(tree, go, blend); return blend; }
Playable CreateInfiniteTrackPlayable(PlayableGraph graph, GameObject go, IntervalTree <RuntimeElement> tree, AppliedOffsetMode mode) { if (m_InfiniteClip == null) { return(Playable.Null); } var mixer = AnimationMixerPlayable.Create(graph, 1); var playable = AnimationPlayableAsset.CreatePlayable(graph, m_InfiniteClip, m_InfiniteClipOffsetPosition, m_InfiniteClipOffsetEulerAngles, false, mode, infiniteClipApplyFootIK); if (playable.IsValid()) { tree.Add(new InfiniteRuntimeClip(playable)); graph.Connect(playable, 0, mixer, 0); mixer.SetInputWeight(0, 1.0f); } return(ApplyTrackOffset(graph, mixer, go, mode)); }
private Playable CreateInfiniteTrackPlayable(PlayableGraph graph, GameObject go, IntervalTree <RuntimeElement> tree) { Playable result; if (base.animClip == null) { result = Playable.Null; } else { if (this.m_FakeAnimClip == null || this.m_AnimationPlayableAsset == null) { this.m_AnimationPlayableAsset = ScriptableObject.CreateInstance <AnimationPlayableAsset>(); this.m_FakeAnimClip = new TimelineClip(null) { asset = this.m_AnimationPlayableAsset, displayName = "Animation Clip", timeScale = 1.0, start = 0.0, postExtrapolationMode = TimelineClip.ClipExtrapolation.Hold, preExtrapolationMode = TimelineClip.ClipExtrapolation.Hold }; this.m_FakeAnimClip.SetPostExtrapolationTime(TimelineClip.kMaxTimeValue); } this.m_AnimationPlayableAsset.clip = base.animClip; this.m_AnimationPlayableAsset.position = this.m_OpenClipOffsetPosition; this.m_AnimationPlayableAsset.rotation = this.m_OpenClipOffsetRotation; this.m_AnimationPlayableAsset.removeStartOffset = false; this.m_FakeAnimClip.start = 0.0; this.m_FakeAnimClip.SetPreExtrapolationTime(0.0); this.m_FakeAnimClip.duration = (double)base.animClip.length; AnimationMixerPlayable animationMixerPlayable = AnimationMixerPlayable.Create(graph, 1, false); Playable playable = this.m_AnimationPlayableAsset.CreatePlayable(graph, go); if (playable.IsValid <Playable>()) { tree.Add(new RuntimeClip(this.m_FakeAnimClip, playable, animationMixerPlayable)); graph.Connect <Playable, AnimationMixerPlayable>(playable, 0, animationMixerPlayable, 0); animationMixerPlayable.SetInputWeight(0, 1f); } result = this.ApplyTrackOffset(graph, animationMixerPlayable); } return(result); }
void InitializeClips(PlayableGraph graph, GameObject go, IntervalTree <RuntimeElement> tree, AudioMixerPlayable clipBlender) { for (int i = 0; i < clips.Length; i++) { var c = clips[i]; var asset = c.asset as PlayableAsset; if (asset == null) { continue; } var buffer = 0.1f; var audioAsset = c.asset as AudioPlayableAsset; if (audioAsset != null) { buffer = audioAsset.bufferingTime; } var source = asset.CreatePlayable(graph, go); if (!source.IsValid()) { continue; } if (source.IsPlayableOfType <AudioClipPlayable>()) { // Enforce initial values on all clips var audioClipPlayable = (AudioClipPlayable)source; var audioClipProperties = audioClipPlayable.GetHandle().GetObject <AudioClipProperties>(); audioClipPlayable.SetVolume(Mathf.Clamp01(m_TrackProperties.volume * audioClipProperties.volume)); audioClipPlayable.SetStereoPan(Mathf.Clamp(m_TrackProperties.stereoPan, -1.0f, 1.0f)); audioClipPlayable.SetSpatialBlend(Mathf.Clamp01(m_TrackProperties.spatialBlend)); } tree.Add(new ScheduleRuntimeClip(c, source, clipBlender, buffer)); graph.Connect(source, 0, clipBlender, i); source.SetSpeed(c.timeScale); source.SetDuration(c.extrapolatedDuration); clipBlender.SetInputWeight(source, 1.0f); } }