Unity Spain
Post Antiguos => General (Antiguo) => Mensaje iniciado por: antoniomdk en Julio 25, 2015, 03:19:50 AM
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.