From 1587c56bb167be663c550b73b4cccf5cc2e95d83 Mon Sep 17 00:00:00 2001 From: jasonm-unity Date: Mon, 13 Mar 2017 18:04:24 -0400 Subject: [PATCH] Added support for Timeline --- .../Editor/AlembicImportTasker.cs | 3 +- .../Scripts/AlembicSettings.cs | 5 +- .../AlembicImporter/Scripts/AlembicStream.cs | 4 +- .../UTJ/AlembicImporter/Scripts/Timeline.meta | 9 +++ .../Scripts/Timeline/AlembicShotAsset.cs | 66 +++++++++++++++++++ .../Scripts/Timeline/AlembicShotAsset.cs.meta | 12 ++++ .../Timeline/AlembicShotPlayable.cs.meta | 12 ++++ .../Scripts/Timeline/AlembicTrack.cs | 19 ++++++ .../Scripts/Timeline/AlembicTrack.cs.meta | 12 ++++ 9 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline.meta create mode 100644 AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs create mode 100644 AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs.meta create mode 100644 AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotPlayable.cs.meta create mode 100644 AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs create mode 100644 AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs.meta diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Editor/AlembicImportTasker.cs b/AlembicImporter/Assets/UTJ/AlembicImporter/Editor/AlembicImportTasker.cs index 40c601442..9b3d837cf 100644 --- a/AlembicImporter/Assets/UTJ/AlembicImporter/Editor/AlembicImportTasker.cs +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Editor/AlembicImportTasker.cs @@ -29,7 +29,8 @@ internal static GameObject Import(AlembicImportMode importMode, AlembicImportSet dynStream.m_PlaybackSettings = new AlembicPlaybackSettings() { m_startTime = abcStream.AbcStartTime, - m_endTime = abcStream.AbcEndTime + m_endTime = abcStream.AbcEndTime, + m_duration = abcStream.AbcEndTime }; dynStream.m_StreamDescriptor = streamDescr; dynStream.enabled = true; diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicSettings.cs b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicSettings.cs index 0c8e16aba..2226ee852 100644 --- a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicSettings.cs +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicSettings.cs @@ -39,7 +39,6 @@ public class AlembicImportSettings } - [System.Serializable] public class AlembicPlaybackSettings { @@ -50,6 +49,8 @@ public enum CycleType Reverse, Bounce }; + + [HideInInspector][SerializeField] public float m_duration = 0.0f; [Tooltip("Specifies the lower time bound to use in the stream")] [SerializeField] public float m_startTime = 0.0f; @@ -69,6 +70,8 @@ public enum CycleType [Tooltip("Controls how playback cycles throught the stream.")] [SerializeField] public CycleType m_cycle = CycleType.Hold; + [SerializeField] public float m_Time = 0f; + [SerializeField] public bool m_OverrideTime = false; } } diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicStream.cs b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicStream.cs index f729e8917..b3d726937 100644 --- a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicStream.cs +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/AlembicStream.cs @@ -353,13 +353,13 @@ protected override void Dispose(bool disposing) public void ProcessUpdateEvent() { - if (Application.isPlaying) + if (Application.isPlaying && !m_playbackSettings.m_OverrideTime) { AbcUpdateBegin(Time.time); } else { - AbcUpdateBegin(m_time); + AbcUpdateBegin(m_playbackSettings.m_Time); } } diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline.meta b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline.meta new file mode 100644 index 000000000..9d81f97c5 --- /dev/null +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c08654cfc1b78574a8f3c0305563dbb4 +folderAsset: yes +timeCreated: 1489425268 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs new file mode 100644 index 000000000..2b0f76776 --- /dev/null +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs @@ -0,0 +1,66 @@ +#if ENABLE_TIMELINE + +using System; +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +namespace UTJ.Alembic +{ + public class AlembicShotAsset : PlayableAsset, ITimelineClipAsset + { + AlembicStreamPlayer m_Stream; + + [Tooltip("Alambic asset to play")] + public ExposedReference m_StreamPlayer; + + [Tooltip("Amount of time to clip off the start of the alembic asset from playback.")] + [SerializeField] public float m_StartOffset; + + [Tooltip("Amount of time to clip off the end of the alembic asset from playback.")] + [SerializeField] public float m_EndOffset; + + [Tooltip("Use to compress/dilute time play back.")] + [SerializeField] public float m_TimeScale = 1f; + + [Tooltip("Controls how playback cycles throught the stream.")] + [SerializeField] public AlembicPlaybackSettings.CycleType m_Cycle = AlembicPlaybackSettings.CycleType.Hold; + + [Tooltip("Portion, in seconds, of the alembic stream used by the shot.")] + [ReadOnly] public float m_AlembicLength = 0; + + public ClipCaps clipCaps { get { return ClipCaps.None; } } + + public override PlayableHandle CreatePlayable(PlayableGraph graph, GameObject owner) + { + var handle = graph.CreateScriptPlayable(); + + var playable = handle.GetObject(); + m_Stream = m_StreamPlayer.Resolve(graph.resolver); + playable.streamPlayer = m_Stream; + playable.m_StartTimeOffset = m_StartOffset; + playable.m_EndTimeClipOff = m_EndOffset; + playable.m_TimeScale = m_TimeScale; + playable.m_Cycle = m_Cycle; + return handle; + } + + public override double duration + { + get + { + var t = m_Stream == null ? 0 : m_Stream.m_PlaybackSettings.m_duration; + m_AlembicLength = t; + if (m_Cycle == AlembicPlaybackSettings.CycleType.Hold || m_Cycle == AlembicPlaybackSettings.CycleType.Reverse) + return (t - m_StartOffset - m_EndOffset) * m_TimeScale; + else + { + return base.duration; + } + } + } + + } +} + +#endif \ No newline at end of file diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs.meta b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs.meta new file mode 100644 index 000000000..ac3ca2006 --- /dev/null +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 44d84dc3cdf9d044c9bd290c18ab5454 +timeCreated: 1489425277 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotPlayable.cs.meta b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotPlayable.cs.meta new file mode 100644 index 000000000..6d845c9a2 --- /dev/null +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicShotPlayable.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ea02c61aff236894d866d003bc9c6475 +timeCreated: 1489425277 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs new file mode 100644 index 000000000..7dd0b9e4e --- /dev/null +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs @@ -0,0 +1,19 @@ +#if ENABLE_TIMELINE +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +namespace UTJ.Alembic +{ + [System.Serializable] + [TrackClipType(typeof(AlembicShotAsset))] + [TrackMediaType(TimelineAsset.MediaType.Script)] + [TrackColor(0.53f, 0.0f, 0.08f)] + public class AlembicTrack : TrackAsset + { + } +} + +#endif diff --git a/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs.meta b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs.meta new file mode 100644 index 000000000..6992c9bf6 --- /dev/null +++ b/AlembicImporter/Assets/UTJ/AlembicImporter/Scripts/Timeline/AlembicTrack.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f669ed87322f9554d9dff5c29f48f549 +timeCreated: 1489425277 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: