Mi profesor me planteó un desafío en Unity (C#) en el que tengo que cargar elementos prefabricados en una matriz (como una función de GameObject[] ). El código que tengo funciona en el editor, pero cuando construyo el juego, me da el error The name "Asset Database" does not exist in the curernt context . El código que tengo actualmente es:
using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEditor; using System; public class FindCards : MonoBehaviour { public string directoryName; public List<GameObject> foundGameObjects; public GameObject[] ListOfCards() { // get the directory and the files in them DirectoryInfo dirInfo = new DirectoryInfo(Application.dataPath + directoryName); FileInfo[] fileInfo = dirInfo.GetFiles("*.prefab"); // loop through the files foreach(FileInfo file in fileInfo) { // get the path to the directory again (with proper formatting) string fullPath = file.FullName.Replace(@"\","/"); string assetPath = "Assets" + fullPath.Replace(Application.dataPath, ""); GameObject _asset; // load the asset from the direcotry _asset = AssetDatabase.LoadAssetAtPath(assetPath, typeof(GameObject)) as GameObject; // add it to the list foundGameObjects.Add(_asset); Debug.Log(_asset.name); } // return the list as an array return(foundGameObjects.ToArray()); } public void SetCardProperties(string cardName, Card card) { // get the first string, and the int // from the card's name string[] sub = cardName.Split('_'); // (if the name was Diamond_07, // string name // there would be an int = 07 and // name[0] // a string = Diamond) // name[1] card.suit = sub[0]; Int32.TryParse(sub[1], out card.number); } }El código que está llamando a esta función se ve así (tenga en cuenta que esto está en una secuencia de comandos diferente):
private void Start() { canScore = true; gameIsGoing = true; // set up cards cards = findCards.ListOfCards(); for (int i = 0; i < cards.Length; i++) { Card card = cards[i].GetComponent<Card>(); findCards.SetCardProperties(cards[i].name, card); } // set up deck ResetDeck(); }El directorio aquí: Prefabs en el directorio
Errores aquí: Errores que me da la unidad
Me he estado tirando de los pelos porque no había nada en línea que pudiera encontrar que me ayudara. Mi maestro me dio esto como un desafío porque él tampoco sabía cómo hacerlo, por eso estoy haciendo esta pregunta...
¡Gracias por adelantado!
AssetsDatabase parece que solo funciona en Editor. Revisa este hilo para más información:
https://answers.unity.com/questions/1068055/assetdatabase.html
Editar:
Búsqueda `Resources.Load()´ en la ruta: "Activos/Recursos".
Mira lo que dice la documentación :
Si se puede encontrar un activo en la ruta, se devuelve con el tipo
T, de lo contrario, devuelve nulo. Si el archivo en ruta es de un tipo que no se puede convertir aT, también devuelve nulo. La ruta es relativa a cualquier carpeta denominada Recursos dentro de la carpeta Activos de su proyecto. Se puede utilizar más de una carpeta de Recursos. Por ejemplo, un proyecto puede tener carpetas de Recursos llamadas Activos/Recursos y @@AssetsAssetsResources@@. La ruta no necesita incluir Activos y Recursos en la cadena, por ejemplo, cargar un GameObject en @@AssetspathShotgun.prefab@@ solo requeriría Shotgun como la ruta. Además, si existe @@AssetspathMissiles/PlasmaGun.prefab, se puede cargar utilizando GunspathPlasmaGun@@ como cadena de ruta. Si tiene varias carpetas de recursos, no puede duplicar el uso de un nombre de recurso.