Как изменить источник звука при обнаружении нескольких целей изображения

В моем проекте Vuforia Unity, когда я нацеливаюсь на цель изображения, воспроизводится звук. Теперь я хочу воспроизвести определенный другой звук, если будут обнаружены 2 цели, и еще один, если будут обнаружены 3.

Мне удалось перечислить целевые изображения, сделав это в ARCamera:

void Update () {
    // Get the Vuforia StateManager
    StateManager sm = TrackerManager.Instance.GetStateManager ();

    // Query the StateManager to retrieve the list of
    // currently 'active' trackables 
    //(i.e. the ones currently being tracked by Vuforia)
    IEnumerable<TrackableBehaviour> activeTrackables = sm.GetActiveTrackableBehaviours ();

   // Iterate through the list of active trackables
    Debug.Log ("List of trackables currently active (tracked): ");
    foreach (TrackableBehaviour tb in activeTrackables) {
        Debug.Log("Trackable: " + tb.TrackableName);
    }
}

У вас есть идеи, как реализовать то, что я хочу сделать?


person Baptiste Arnaud    schedule 19.03.2017    source источник


Ответы (1)


Теперь я хочу воспроизвести определенный другой звук, если будут обнаружены 2 цели, и еще один, если будут обнаружены 3.

Я не могу сказать, где именно вы боретесь с этим, но вы определяете, сколько целей с помощью activeTrackables.Count(), а затем воспроизводите звук с помощью AudioSource.Play();. Включите использование System.Linq; вверху, чтобы использовать IEnumerable.Count().

private AudioSource otherAudio;
private AudioSource anotherAudio;

void Start()
{
    otherAudio = GameObject.Find("OtherAudio").GetComponent<AudioSource>();
    anotherAudio = GameObject.Find("OtherAudio").GetComponent<AudioSource>();
}

void Update()
{
    // Get the Vuforia StateManager
    StateManager sm = TrackerManager.Instance.GetStateManager();

    // Query the StateManager to retrieve the list of
    // currently 'active' trackables 
    //(i.e. the ones currently being tracked by Vuforia)
    IEnumerable<TrackableBehaviour> activeTrackables = sm.GetActiveTrackableBehaviours();

    if (activeTrackables.Count() == 2)
    {
        if (!otherAudio.isPlaying)
        {
            otherAudio.Play();
        }
    }

    else if (activeTrackables.Count() == 3)
    {
        if (!anotherAudio.isPlaying)
        {
            anotherAudio.Play();
        }
    }

    // Iterate through the list of active trackables
    Debug.Log("List of trackables currently active (tracked): ");
    foreach (TrackableBehaviour tb in activeTrackables)
    {
        Debug.Log("Trackable: " + tb.TrackableName);
    }
}

Вы также можете использовать один AudioSource и просто изменить его AudioClip в зависимости от того, сколько целей обнаружено.

person Programmer    schedule 19.03.2017
comment
поэтому я реализую этот скрипт в AR Camera? - person Baptiste Arnaud; 19.03.2017
comment
Просто замените свою функцию обновления на ту, что в моем ответе. - person Programmer; 19.03.2017
comment
он не воспроизводит звук, он просто воспроизводит его 1 миллисекунду, а затем останавливается - person Baptiste Arnaud; 19.03.2017
comment
Итак, я добавил переменную isPlaying в условие if. Это работает сейчас! Спасибо :) - person Baptiste Arnaud; 19.03.2017
comment
Рад, что смог вам помочь. - person Programmer; 19.03.2017