Приложение DL C для приложения AR с адресами Unity, Vuforia и Firebase - PullRequest
0 голосов
/ 09 марта 2020

Я около 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, используя единую систему адресации, и заставить приложение загружать новый контент и реализовывать новый контент без необходимости перестраивать приложение каждый раз, когда я хочу обновить контент.

...