c# ios xcode unity3d assetbundle

c# - Construye y carga Assetbundles en Unity



ios xcode (1)

No puedo hacer que Unity Assetbundles funcione en una compilación de iOS.

En Unity construyo los paquetes de activos:

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

Y funcionan bien en Unity. 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 para 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

Puede estar relacionado de alguna manera con la configuración de la ruta correcta, pero como he copiado la carpeta del paquete de activos 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 "animales" y construirlo y luego cargarlo durante el tiempo de ejecución.

Configuración de carpetas de compilación:

1) Seleccione el activo, como el 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 para mostrarla. Vea 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"

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 distingue entre mayúsculas y minúsculas, así que asegúrese de nombrarla correctamente.

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

Paquete de activos de construcción:

4) A continuación se muestra el script de compilación.

A. Cree un script llamado ExportAssetBundles y póngalo en una carpeta llamada "Editor" en la carpeta Assets y luego copie el código a continuación:

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(); } }

B. Cree su AssetBudle yendo a Activos -> Crear menú AssetBundle .

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

Carga de AssetBundle durante el tiempo de ejecución :

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

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<Texture2D>(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 que hacer antes de cargar la nota:

A. El nombre de Assetbundle es animals .

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

C. La carga es simple como esta:

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