我如何制作DefaultTrackableEventHandler脚本来检查随机选择的游戏对象是否与向相机显示的游戏对象
本文关键字:对象 游戏 是否 显示 相机 选择 DefaultTrackableEventHandler 何制作 脚本 本来 随机 | 更新日期: 2023-09-27 18:28:22
这是一个从游戏对象数组中随机选择对象的脚本:
public GameObject[] models;
GameObject currentPoint;
int index;
public AudioSource correct;
public AudioSource notcorrect;
void Start()
{
models = GameObject.FindGameObjectsWithTag("numbers");
index = Random.Range (0, models.Length);
currentPoint = models[index];
print (currentPoint.name);
models [index].GetComponent<AudioSource> ().PlayDelayed(2);
}
所以现在它得到一个随机游戏对象,并播放它的相关AudioClip(例如数字5),现在在DefaultTrackableEventHandler中,我需要检查显示给相机的数字是否等于随机选择的数字。
我在下面发布DefaultTrackableEventHandler脚本:
using UnityEngine;
namespace Vuforia
{
/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class DefaultTrackableEventHandler : MonoBehaviour,
ITrackableEventHandler
{
#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);
}
}
#endregion // UNTIY_MONOBEHAVIOUR_METHODS
#region PUBLIC_METHODS
public GameObject show;
public GameObject hide;
/// <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()
{
show.SetActive(true);
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
AudioSource[] audiocomponents = GetComponentsInChildren<AudioSource>(true);
// Enable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = true;
}
// Enable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = true;
}
//Enable AudioSource
foreach (AudioSource component in audiocomponents)
{
component.enabled = true;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
}
private void OnTrackingLost()
{
hide.SetActive(true);
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
AudioSource[] audiocomponents = GetComponentsInChildren<AudioSource>(true);
// Disable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = false;
}
// Disable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = false;
}
//Disable AudioSource
foreach (AudioSource component in audiocomponents)
{
component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
#endregion // PRIVATE_METHODS
}
}
请帮帮我!!
Vuforia处理包含可跟踪源的数据集,所以假设您有5个对象,它们代表从1到5的数字,那么您的数据集中需要有5个可跟踪对象。这些都是在Vuforia门户网站上创建的。
然后,你选择一个游戏对象,这个游戏对象应该是可追踪的。您可以定义要匹配的名称,然后可以执行以下操作:
StateManager sm = TrackerManager.Instance.GetStateManager ();
// This gets all the trackable currently tracked
// so if you are looking at 3 and 5 it will contain both
IEnumerable<TrackableBehaviour> activeTrackables = sm.GetActiveTrackableBehaviours ();
foreach (TrackableBehaviour tb in activeTrackables) {
// As you iterate, you compare with current game object name
// if you have 3 and 5 and target object is 5 then you get a match.
if( tb.TrackableName == currentObject.name) { }
}