Как загрузить ресурс с тем же именем, но размещенный в разных папках из assetbundle?

Я использую unity5.3.3, я хотел бы знать, как мне получить актив из пакета ресурсов, имена которых одинаковы, но хранятся в другой папке. Моя папка AssetBundle устанавливается следующим образом:

 MyAssets -> this Folder is packed as an AssetBundle
  -ThemeOne(folder)
     - Logo.png
  -ThemerTwo(folder)
     - Logo.Png

Когда я делаю AssetBundle.LoadAssetAsync("Logo"). Я заканчиваю получение логотипа в первой (ThemeOne) папке. Итак, как мне получить доступ к файлу в другой папке?

Я только что создал образец проекта, чтобы вы могли проверить это. Проверьте папку Assets \ AssetBundleSample \ SampleAssets \ Theme и скрипт LoadAssets.


person Sushant Poojary    schedule 10.05.2016    source источник


Ответы (5)


Вы можете поместить ThemeOne (папка) и ThemeTwo (папка) в папку ресурсов под активами, а затем использовать что-то вроде этого

(AudioClip)(Resources.Load ("Sounds/" + "myaudioclip", typeof(AudioClip)) as AudioClip)

аналогичным образом загрузите свой png, указав сначала имя папки, поскольку я дал звуки, а затем имя файла, как я дал myaudioclip. бросить как текстуру или что-то, как вы хотите

person Sourav Sachdeva    schedule 10.05.2016
comment
Я не хочу изначально встраивать эти ресурсы в игру, помещая их в папку ресурсов. Скорее хочу загрузить assetBundle позже, а затем загрузить отдельные активы. - person Sushant Poojary; 10.05.2016
comment
Вы успешно создали пакет ресурсов, потому что я где-то читал, что он не позволяет добавлять объекты с одинаковыми именами даже в разные папки. - person Sourav Sachdeva; 10.05.2016
comment
Да, в более старом API AssetBundle вы не могли создать assetBundle, если не использовали BuildPipeline.BuildAssetBundleExplicitAssetNames. Но я успешно создал assetbundle в unity5. Так что мне интересно, не упустил ли я здесь что-то тривиальное. - person Sushant Poojary; 10.05.2016
comment
не LoadAssetAsync работает так. LoadAssetAsync (Assets / ThemeOne / Logo.png) - person Sourav Sachdeva; 10.05.2016

Как указано в официальных документах Unity

public string BundleURL;
   public string AssetName;
   IEnumerator Start() {
     // Download the file from the URL. It will not be saved in the Cache
     using (WWW www = new WWW(BundleURL)) {
         yield return www;
         if (www.error != null)
             throw new Exception("WWW download had an error:" + www.error);
         AssetBundle bundle = www.assetBundle;
         if (AssetName == "")
             Instantiate(bundle.mainAsset);
         else
             Instantiate(bundle.LoadAsset(AssetName));
                   // Unload the AssetBundles compressed contents to conserve memory
                   bundle.Unload(false);

     } // memory is freed from the web stream (www.Dispose() gets called implicitly)
   }

BundleURL будет использовать путь, по которому находятся ваши фактические ресурсы. Вы также можете использовать Application.dataPath вместе со строкой пути, указанным в ur.

person Muhammad Faizan Khan    schedule 10.05.2016
comment
Я действительно загрузил набор ресурсов. Я застрял в этой точке bundle.LoadAsset(AssetName). Когда делаю bundle.LoadAsset("Logo"), я только актив из первой папки. - person Sushant Poojary; 10.05.2016
comment
как я уже сказал, вам нужно изменить URL-адрес для доступа ко второму логотипу. вы должны изменить путь в соответствии с вашим местоположением. просто - person Muhammad Faizan Khan; 10.05.2016
comment
Оба актива находятся в одном AssetBundle. Проблема не в загрузке assetBundle, а в доступе к ресурсам внутри assetbundle после того, как он загружен в память. - person Sushant Poojary; 10.05.2016
comment
поэтому есть только одно имя файла, которое вы будете использовать, если он содержит оба актива, тогда он обязательно загрузит его - person Muhammad Faizan Khan; 10.05.2016

Кажется, это ошибка. Все еще присутствует в версии Unity 5.3.3.

См .: http://answers.unity3d.com/questions/1083400/asset-bundle-cant-have-multiple-files-with-the-sam.html

person Matti Jokipii    schedule 22.08.2016

Я не совсем уверен, возможно ли это, вам следует прочитать Явное наименование активов, который, к вашему сведению, устарел, как и в Unity 5.6. Это позволяет вам явно называть активы, которые вы включаете в пакет. В качестве альтернативы вы можете попробовать,

bundle.LoadAsset("/Assets/ThemerTwo/Logo.png")

Но, как правило, иметь активы с одним и тем же наименованием в одном пакете - плохая практика.

person Arvind    schedule 15.06.2017