Всем доброго времени суток, в настоящее время я создаю свое первое приложение AR с использованием unity и vuforia sdk. Я уже знаю некоторые основы AR, что вам нужна цель изображения для отображения трехмерного объекта или информации, связанной с целью изображения. У меня есть этот вращающийся куб AR
это пример приложения работает, когда оно обнаруживает допустимое целевое изображение, отображается трехмерный куб и начинает вращаться. Мой вопрос в том, что пока телефон сканирует цель изображения, должно появиться сообщение «Сканирование цели изображения», а когда оно будет найдено, будет отображаться «Цель изображения найдена» и отобразится всплывающая кнопка «Показать», при нажатии на которую появится куб.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateScript : MonoBehaviour {
public int speed;
//Update is called once per frame
void Update () {
transform.Rotate (new Vector3 (0, Time.deltaTime * speed, 0));
}
}
Обновления:
Я нашел этот скрипт и немного изменил его, чтобы отобразить текст пользовательского интерфейса над экраном. Я намерен изменить текст на «Image Target Lost», если цель изображения не обнаружена, и «Image Target Found», когда цель изображения присутствует. Я помещаю сценарий в префаб целевого изображения, но он отображает ошибку Ошибка текста пользовательского интерфейса. Любые предложения о том, где я ошибся. Спасибо
Образец кода
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Vuforia;
public class TextScript : MonoBehaviour, ITrackableEventHandler {
private TrackableBehaviour mTrackableBehaviour;
//Declares a UI text
Text uiText;
void Start () {
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
//uiText = gameObject.GetComponent<Text> ();
}
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED)
{
uiText.text = "Image Target Found";
}
else
{
uiText.text = "Image Target Lost";
}
}
}
Обновление (30.10.2017)
Извините, если я обновлюсь поздно, я перепробовал все решения, которые вы все предлагаете, но оно все еще не работает. Имя кода - TextScript, я прикрепил его к целевому изображению, но результат все равно неудачный. Вот пример кода.
TextScript
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Vuforia;
public class TextScript : MonoBehaviour, ITrackableEventHandler {
private TrackableBehaviour mTrackableBehaviour;
//Declares a UI text
public Text uiText;
void Start () {
mTrackableBehaviour = GetComponent<TrackableBehaviour>();
if (mTrackableBehaviour)
{
mTrackableBehaviour.RegisterTrackableEventHandler(this);
}
uiText = gameObject.GetComponent<Text> ();
}
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
OnTrackingFound();
uiText.text = "Image Target Found";
}
else
{
OnTrackingLost();
//uiText.text = "Image Target Lost";
}
}
private void OnTrackingFound()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Enable rendering:
foreach (Renderer component in rendererComponents)
{
uiText.text = "Image Target Found";
component.enabled = true;
}
// Enable colliders:
foreach (Collider component in colliderComponents)
{
uiText.text = "Image Target Found";
component.enabled = true;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
}
private void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Disable rendering:
foreach (Renderer component in rendererComponents)
{
uiText.text = "Image Target Lost";
component.enabled = false;
}
// Disable colliders:
foreach (Collider component in colliderComponents)
{
uiText.text = "Image Target Lost";
component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
}
P.S
Я уже назвал текстовый интерфейс «Сканирование», поэтому, когда я нажимаю кнопку воспроизведения, текст уже отображает указанное слово. Но когда он нашел цель изображения, текст не изменился. Пожалуйста, ребята, мне очень нужна ваша помощь, если есть нежелательный код, пожалуйста, отредактируйте его или прокомментируйте, чтобы я мог его удалить. Спасибо