播放3D声音,但音量最大

时间:2018-01-24 17:48:35

标签: unity3d audio

在我的拳头射手(团结)中,我使用AudioSource.PlayClipAtPoint表示敌人产卵。玩家在3D中听到这种声音非常重要,这样他就可以指示敌人产生的位置。 这很好,但由于敌人很远,声音的音量非常低。

有没有办法让团结忽略距离,但保持3D声音容量,以便人们仍然可以判断敌人是否在/上面/上面产生......他们?

我现在通过将其他音量(例如枪支射击量)减少到0.05来处理此问题。但这当然让游戏整体变得安静。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

我的建议是在敌人产卵的方向中玩AudioSource.PlayClipAtPoint(),但不一定在它的位置。这样,您仍然可以为敌人产生的方向提供适当的听觉线索,但您可以以一致的音量播放它们。

基本方法是计算玩家和敌人产卵之间的单位矢量,然后将此矢量添加到玩家的位置以确定在哪里播放产生的声音。以下是对它的外观的看法(player是包含相机的GameObject):

// First, calculate the direction to the spawn
Vector3 spawnDirection = targets[i].transform.position - player.transform.position;

// Then, normalize it into a unit vector
Vector3 unitSpawnDirection = spawnDirection.normalized;

// Now, we can play the sound in the direction, but not position, of the spawn
AudioSource.PlayClipAtPoint(spawnSound, player.transform.position + unitSpawnDirection);

之后,您只需将正在播放的音频剪辑的音量更改为您想要的音量。希望这可以帮助!如果您有任何问题,请告诉我。

答案 1 :(得分:0)

将现有的AudioSource拖到GameObject的位置,然后从那里播放它,就像这样:

  void OnCollisionEnter(Collision collision)
  {
    // Play an AudioSource from the scene at this.GameObject's location: 

    AudioSource audioSource = GameObject.Find("ASExplosion").GetComponent<AudioSource>(); 
    // Move audioSource to location of this.GameObject and play it.  
    audioSource.transform.position = transform.position;
    audioSource.Play(); 
         

    Destroy(this.gameObject);
   
 }

答案 2 :(得分:0)

作为静态函数,也会根据最大距离按比例应用声音。

public static void PlaySound(AudioClip clip, Transform collision, Transform player, int DistanceSoundLimit)
{
    float cameraDistance = Vector3.Distance(player.position, collision.position);


    float normalizedValue = Mathf.InverseLerp(0, DistanceSoundLimit, cameraDistance);
    float explosionDistanceVolumen = Mathf.Lerp(1f, 0, normalizedValue);
    // First, calculate the direction to the spawn
    Vector3 spawnDirection = collision.position - player.position;

    // Then, normalize it into a unit vector
    Vector3 unitSpawnDirection = spawnDirection.normalized;

    Debug.Log("Camera distance: " + cameraDistance + " explosion sound volumen : " + explosionDistanceVolumen);
    // Now, we can play the sound in the direction, but not position, of the spawn
    AudioSource.PlayClipAtPoint(clip, player.position + unitSpawnDirection, explosionDistanceVolumen);
}

使用:

PlaySound(clip, collision.transform, Camera.main.transform, DistanceSoundLimit);