当检测到多个目标时播放声音。联合国福福里亚

时间:2019-02-26 01:54:30

标签: unity3d vuforia

当前,我正在制作一本AR有声读物,当扫描多个图像目标时,声音将针对每个目标播放。我试图按照Unity和vuforia给出的教程进行操作,但仍然无法正常工作。你能帮我吗?

此场景包含鸟和老虎。扫描图像鸟时,鸟的声音也会播放老虎。

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using Vuforia;


public class ImageTargetPlayAudio : MonoBehaviour,
                                            ITrackableEventHandler
{
    private TrackableBehaviour mTrackableBehaviour;

    void Start()
    {
        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)
        {
            // Play audio when target is found
            GetComponent<AudioSource>().Play();
        }
        else
        {
            // Stop audio when target is lost
            GetComponent<AudioSource>().Stop();
        }
    }
}

所附图片是我的等级结构。 enter image description here

我将此代码添加到每个图像目标中。

如果我做错了,请纠正我。

2 个答案:

答案 0 :(得分:1)

RegisterTrackableEventHandler的文档

  

此方法在跟踪器上注册一个新的跟踪器事件处理程序。   所有可追踪对象更新后,就会立即调用这些处理程序   在这个框架中。

因此您使用了错误的方法,请检查document,也许OnTrackerUpdate是合适的。

答案 1 :(得分:1)

如果您不熟悉Vuforia,则可以在GetComponent上使用DefaultTrackableEventHandler来更轻松地处理它,该脚本包含已经运行的OnTrackingLostOnTrackingFound事件。

只需为您的自定义脚本添加一个GetComponent,如果没有null,请在该脚本上播放声音。