Я около 3 месяцев на AR-сцене, и я немного знаком с созданием AR-приложения с Vuforia в Unity. Я хочу добавить систему DL C в мое приложение AR, чтобы я мог собрать и опубликовать sh один раз, а также обновить содержимое после сборки. Я буду делать будущие обновления с новым контентом для приложения, потому что это сериализованная серия книг с функциями AR, и их размер файла будет огромным со всем содержимым.
Мой рабочий процесс выглядит следующим образом: PRefabs с изображениями Targets и AR-контентом 1) У меня есть префабы, которые с ImageTarget => AR-контентом для отображения (3D-модели, анимация, графика и аудио) выбрали их в качестве адресуемых и помеченных «ARPages» Файлы, экспортируемые как адресуемые 2) У меня также есть база данных Vuforia (изображения,. xml и .dat) в качестве адресуемой. Я хочу иметь возможность обновлять и добавлять в базу данных после сборки, затем syn c это с новыми префабами, которые я делаю Addressable. ARCamera Scene с пустым GameObject 3) Я создаю легкое приложение AR без содержимого AR в качестве префабов, но у меня есть пустой игровой объект в моей сцене AR (ARCamera => GameObject) со сценарием, который вызывает AssetLabelReference с пометкой «ARPages».
using UnityEngine.SceneManagement;
using UnityEngine;
using System;
using System.Collections.Generic;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement;
using Vuforia;
public class GameManager1 : MonoBehaviour
{
public AssetLabelReference comicbookName;
private bool mLoaded = false;
private DataSet mDataset = null;
void Awake()
{
Addressables.DownloadDependenciesAsync(comicbookName);
}
void Start()
{
Addressables.InstantiateAsync(comicbookName);
}
void Update()
{
if (VuforiaRuntimeUtilities.IsVuforiaEnabled() && !mLoaded)
{
string externalPath = Application.persistentDataPath;
if (mDataset == null)
{
// First, create the dataset
ObjectTracker tracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
mDataset = tracker.CreateDataSet();
}
if (mDataset.Load(externalPath, VuforiaUnity.StorageType.STORAGE_ABSOLUTE))
{
mLoaded = true;
}
else
{
Debug.LogError("Failed to load dataset!");
}
}
}
}
Файлы хранилища Firebase 4) Сборка адресуемых пакетов и загрузка их в хранилище Firebase, где они загружаются на мое устройство при запуске Scene Меню с помощью сценария
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading.Tasks;
using UnityEngine.AddressableAssets;
using Vuforia;
public class LoadAssetsFromRemote : MonoBehaviour
{
[SerializeField] private AssetLabelReference _label;
// Start is called before the first frame update
private void Start()
{
Get(_label);
}
private async Task Get(AssetLabelReference label)
{
var locations = await Addressables.LoadResourceLocationsAsync(label).Task;
foreach (var location in locations)
{
await Addressables.InstantiateAsync(location).Task;
}
}
// Update is called once per frame
void Update()
{
}
}
5) Когда я щелкаю и открываю сцену AR, я использую скрипт для загрузки и инициализации Vuforia и базы данных, но ничего не происходит, когда я помещаю свой телефон поверх целевого изображения.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class MultiRecoScript : MonoBehaviour, ITrackableEventHandler
{
public AudioClip musicFx;
public Animator[] myAnimator;
private TrackableBehaviour mTrackableBehaviour;
void Start()
{
//Fetch the Animator from your GameObject
myAnimator = GetComponentsInChildren<Animator>();
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
}
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
//lancio la musica
Debug.Log("sound");
AudioManagerScript.current.PlaySound(musicFx);
foreach (Animator animator in myAnimator)
{
animator.speed = 1f;
animator.gameObject.SetActive(true);
}
}
else
{
// stoppo la musica
AudioManagerScript.current.StopSound();
// Debug.Log("stoppo");
foreach (Animator animator in myAnimator)
{
animator.gameObject.SetActive(false);
}
}
}
}
Я застрял. Могли бы использовать помощь и обратную связь. Я хочу иметь возможность загружать новый контент в firebase, используя единую систему адресации, и заставить приложение загружать новый контент и реализовывать новый контент без необходимости перестраивать приложение каждый раз, когда я хочу обновить контент.