Unity开发笔记-Unity2019使用AssetDatabase.CreateAsset创建TimelineAsset保存不正常的问题

问题#

当通过AssetDatabase创建TimelineAsset时,Timeline上的Track都丢失了

下面的代码TimelineAsset不会被正确的创建出来:

Copy
`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

上面的代码调换顺序之后如下:

Copy
` 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();`
posted @   jeoyao  阅读(2040)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示
目录