首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不调用AssetDatabase.LoadAssetAtPath的情况下将变量设置为磁盘上的实例

在不调用AssetDatabase.LoadAssetAtPath的情况下将变量设置为磁盘上的实例
EN

Stack Overflow用户
提问于 2013-08-06 05:04:42
回答 1查看 522关注 0票数 1

假设我有两个类,它们都继承自UnityEngine.ScriptableObject:

-CutScene

-AnimationCollection

CutScene类保存对话树,camera cuts,有一个公共的AnimationCollection字段。Animation Collection保存给定剪切场景中使用的动画的实际动画数据。

在我们的流水线中,CutScene实例是由导出过程生成的,这会将它们保存为unity .asset文件。

动画师使用unity编辑器工具将动画放入AnimationCollection,然后将其保存为unity .asset文件。然后,使用unity编辑器,动画师将AnimationCollection的资源文件拖动到使用它的CutScene的AnimationCollection字段中。

更改并导出CutScene时,导出代码将用新文件覆盖该CutScene的现有.asset文件。我们确实希望保留对动画设计者设置的AnimationCollection的引用。目前,这是通过如下代码完成的:

代码语言:javascript
复制
cutScene.AnimationCollection = AssetDatabase.LoadAssetAtPath(pathToAnimCollection, typeof(AnimationCollection)) as AnimationCollection;

问题是加载AnimationCollection可能需要很长时间(对于一些较大的剪辑场景,需要12秒)。如果我知道AnimationCollection的路径,我可以以某种方式设置CutScene的AnimationCollection字段,而不必实际将AnimationCollection加载到内存中吗?AssetDatabase.AssetPathToGUID看起来很有前途,但我不确定我能用GUID字符串做什么?

EN

回答 1

Stack Overflow用户

发布于 2014-07-30 16:55:47

在C#中,当您设置字段的值时,将发生以下两种情况之一。

如果它是引用类型(即类),则会在内存中存储对它的引用。这是一个很小的数字,它指向内存中加载该项的唯一位置。

如果它是值类型(即structs、int、float等),则存储实际值。

在您的示例中,您将从Unity加载的资源中设置动画集合(引用类型)。为了让您的系统正常工作,您必须先将整个资产加载到内存中,以便您可以引用它。这意味着您不能使用GUID或文件路径,而不能更改cutscene系统。

若要使系统在不加载文件的情况下工作,请考虑将动画集合的文件路径存储在cutscene中,而不是动画集合本身。然后在加载完整个动画场景后再加载该路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18067686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档