void Start() { // Inicializa el BundleLoader, IdInfoCollection y el DropDownId para // poder subscribirse a los eventos onAssetBundleFinishLoad, onDropdownIdSelected // y onIdsLoadingDone _bundleManager.InitBundleLoader(); _bundleManager.InitDropdownId(); _bundleManager.InitIdInfoCollection(); _bundleManager.onAssetBundleFinishLoad += OnAssetBundleFinishLoad; _bundleManager.onDropdownIdSelected += OnDropdownIdSelected; _bundleManager.onIdsLoadingDone += OnIdsLoadingDoneHandler; // Borra las opciones que contenia el dropdown para llenarlo con // los ids disponibles en firebase. Cuando termina la descarga // de todos los ids ejecuta la funcion onIdLoadingDoneHandler. _bundleManager.ClearDropdown(); _bundleManager.DownloadAndDeserializeIdInfoCollection(); // Si la opcion loadOnStart esta activada significa que se desea // mostrar un assetbundle desde el inicio. Por esto se agrega // un assetbundle con id="Test" que se encuentra en pathForLoadOnStart. // El path puede ser local o una link de internet directo al archivo. if (loadOnStart && pathForLoadOnStart != "") { _bundleManager.AsyncAddAssetBundle("Test", pathForLoadOnStart); } Application.targetFrameRate = 10; }
// Esta funcion se ejecuta cuando se presiona cualquier carta. Para // distinguir la carta se utiliza el parametro cardIndex. Dentro de la // funcion se dispara la descarga del assetbundle correspondiente al // id de la carta, y se activa la capacidad de poner objetos en la escena AR. public void OnCardClick(Button cardBtn, int cardIndex) { string id = cards[cardIndex].cardGameObject.transform.name; Debug.Log("Se presiono la carta con ID: " + id); _bundleManager.AsyncAddAssetBundle(id); _bundleManager.SetCanSpawnModel(true); _ux_Helper.CollectionView.SetActive(false); _ux_Helper.MainDock.SetActive(false); _ux_Helper.ActionDock.SetActive(true); }
public void OnImageChanged(ARTrackedImagesChangedEventArgs args) { foreach (var trackedImage in args.updated) { // La imagen no esta visible para la camara if (trackedImage.trackingState != UnityEngine.XR.ARSubsystems.TrackingState.Tracking) { if (trackedImage.transform.childCount > 1 && trackedImage.transform.GetChild(childIndexModel).gameObject.activeSelf) { debuglog.text += $"NO se ve la imagen con id: {trackedImage.referenceImage.name}\n"; trackedImage.transform.GetChild(childIndexMarkers).gameObject.SetActive(false); trackedImage.transform.GetChild(childIndexModel).gameObject.SetActive(false); FirstPass = true; } } // La imagen si esta visible para la camara else { if (!FirstPass) { return; } // Usa el nombre (id) de la imagen para cargar el assetbundle // de firebase try { debuglog.text += $"SI se detecto la imagen. Child Count: {trackedImage.transform.childCount}\n"; _bundleManager.AsyncAddAssetBundle(trackedImage.referenceImage.name); // El modelo se enfoca por primera vez dentro del Script // ModelManager cuando se termina de instanciar trackedImage.GetComponent <PrefabBundle>().id = trackedImage.referenceImage.name; StartCoroutine(_modelManager.DisplayAssetBundleInPrefabBundle(trackedImage.gameObject, trackedImage.referenceImage.name)); // Hace que los iconos de enfoque sean perpendiculares al piso trackedImage.transform.GetChild(childIndexMarkers).eulerAngles = new Vector3(0, 0, 0); FirstPass = false; // Si la cantidad de hijos es mayor a 1 significa que el modelo ya fue invocado y // materializado en la escena, por lo cual se debe de mostrar y enfocar. if (trackedImage.transform.childCount > 1) { trackedImage.transform.GetChild(childIndexModel).gameObject.SetActive(true); // Hace que el modelo sea perpendicular al piso trackedImage.transform.GetChild(childIndexModel).eulerAngles = new Vector3(0, 0, 0); _modelManager.FocusObject(trackedImage.gameObject); } debuglog.text += $"Se completa el asociamiento del prefabbundle al asset bundle\n"; } catch (Exception ex) { debuglog.text += $"Error en la asociacion al assetbundle: {ex.Message}\n"; } } } }