Noticias

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

Los Audios no se disparan

Iniciado por lozdanmultimedial, Marzo 17, 2016, 10:54:47 PM

Tema anterior - Siguiente tema
Marzo 17, 2016, 10:54:47 PM Ultima modificación: Abril 28, 2016, 09:58:46 AM por pioj
Buen día a todos.Necesito ayuda para resolver el siguiente problema:tengo en escena un GameObject vacio que funciona como contenedor de un script que adjunto aqui y que debe disparar un aidio determinado cuando he hace clik en un boton inserto en un canvas. El problema es que los audios aparentemente no se disparan o no se escucha nada.Consideraciones a tener en cuenta:1) En el entorno del proyecto: 1.1) hay un canvas que tiene un InputField y un boton. El boton a su vez contiene a un Gameobject vacio que denomino "disparar". Disparar contiene el script adjunto.  El Button (script) [ en el inspector], en su On Click tiene asociado el script "CantarAria.cs" y la funcion DispararAudio. el "disparar" contiene el mismo script, el array de Audioclip tiene 4  lementos y en cada uno hay un archivo de audio, disparar tiene 4 Audio Source y en cada uno de ellos esta el archivo de audio correpondiente y normalizados sus volumenes al maximo, obviemnte los nombres de los archivos de audio coinciden ya que los mismos son asignados en el inspector.No se reporta ningun error y la variable "cont" se incrementa correctamente al apretar el boton, en el metodo DispararAudio. Que me falta, que me estoy olvidadno u omitiendo   o   por q los audios no se disparan??
using UnityEngine; 
using System.Collections;
using UnityEngine.UI;
public class CantarAria : MonoBehaviour {
    public AudioClip []aria;
    AudioSource audio;
    public int cont = 0; // Use this for initialization
    void Start () {
        audio = GetComponent();
        aria = new AudioClip[4];
    }
    /*
    void OnClik() {
        print ("on clik ");
        DispararAudio ();
        cont++;
    }
    */
    // Update is called once per frame public
    void DispararAudio() {
        print ("cont = " + cont);
        if (cont < 4) {
            audio.clip = aria [cont];
            audio.PlayOneShot (aria [cont]);
            cont ++;
        }
    }
}
CantarAria.cs

Hola lozdanmultimedial... una pregunta... veo que el array "aria" lo defines y lo inicializas a 4 en la funcion Start(), pero ¿realmente estas asignando los clips de audio a ese array?Te sugiero que como el array lo tienes publico, desde el inspector le indiques la cantidad de 4 (que es lo que quieres), y que en el inspector agregues los clips de audio a cada uno de esos cuatro indices del array.Pruebalo y me dices saludos

Además de eso, cuando uses GetComponent tienes que indicar que componente quieres obtener, en tu caso AudioSource. También tienes que saber que el array aria lo tienes vacío, si tenías algo puesto desde el inspector lo borras en la línea: 'aria = new AudioClip[4];'.

Marzo 19, 2016, 04:58:25 AM #3 Ultima modificación: Abril 28, 2016, 09:59:28 AM por pioj
GRacias por su resuestas, creo que lo que apunta juanma_teso es lo que esta sucediendo, ya que los clips de audio se asignan al array en el inspector, pero cuando haggo aria = new AudioClip[4]; esa asignacion se borra y el array queda vacios.Gracias a otro colaborador en un grupo de facebook dnd publique la misma cuestión me paso un codigo que funcionó perfectamente, a ese código le agregue una funcion para que mietras este sonando un audi no se pueda disparar uno nuevo. aca va el codigo: 
using UnityEngine; using System.Collections; public class Cantar2 : MonoBehaviour { public AudioClip []aria; private AudioSource _source; private int cont = 0; bool termino = false; bool medi_la_duracion_del_aria = false; float dur = 0; bool cantar = false; void Start() { _source = GetComponent(); } void Update() { if (cantar && cont < 4 ) // 4 es el numero de arias a ejecutar { if (!medi_la_duracion_del_aria) // no hay audio disparado { dur = aria [cont].length;// tomo la duracion del aria actual DispararAudio (cont); medi_la_duracion_del_aria = true; } if ( medi_la_duracion_del_aria) { if (dur > 0) { // si no termino le resto el tiempo transcurrido dur -= Time.deltaTime; } if (dur <= 0) { // si dur es 0 cont++;// indice del aria siguente cantar = false; medi_la_duracion_del_aria = false; } }// end else }// end if cantar and cont < 4 }// end UPDATE public void disparar()// este metodo se activa solo si se hace clikc en el boton "enviar" { cantar = true; } void DispararAudio(int indice) { audio.PlayOneShot (aria [indice]); }// end DisparaAudio }
 este scrip esta asignado un boton y enel On clik se asigna la funcion disparar de este script.no se si el codigo se visualiza bien asi q tb lo adjunto como archivo. MUCHAS GRACIAS a TODOS.Cantar2.cs

Etiquetas: