Вызовите сцену, когда цель изображения сканируется
Все!.. Я хочу построить игру дополненной реальности викторины, AR сцена работает правильно на объекте куба. У меня есть игровая сцена. ... Кто-нибудь может мне помочь, "как заставить игровую сцену появляться, когда моя цель изображения обнаружена?".
2 ответа
Вы можете использовать метод SceneManager.LoadScene для загрузки сцены следующим образом:
SceneManager.LoadScene("GameSceneName");
Вот документация для метода SceneManager.LoadScene.
Какой AR SDK вы используете? Вуфория или что? Если вы используете Vuforia, вы можете использовать свойство ImageTargetBehaviou.CurrentStatus. Когда ваша цель изображения обнаружена, currentState должен быть равен
imageTargetTemplate.CurrentStatus == TrackableBehaviour.Status.DETECTED
Затем вы можете использовать метод SceneManager.LoadScene, как сказал @Mukesh Saini.
Вот полный код, который я написал и протестировал в своем собственном проекте. У меня работает при сканировании объекта. Я разместил этот скрипт в моем Image Target, просто внесите свои собственные изменения в имена Scene в //Go to Scene, IF обнаружите целевой раздел. После этого перетащите Image Target в компонент Image Target в Unity.
using UnityEngine;
using UnityEngine.Events;
using Vuforia;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
namespace Vuforia
{
/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class CustomsTrackableEventHandler : MonoBehaviour,
ITrackableEventHandler
{
public ImageTargetBehaviour imageTarget;
private ImageTargetBehaviour[] allImageSources;
#region PRIVATE_MEMBER_VARIABLES
private TrackableBehaviour mTrackableBehaviour;
#endregion // PRIVATE_MEMBER_VARIABLES
#region UNTIY_MONOBEHAVIOUR_METHODS
void Start()
{
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
imageTarget = (ImageTargetBehaviour)gameObject.AddComponent<ImageTargetBehaviour>();
}
#endregion // UNTIY_MONOBEHAVIOUR_METHODS
#region PUBLIC_METHODS
/// <summary>
/// Implementation of the ITrackableEventHandler function called when the
/// tracking state changes.
/// </summary>
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
}
else
{
OnTrackingLost();
}
}
#endregion // PUBLIC_METHODS
#region PRIVATE_METHODS
private void OnTrackingFound()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Enable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = true;
}
// Enable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = true;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
//Go to Scene, IF detect a target
if (mTrackableBehaviour.TrackableName == "Scene 1")
{
SceneManager.LoadScene("YourUnityProjectName 1");
}
if (mTrackableBehaviour.TrackableName == "Scene 2")
{
SceneManager.LoadScene("YourUnityProjectName 2");
}
if (mTrackableBehaviour.TrackableName == "Scene 3")
{
SceneManager.LoadScene("YourUnityProjectName 3");
}
}
private void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Disable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = false;
}
// Disable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
#endregion // PRIVATE_METHODS
}
}