如何从其他场景加载精灵?

时间:2018-08-20 15:12:47

标签: c# arrays unity3d scene

我想将每个关卡划分为单独的场景。

现在我想知道如何将那些场景(即关卡)加载到主场景中?我之所以问是因为我想知道如何将其他场景中的精灵加载到我的主场景中(如果可能的话)。在我的主场景中,应在加载完成后实例化预制件。

我是否必须通过Resources.Load获取精灵?例如。像这样:

QObject::connect (Object1, SIGNAL(Object1->*m_functionMap[SignalName])(OBject1->parameters[ParamName]), Object2, SLOT (Object2->*m_functionmap[SlotName] (OBject2->parameters[ParamName]));

或者我应该这样实例化(在数组的帮助下):

 public List<GameObject> items = new List<GameObject>();

 void Start() {
 GameObject sprite = null;
 int counter = 0;
 bool done = false;
 while(!done)
 {
     sprite = Resources.Load("Item" + counter) as GameObject;
     if(sprite == null) {
         done = true;
     } else {
         items.Add(sprite);
 }
     ++counter;
 }
}

我对C#的了解有限。

1 个答案:

答案 0 :(得分:1)

我不赞成您提到的两种加载精灵的方式,因为两者都有问题。您的第一个使用Resources API的方法会导致加载时间变慢,因为它需要使用Resources文件夹。第二种方法没有让您选择要加载的对象。它将自动序列化数组中的对象。

推荐的方法是使用StreamingAssets文件夹和AssetBundle。将spites和其他资源添加到AssetBundle组,然后将AssetBundle构建到StreamingAssets路径。在运行时,您可以使用AssetBundleAssetBundleRequest API来加载资源数据。 Application.streamingAssetsPath变量指向StreamingAssets文件夹路径。

我写了关于如何在运行时here期间构建和加载AssetBundle的说明,这应该使您入门。