C# 将变量设置为磁盘上的实例,而不调用AssetDatabase.LoadAssetPath

C# 将变量设置为磁盘上的实例,而不调用AssetDatabase.LoadAssetPath,c#,unity3d,C#,Unity3d,假设我有两个类,它们都继承自UnityEngine.ScriptableObject: -剪影 -动画收藏 CutScene类包含对话树camera cuts,它有一个公共AnimationCollection字段。“动画”集合保存给定剪切场景中使用的动画的实际动画数据 在我们的管道中,CutScene实例由导出过程生成,导出过程将它们保存为unity.asset文件 动画师使用unity编辑器工具将动画放入AnimationCollection,然后将其保存为unity.asset文件。然后,

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

-剪影 -动画收藏

CutScene类包含对话树camera cuts,它有一个公共AnimationCollection字段。“动画”集合保存给定剪切场景中使用的动画的实际动画数据

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

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

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

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

问题是加载AnimationCollection可能需要很长时间,对于我们的一些更大的剪切场景,需要12秒。如果我知道AnimationCollection的路径,我是否可以在不将AnimationCollection实际加载到内存的情况下设置剪切场景的AnimationCollection字段?AssetDatabase.AssetPathToGUID似乎很有前途,但我不确定如何使用GUID字符串?

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

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

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

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

<>为了使系统在不加载临时文件的情况下工作,考虑将文件路径存储到CutFieldStudio中的动画集合中,而不是动画集合本身。然后在加载整个剪切场景时加载该路径