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