92 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using UnityEngine.Serialization;
 | |
| 
 | |
| namespace UnityEngine.Timeline
 | |
| {
 | |
|     partial class TrackAsset : ISerializationCallbackReceiver
 | |
|     {
 | |
|         internal enum Versions
 | |
|         {
 | |
|             Initial = 0,
 | |
|             RotationAsEuler = 1,
 | |
|             RootMotionUpgrade = 2,
 | |
|             AnimatedTrackProperties = 3
 | |
|         }
 | |
| 
 | |
|         const int k_LatestVersion = (int)Versions.AnimatedTrackProperties;
 | |
| 
 | |
|         [SerializeField, HideInInspector] int m_Version;
 | |
| 
 | |
|         [Obsolete("Please use m_InfiniteClip (on AnimationTrack) instead.", false)]
 | |
|         [SerializeField, HideInInspector, FormerlySerializedAs("m_animClip")]
 | |
|         internal AnimationClip m_AnimClip;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called before a track is serialized.
 | |
|         /// </summary>
 | |
|         protected virtual void OnBeforeTrackSerialize() { }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called after a track has been deserialized.
 | |
|         /// </summary>
 | |
|         protected virtual void OnAfterTrackDeserialize() { }
 | |
| 
 | |
|         internal virtual void OnUpgradeFromVersion(int oldVersion) { }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called before Unity serializes this object.
 | |
|         /// </summary>
 | |
|         void ISerializationCallbackReceiver.OnBeforeSerialize()
 | |
|         {
 | |
|             m_Version = k_LatestVersion;
 | |
| 
 | |
|             //make sure children are correctly parented
 | |
|             if (m_Children != null)
 | |
|             {
 | |
|                 for (var i = m_Children.Count - 1; i >= 0; i--)
 | |
|                 {
 | |
|                     var asset = m_Children[i] as TrackAsset;
 | |
|                     if (asset != null && asset.parent != this)
 | |
|                         asset.parent = this;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             OnBeforeTrackSerialize();
 | |
| 
 | |
|             this.ComputeBlendsFromOverlaps(); // perform after virtual method in case overrides update clips
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Called after Unity deserializes this object.
 | |
|         /// </summary>
 | |
|         void ISerializationCallbackReceiver.OnAfterDeserialize()
 | |
|         {
 | |
|             // Clear the clip cache when a deserialize is performed, or
 | |
|             // we can get out of sync when performing Undo
 | |
|             m_ClipsCache = null;
 | |
|             Invalidate();
 | |
| 
 | |
|             if (m_Version < k_LatestVersion)
 | |
|             {
 | |
|                 UpgradeToLatestVersion(); //upgrade TrackAsset
 | |
|                 OnUpgradeFromVersion(m_Version); //upgrade derived classes
 | |
|             }
 | |
| 
 | |
|             foreach (var marker in GetMarkers())
 | |
|             {
 | |
|                 marker.Initialize(this);
 | |
|             }
 | |
| 
 | |
|             OnAfterTrackDeserialize();
 | |
|         }
 | |
| 
 | |
|         //fields that are used for upgrading should be put here, ideally as read-only
 | |
|         void UpgradeToLatestVersion()
 | |
|         { }
 | |
| 
 | |
|         //upgrade code should go into this class
 | |
|         static class TrackAssetUpgrade
 | |
|         { }
 | |
|     }
 | |
| }
 |