1

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

-CutScene
-AnimationCollection

CutScene 类包含对话树、摄像机剪辑,具有公共 AnimationCollection 字段。动画集合保存给定过场动画中使用的动画的实际动画数据。

在我们的管道中,CutScene 实例由导出过程生成,将它们保存为统一的 .asset 文件。

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

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

cutScene.AnimationCollection = AssetDatabase.LoadAssetAtPath(pathToAnimCollection, typeof(AnimationCollection)) as AnimationCollection;

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

4

1 回答 1

0

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

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

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

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

要让您的系统在不加载文件的情况下工作,请考虑在过场动画中存储动画集合的文件路径,而不是动画集合本身。然后在加载整个过场动画时加载该路径。

于 2014-07-30T08:55:47.053 回答