Crea y carga Assetbundles en Unity

No puedo hacer que Unity Assetbundles trabaje en una versión de iOS.

En Unity construyo los assetBundles:

using UnityEditor; public class CreateAssetBundles { [MenuItem("Assets/Build AssetBundles")] static void BuildAllAssetBundles() { BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS); } } 

Y funcionan bien en la Unidad. usándolos con

 AssetBundle bundleLoadRequest = AssetBundle.LoadFromFile("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString()); 

y / o

 WWW wwww = WWW.LoadFromCacheOrDownload("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString(), 4); 

(Sin el prefijo “file: //”, los paquetes no funcionarán en Unity ni Xcode)

Construyo el proyecto en Xcode y lo ejecuto en Xcode y recibo este error:

No se puede abrir el archivo: / Users / user / Documents / Workspaces / unityproject / Assets / AssetBundles / iOS / lchairanimations

Podría estar relacionado de alguna manera con la configuración de la ruta correcta, pero como he copiado la carpeta assetBundle después al proyecto Xcode, el problema persiste.

En este ejemplo a continuación, demostraré cómo agregar un nuevo activo llamado “perro” a nuestro AssetBundle llamado “animals” y lo construiré luego lo cargaré durante el tiempo de ejecución.

Configuración de carpetas de comstackción:

1 . Seleccione el activo, como un archivo de imagen. En este caso, ese es el archivo “dog.jpeg” . Vea el menú en la pestaña “Inspector”. A veces, la opción AssetBundle está oculta, arrástrela hacia arriba para mostrarla. Mira el gif animado a continuación para saber cómo hacer esto. El AssetBundle predeterminado es “Ninguno” . Haga clic en la opción “Ninguno” , vaya a la opción “Nuevo” y cree un nuevo AssetBundle y asígnele el nombre “animales”.

enter image description here

2 . Cree una carpeta llamada StreamingAssets en la carpeta Assets. Esta es la carpeta en la que vamos a construir el AssetBundle. La ortografía cuenta y es sensible a las mayúsculas, así que asegúrese de nombrarla correctamente.

enter image description here

3 . Cree una subcarpeta en la carpeta StreamingAssets para guardar el AssetBundle. Para este ejemplo, nombre esta carpeta AssetBundles para que pueda usarla para reconocer lo que AssetBundles .

enter image description here


Edificio AssetBundle:

4 . A continuación está el script de comstackción.

A Cree un script llamado ExportAssetBundles y ExportAssetBundles en una carpeta llamada “Editor” en la carpeta de ExportAssetBundles y luego copie el siguiente código dentro de él:

 using System.IO; using UnityEditor; using UnityEngine; public class ExportAssetBundles { [MenuItem("Assets/Build AssetBundle")] static void ExportResource() { string folderName = "AssetBundles"; string 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(); } } 

enter image description here

B. Construya su AssetBudle yendo a Activos -> Construir menú de Conjunto de Activos .

Debería ver los AssetBundles integrados dentro del directorio Assets/StreamingAssets/AssetBundles . De lo contrario, actualice la pestaña Proyecto.

enter image description here


Cargando el AssetBundle durante el tiempo de ejecución :

5 . Al cargarlo, Application.streamingAssetsPath debe usar para acceder a la carpeta StreamingAssets . Para acceder a todas las carpetas use, Application.streamingAssetsPath + "/AssetBundle/" + assetbunlenameWithoutExtension; . La API AssetBundle y AssetBundleRequest se utilizan para cargar el AssetBundle. Como se trata de una imagen, se les pasa Texture2D . Si usa un prefabricado, pase GameObject en GameObject lugar y ejemplifíquelo. Vea el comentario en el código donde se deben realizar estos cambios. Se recomienda utilizar Path.Combine para combinar nombres de ruta, por lo que el código siguiente debería usar eso.

A continuación se muestra una función de carga simple:

 IEnumerator LoadAsset(string assetBundleName, string objectNameToLoad) { string 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; //Retrieve 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; } 

Cosas antes de cargar la nota:

A El nombre de Assetbundle es un animals .

B. Nombre del activo / objeto que queremos cargar de los animales Assetbundle es dog Este es un simple jpg de un perro.

enter image description here

C La carga es simple como esto:

 string nameOfAssetBundle = "animals"; string nameOfObjectToLoad = "dog"; public RawImage image; void Start() { StartCoroutine(LoadAsset(nameOfAssetBundle, nameOfObjectToLoad)); } 
Intereting Posts