Unity開發筆記-Unity2019使用AssetDatabase.CreateAsset創建TimelineAsset保存不正常的問題


問題

當通過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();`


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM