Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

AudioFadeOut [Script]

Iniciado por antoniomdk, Julio 25, 2015, 03:19:50 AM

Tema anterior - Siguiente tema
Hola buenas vengo a aportaros un script bastante sencillito pero que es muy útil. Este script lo he escrito para mi juego pero me gustaría compartirlo. Su función es la de parar o reproducir un sonido con una interpolación. El uso que le he dado a sido para el sonido de las armas. La mayoría de aquí no somos compositores y necesitamos audio de algún sitio y este es mi caso. Muchas veces los audios vienen en loops de 30 disparos por ejemplo o de un solo disparo, si reproduces 1 disparo cada bala te vas a dar cuenta que el sonido no termina cuando empieza el siguiente. Por eso he cogido los largos bucles de 30 disparos y cuando dejas de disparar lo cortas suavemente y parece el eco de las balas y así el audio no se para en seco. Algo muy específico pero práctico jeje.
using UnityEngine;
using System.Collections;

public class AudioFadeOut : MonoBehaviour {
private AudioSource audioSource;
private float speed;
private float audioVolumeTo;

// Use this for initialization
void Start () {
   audioSource = GetComponent<AudioSource>();
}

// Update is called once per frame
void Update () {
   if (audioVolumeTo != audioSource.volume) {
      audioSource.volume = Mathf.Lerp(audioSource.volume,audioVolumeTo, Time.deltaTime * speed);      
   }
   if (audioSource.volume < 0.05f) {
      audioSource.Stop();      
   }
}

public void InstantPlay(){
   audioVolumeTo = 1;
   audioSource.volume = 1;
   audioSource.Play ();
}

public void SmoothPlay(float _speed){
   speed = _speed;
   audioVolumeTo = 1;
   audioSource.Play ();
}

public void InstantStop(){
   audioSource.Stop ();
   audioVolumeTo = 0;
}

public void SmoothStop(float _speed){
   speed = _speed;
   audioVolumeTo = 0;
}
}
 

Creo que en el proyecto stealth del tutorial de unity había también algo de interpolación de audios. 

¿Queréis un consejo? Os doy 2 para optimizarlo todavía más:  
  • No lo llaméis en el Update(). Cread un Evento, o una Co-Routine con yield,  o en su defecto añadid al Start() un InvokeRepeating() para llamarlo de vez en cuando, pero sin gastar cada ciclo de cpu en eso. Con llamarlo cada 100-200 msecs ya irá perfecto y consumirá mucho menos.

Etiquetas: