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();`
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)