問題
當通過AssetDatabase創建TimelineAsset時,Timeline上的Track都丟失了
下面的代碼TimelineAsset不會被正確的創建出來:
`TimelineAsset timeline = ScriptableObject.CreateInstance<TimelineAsset>();
timeline.name = "test_timeline";
if (!Directory.Exists(TIMELINE_SAVE_PATH))
{
Directory.CreateDirectory(TIMELINE_SAVE_PATH);
}
string assetPath =TIMELINE_SAVE_PATH+timeline.name+".playable";
timeline.CreateTrack<AnimationTrack>();
timeline.CreateTrack<AnimationTrack>();
AssetDatabase.CreateAsset(timeline,assetPath);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();`
雖然生成完畢,點擊查看timeline沒有什么問題
但是
運行一下Unity,然后再查看timeline,會變成這樣
另外會有報錯提示:
MissingReferenceException: The object of type 'AnimationTrack' has been destroyed but you are still trying to access it.
我們使用文本編輯器打開這個timeline文件,發現文件確實沒有被正確創建
原因:
創建track之前,timline需要已經存在於assetdatabase中
否則track信息會丟失,報錯
解決方法:
1.先createAsset
2.再創建timeline上的track
需要先CreateAsset一個空的TimelineAsset
上面的代碼調換順序之后如下:
`
TimelineAsset timeline = ScriptableObject.CreateInstance<TimelineAsset>();
timeline.name = "test_timeline";
if (!Directory.Exists(TIMELINE_SAVE_PATH))
{
Directory.CreateDirectory(TIMELINE_SAVE_PATH);
}
string assetPath =TIMELINE_SAVE_PATH+timeline.name+".playable";
AssetDatabase.CreateAsset(timeline,assetPath); //先將timeline保存到assetdatabase中
AnimationTrack track = timeline.CreateTrack<AnimationTrack>(); //再創建track
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();`