Android DLC系统到AR应用程序,带有Unity可寻址、Vuforia和Firebase
我进入AR领域大约3个月了,我对在Unity中使用Vuforia构建AR应用程序有点熟悉。我想在我的AR应用程序中添加一个DLC系统,以便我可以构建和发布一次,并在构建后更新内容。我将在未来更新应用程序的新内容,因为这是一个带有AR函数的系列丛书,而且它们的文件大小将非常大,包含所有内容 我的工作流程如下: 1) 我有一些预设,通过ImageTarget=>AR内容来显示(3D模型、动画、图形和音频),我将它们选为可寻址并标记为“ARPages” 2) 我还将Vuforia数据库(图像、.xml和.dat)设置为可寻址。我希望能够在构建后更新并添加到数据库中,然后将其与我设置为可寻址的新预置同步。 3) 我构建了轻量级的AR应用程序,没有将AR内容作为预置,但我的AR场景中有一个空的游戏对象(ARCamera=>GameObject),带有一个调用标记为“ARPages”的AssetLabelReference的脚本 5) 当我单击并打开AR场景时,我使用脚本加载并初始化Vuforia和数据库,但当我将手机照射到图像目标上时,什么也没有发生Android DLC系统到AR应用程序,带有Unity可寻址、Vuforia和Firebase,android,ios,firebase,unity3d,vuforia,Android,Ios,Firebase,Unity3d,Vuforia,我进入AR领域大约3个月了,我对在Unity中使用Vuforia构建AR应用程序有点熟悉。我想在我的AR应用程序中添加一个DLC系统,以便我可以构建和发布一次,并在构建后更新内容。我将在未来更新应用程序的新内容,因为这是一个带有AR函数的系列丛书,而且它们的文件大小将非常大,包含所有内容 我的工作流程如下: 1) 我有一些预设,通过ImageTarget=>AR内容来显示(3D模型、动画、图形和音频),我将它们选为可寻址并标记为“ARPages” 2) 我还将Vuforia数据库(图像、.xml
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);
}
}
}
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用Vuforia;
公共类MultiRecoScript:MonoBehavior,ITrackableEventHandler
{
公共音频剪辑音乐;
公共动画师[]我的动画师;
私人可追踪行为;
void Start()
{
//从您的游戏对象中获取动画师
myAnimator=GetComponentsInChildren();
mtrackablebhavior=GetComponent();
if(MTrackableBehavior)
{
mtrackablebhavior.RegisterTrackableEventHandler(此);
}
}
公共无效OnTrackableStateChanged(
可跟踪行为。状态优先状态,
可跟踪的行为。状态(状态)
{
if(newStatus==trackablebehavior.Status.DETECTED||
newStatus==trackablebehavior.Status.TRACKED||
newStatus==trackablebehavior.Status.EXTENDED\u TRACKED)
{
//兰西奥音乐酒店
Debug.Log(“声音”);
AudioManagerScript.current.PlaySound(musicFx);
foreach(myAnimator中的Animator Animator)
{
animator.speed=1f;
animator.gameObject.SetActive(true);
}
}
其他的
{
//音乐之旅
AudioManagerScript.current.StopSound();
//Debug.Log(“stoppo”);
foreach(myAnimator中的Animator Animator)
{
animator.gameObject.SetActive(false);
}
}
}
}
我被卡住了。可能需要帮助和反馈。我希望能够使用unity中的addressables系统将新内容加载到firebase,并让应用程序下载新内容并实现新内容,而无需每次更新内容时都重建应用程序
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()
{
}
}
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);
}
}
}
}