【问题标题】:playing sound in unity when detect multiple image target检测多个图像目标时统一播放声音
【发布时间】:2013-10-10 11:03:57
【问题描述】:

当我检测到目标时,我在#unity 中检测到多个图像目标,我会播放一个发音图像目标名称的声音。如果我检测到一个目标,它会大声播放声音,但是当检测到多个目标时,它会大声播放一个声音,而将其他目标播放得非常低或不播放。 请我想在教程中执行此操作的具体方法或在您的答案中解释。

使用 UnityEngine;

public class SoundPlay: MonoBehaviour,ITrackableEventHandler
{
#region PRIVATE_MEMBER_VARIABLES

private TrackableBehaviour mTrackableBehaviour;
public AudioClip sound;
#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

/// <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)
    {
        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");
    GetComponentInChildren<fiveSound>().Play();
}


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");
}


 public void Play(){
    AudioSource.PlayClipAtPoint(sound, transform.position);
}
#endregion // PRIVATE_METHODS

}

【问题讨论】:

    标签: unity3d vuforia


    【解决方案1】:

    是否检查了 3D 声音?

    如果是则取消选中。让我知道你是怎么办的!

    ^._.^

    【讨论】:

      【解决方案2】:
      using UnityEngine;
      using Vuforia;
      
      public class SoundPlay: MonoBehaviour,ITrackableEventHandler
      {
          #region PRIVATE_MEMBER_VARIABLES
      
          private TrackableBehaviour mTrackableBehaviour;
          public AudioClip sound;
          #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
      
          /// <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)
              {
                  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");
              GetComponentInChildren<AudioSource>().Play();
          }
      
      
          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");
          }
      
      
          public void Play(){
              AudioSource.PlayClipAtPoint(sound, transform.position);
          }
          #endregion // PRIVATE_METHODS
      }
      

      【讨论】:

      • 虽然您的答案中的代码可能包含解决 OP 问题的正确信息 - 如果您包含解释,用户会发现更容易理解该信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多