Je ne parviens pas à faire fonctionner Unity Assetbundles dans une version iOS.
Dans Unity, je construis les assetbundles:
using UnityEditor; public class CreateAssetBundles { [MenuItem("Assets/Build AssetBundles")] static void BuildAllAssetBundles() { BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS); } }
Et ils fonctionnent bien dans Unity. en les utilisant avec
AssetBundle bundleLoadRequest = AssetBundle.LoadFromFile("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToSsortingng());
et / ou
WWW wwww = WWW.LoadFromCacheOrDownload("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToSsortingng(), 4);
(Sans le préfixe “file: //”, les bundles ne fonctionneront pas dans Unity ni Xcode)
Je construis le projet pour Xcode et l’exécute dans Xcode et reçois cette erreur:
Impossible d’ouvrir le fichier d’archive: / Users / user / Documents / Workspaces / unityproject / Assets / AssetBundles / iOS / lchairanimations
Cela pourrait être lié en quelque sorte à la définition du chemin correct, mais comme j’ai copié le dossier assetbundle par la suite dans le projet Xcode, le problème persiste.
Dans cet exemple ci-dessous, je montrerai comment append un nouvel actif appelé “chien” à notre AssetBundle nommé “animaux” et le construire puis le charger pendant l’exécution.
Configuration des dossiers de construction:
1 Sélectionnez l’actif tel qu’un fichier image. Dans ce cas, c’est le fichier “dog.jpeg” . Voir le menu dans l’onglet “Inspecteur”. Parfois, l’option AssetBundle est masquée, faites-la glisser pour l’afficher. Voir le gif animé ci-dessous pour savoir comment faire cela. AssetBundle par défaut est “Aucun” . Cliquez sur l’option “Aucune” , puis sur “Nouveau” , créez un nouvel AssetBundle et nommez-le “animaux”.
2 Créez un dossier nommé StreamingAssets
dans le dossier Assets. C’est le dossier dans lequel nous allons construire AssetBundle. L’orthographe compte et est sensible à la casse alors assurez-vous de le nommer correctement.
3 Créez un sous-dossier dans le dossier StreamingAssets
pour contenir AssetBundle. Pour cet exemple, nommez ce dossier AssetBundles
afin de pouvoir l’utiliser pour reconnaître son contenu.
Bâtiment AssetBundle:
4 Voici le script de construction.
Un . Créez un script nommé ExportAssetBundles
et placez-le dans un dossier nommé “Editor” dans le dossier Assets, puis copiez le code ci-dessous:
using System.IO; using UnityEditor; using UnityEngine; public class ExportAssetBundles { [MenuItem("Assets/Build AssetBundle")] static void ExportResource() { ssortingng folderName = "AssetBundles"; ssortingng filePath = Path.Combine(Application.streamingAssetsPath, folderName); //Build for Windows platform BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64); //Uncomment to build for other platforms //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.iOS); //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.Android); //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.WebGL); //BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX); //Refresh the Project folder AssetDatabase.Refresh(); } }
B. Construisez votre AssetBudle en allant dans le menu Actifs -> Construire AssetBundle .
Vous devriez voir AssetBundles intégré dans le répertoire Assets/StreamingAssets/AssetBundles
. Sinon, actualisez l’onglet Projet.
Chargement de AssetBundle pendant l’exécution :
5 Lors du chargement, Application.streamingAssetsPath
doit être utilisé pour accéder au dossier StreamingAssets
. Pour accéder à tous les dossiers, utilisez Application.streamingAssetsPath + "/AssetBundle/" + assetbunlenameWithoutExtension;
. Les API AssetBundle
et AssetBundleRequest
sont utilisées pour charger AssetBundle. Texture2D
une image, Texture2D
est transmise. Si vous utilisez un préfabriqué, passez GameObject
place puis instanciez-le. Voir le commentaire dans le code pour savoir où ces modifications doivent être apscopes. Il est recommandé d’utiliser Path.Combine
pour combiner les noms de chemin d’access, le code ci-dessous doit donc utiliser cette option.
Vous trouverez ci-dessous une fonction de chargement simple:
IEnumerator LoadAsset(ssortingng assetBundleName, ssortingng objectNameToLoad) { ssortingng filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "AssetBundles"); filePath = System.IO.Path.Combine(filePath, assetBundleName); //Load "animals" AssetBundle var assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(filePath); yield return assetBundleCreateRequest; AssetBundle asseBundle = assetBundleCreateRequest.assetBundle; //Load the "dog" Asset (Use Texture2D since it's a Texture. Use GameObject if prefab) AssetBundleRequest asset = asseBundle.LoadAssetAsync(objectNameToLoad); yield return asset; //Resortingeve the object (Use Texture2D since it's a Texture. Use GameObject if prefab) Texture2D loadedAsset = asset.asset as Texture2D; //Do something with the loaded loadedAsset object (Load to RawImage for example) image.texture = loadedAsset; }
Choses à faire avant de charger note:
Un . Nom de Assetbundle est des animals
.
B. Nom de l’actif / de l’object que nous voulons charger parmi les animaux Assetbundle est un dog
Il s’agit d’un simple jpg d’un chien.
C. Le chargement est simple comme ceci:
ssortingng nameOfAssetBundle = "animals"; ssortingng nameOfObjectToLoad = "dog"; public RawImage image; void Start() { StartCoroutine(LoadAsset(nameOfAssetBundle, nameOfObjectToLoad)); }