Noticias

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

Problema Script reproducción de sonido

Iniciado por xcqoax, Julio 17, 2015, 05:03:27 PM

Tema anterior - Siguiente tema
saludos, tengo un proyecto  en el cual desee que un audio se reproduzca cada determinado tiempo; es decir, que empezando la reproducción del proyecto el audio se escuche despues de (ejemplo) 10 segundos. realice este script para esta labor pero no logre que funcione ya que el audio se cicla. agradecere su apoyo con las observaciones hacia el mismo.
var sonido : AudioClip;

function Start(){
InvokeRepeating("reproducirSonido", 0.0, 10.0);
}
function reproducirSonido(){
transform.audio.PlayOneShot(sonido);
}

Julio 18, 2015, 03:45:43 PM #1 Ultima modificación: Julio 18, 2015, 03:48:21 PM por Antonio
Hola Xcqoax.

"audio", no es una variable de la estructura "transform".

Mira aqui: http://docs.unity3d.com/ScriptReference/Transform.html">http://docs.unity3d.com/ScriptReference/Transform.html

Entre las variables que contiene el tipo Transform, no existe ninguna llamada "audio", luego cuando mandas esta intrucción: transform.audio.PlayOneShot(sonido);  El compilador debería quedarse a dos velas pensando ¿cómo continuar con la zona maracada de rojo?. Yo quitaría el transform dejando sólo el audio.PlayOneShot(sonido); , pero ahora viene la 2º parte, y ese "audio" ¿qué es?. 

En la Api de unity, existía algo que se llamaba "audio", hacía referencia al componente pero está en desuso con las últimas actualizaciones, (y el editor pide que no se use "audio" para no liar las cosas, así que puedes poner audioS en su lugar). Seguramente lo que estés buscando sea el tipo AudioSource que tiene dentro la función "PlayOneShot ()". Bien, para ello tienes que definir ese "audioS" como una variable y decirle que es de tipo AudioSource, así el compilador sabrá identificarla. Para definir una variable en Javascript, tienes que hacerlo al principio, antes de las funciones.

var audioS: AudioSource;

En esa variable, tienes que poner el objeto que tenga el componente "AudioSource", será el que emita el sonido. ( Si es algo que tiene que escucharse por todo el juego, pues crea algún objeto vacío, ponlo como hijo de la cámara y ponle el AudioSource ahí. finalmente, arrastrá ese objeto sobre la variable del audio para que sepa a qué AudioSource se refiere.

no tuve oportunidad de entrar el foro hasta el dia de hoy. si es verdad el transform un error. He modificado el scritp, aun no lo he probado, agradecere tus comentarios sobre esta modificación Adngel. 
var fx : Audiosource;
var audios: AudioClip;
function Start()
{
audios:Get.Component<AudioSource>();
InvokeRepeating("reproducirSonido", 0.0, 10.0);
}

function reproducirSonido()
{
audios.PlayOneShot(fx);
}
 

Julio 21, 2015, 12:20:44 AM #3 Ultima modificación: Julio 21, 2015, 12:26:58 AM por Oak Human Flesh
Al revés fx es el clip de audio (AudioClip),  y el audios es la fuente de audio (AudioSource component)...var fx : AudioClip;var audios : AudioSource;Luego dentro de la función Start...Si no vas a asignar el prefab de la escena manualmente a la variable audios...audios = GetComponent<AudioSource>();Esto último si el script va a estar como componente en el mismo objeto que posee el AudioSource. 

Bye Bye



Julio 21, 2015, 02:19:32 PM #4 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
Tienes las variables al revés.

AudioSource, es el objeto que emite el sonido. Si es el sonido de mi arma al disparar, el audioSource sería el cañon de la pistola.
AudioClip, es la pista de audio que se escucha. Nuevamente, mi arma al disparar, el audioClip sería el ruido del disparo.

En la función Start estás pidieno al AudioS que coja el componente AudioSource, pero has definido audioS como un audioClip, así que seguramente te dará algún fallo ahí.

Más tarde, al audioS le dice que active su función PlayOneShot (fx), pero se volverá a quedar en duda porque AudioS (como audioClip) no contiene ningúna función llamada PlayOneShot, y cuando cambies el audioS al tipo audioSource, su función PlayOneShot (__) necesitaun audioClip dentro de los paréntesis, pero fx es un AudioSource, luego volverá a dar otro fallo.

El resto lo veo bien, simplemente tienes que cambiar los tipos de las 2 variables y con eso debería solucionarse las cosas.

hola, despues de varios dias de no haber podido trabajar ya logre corregir el codigo. gracias a la observación que hciiero pero tambien habian otros que detalles que pase y gracias a Oak Human Flesh. ahora si el codigo se reproduce cada determinado tiempo.var fx : AudioSource;
var aud: AudioClip;
var tiempo : float=10;
function Start()
{
fx = GetComponent.<AudioSource>();
InvokeRepeating("reproducirSonido", 0.0, tiempo);
}function reproducirSonido()
{
fx.PlayOneShot(aud);
}Gracias y aca el codigo por si alguien en algun momento lo puede utilizar.

Etiquetas: