Muy buenas a todos, tengo un dilema muy raro....
Estoy intentando que suene un sonido normal y corriente cuando un árbol cae y hace su animación.
La cosa es que dicho sonido suena perfectamente por si solo, pero si le digo al script que me lo suene al caer el árbol suena distorsionado/con retardo/o como si estuviera en una cantera...
Aqui el script:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class vidaenemiga : MonoBehaviour {
public static int vida = 5;
public Animation anim;
public float tiempocaida;
public AudioClip clip;
// void Start()
// {
// AudioSource.PlayClipAtPoint (clip, Vector3.zero, 8.0f);
// }
void Update()
{
if (vida <= ) {
vida = ;
AudioSource.PlayClipAtPoint (clip, Vector3.zero, 1.0f);
Debug.Log ("arbol caeee");
anim.Play ("palmeracae");
}
}
//Time.timeScale = 10f;
}
Veréis que en el Void Start lo tengo Togled es porque probé a ver si sonaba bien llamándolo desde el inicio antes que nada y si, el sonido va perfecto...Añado mas información , el script es simplemente un árbol que al darle con un axa se le quita vida nada mas y despues de morir(if vida <=0) hace sus cosillas :), todas menos reproducir bien el sonido.
Y añado , si , tengo un Audio Source en el objeto.
Espero que tengáis una idea porque me esta llevando de cabeza el dichoso sonido...
Muchas gracias de antemano.
P.D he probado varios otros métodos Audio.Play, tranform position etc...y nada sigue sonando mal.).
a cuantos fps va el juego?
Cita de: Braltor date=1467036865a cuantos fps va el juego?
Graphics : 800 FPS (0.9ms).
has probado cambiando la compresion? o cambiando el formato del asset?
Cita de: Braltor date=1467065276has probado cambiando la compresion? o cambiando el formato del asset?
Braltor, gracias por tu pronta respuesta,
Te seré franco, no se como cambiar la compresión bi el formato de el asset :(
Cita de: ramunda date=1467065644Braltor, gracias por tu pronta respuesta,
Te seré franco, no se como cambiar la compresión bi el formato de el asset :(
Está en el Inspector, propiedades del archivo de audio, abajo de todo hay un slider para elegir la compresión.
Cita de: pioj date=1467079853Está en el Inspector, propiedades del archivo de audio, abajo de todo hay un slider para elegir la compresión.
Gracias por la aclaración Pioj estoy trasteando estas dos opciones a ver si cambia algo.
Bueno despues de probar todo lo probable en lo referido, nada sigue igual, añado un dato , cuando el árbol cae y empieza a sonar el sonido todo se ralentiza osea va a pedales....puede tener algo que ver con que el sonido y la animación no se lleven bien?
aquí lo llamo:
void Update()
{
if (vida <= ) {
vida = ;
Debug.Log ("arbol caeee");
anim.Play ("palmeracae");
audio.PlayOneShot(audio2, 0.5F);
}
}
Gracias
Vale mas descubrimientos...si lo pongo en el Void Start suena bien!!!, pero claro no suena cuando yo quiero osea despues de la animación...tiene que ser algo relacionado con que se reproduzca al mismo tiempo que la animación cuando cae el árbol...pro no atino que demonios es!!
en start se ejecuta 1 sola vez, de pronto estas ejecutando muchas veces en update... mira en el log a ver si hay muchos mensajes de ese debug q tienes ahi
Cita de: Braltor date=1467119868en start se ejecuta 1 sola vez, de pronto estas ejecutando muchas veces en update... mira en el log a ver si hay muchos mensajes de ese debug q tienes ahi
si... así es el log se repite muchas veces árbol cae se repite varias .....que estoy haciendo mal?
la condicion de tu if esta mal, arreglala para q no entre tantas veces... mira si en otro punto se esta cambiando la variable q haga q vuelva a entrar
Cita de: Braltor date=1467120647la condicion de tu if esta mal, arreglala para q no entre tantas veces... mira si en otro punto se esta cambiando la variable q haga q vuelva a entrar
Estimado Braltor llevo horas dándole vueltas a tu respuesta...cuanto mas pienso peor me sale...he intentado esto.
He suprimido el vida=0 que lo veo inecesario o no ya no se que ago :(, pero sigo fallando...se sigue repitiendo el log y sonando mal.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class vidaenemiga : MonoBehaviour {
public static float vida = 5;
public Animation anim;
public float tiempocaida;
public AudioClip audio1;
AudioSource audio;
void Start()
{
audio = GetComponent<AudioSource> ();
}
void Update()
{
if (vida <= )
{
//vida = 0;
audio.PlayOneShot(audio1, 0.3F);
anim.Play ("palmeracae");
Debug.Log ("arbol caeee");
}
}
}
puedes poner un bool q al entrar en el if se pone true, entonces preguntas en la condicion si es false para saber si ya se habia ejecutado
Cita de: Braltor date=1467152505puedes poner un bool q al entrar en el if se pone true, entonces preguntas en la condicion si es false para saber si ya se habia ejecutado
creo que lo entendí y probé esto:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class vidaenemiga : MonoBehaviour {
public static float vida = 5;
public Animation anim;
public float tiempocaida;
public AudioClip audio1;
AudioSource audio;
bool vida_running = false;
void Start()
{
audio = GetComponent<AudioSource> ();
}
void Update()
{
if(vida <= )
vida_running = true;
{
//vida = 0;
audio.PlayOneShot(audio1, 0.3F);
anim.Play ("palmeracae");
Debug.Log ("arbol caeee");
}
}
}
y el resultado mas nefasto todavia ...se activa la animación el debug y toda la pesca automáticamente...se salta el if(vida<0)......agua por todas partes :(
no entiendes lo q es un bloque ni una clausula condicional, debes comenzar por investigar eso, adelante!
Cita de: Braltor date=1467161031no entiendes lo q es un bloque ni una clausula condicional, debes comenzar por investigar eso, adelante!
Bueno, pues "Game Over", agradecer es de sabios y aprender de el que sabe es aun mas razonable, esperaba un ejemplo o teoría rápida, aun que estuviera fuera de contexto, pero en fin , gracias de nuevo.
Aunque entendemos vuestras ansias por aprender, es mejor comenzar estudiando algo de programación básica antes de ponerse a crear nada complejo como un programa o un videojuego.
Cita de: pioj date=1467184423Aunque entendemos vuestras ansias por aprender, es mejor comenzar estudiando algo de programación básica antes de ponerse a crear nada complejo como un programa o un videojuego.
Te entiendo , lo entiendo, no pido que me lo deis masticado pero agradeceria una referencia o sitio donde aprederlo, aveces aprendes mas de una muestra que de una enciclopedia, solo pido eso.Si me das un ejemplo vere como se hace o enfocarme de donde puedo aprenderlo porque he estado mirando y las palabras de Braltor "
no entiendes lo q es un bloque ni una clausula condicional, debes comenzar por investigar eso, adelante! " no se encuentran como tal. saludos.
Lo que te pasa es que ejecutas ese código muchas veces. Lo que te dicen que intentes entender como funciona el if, porque ese ultimo mensaje el código es desastroso.
if (estoymuerto == true){
hago las cosas del arbol, animar, sonido, etc
estoymuerto = false; / aviso que ya no tengo que hacer nada,
}
Si la vida del árbol es menor o igual (imagino que es a 0, nunca he usado un if así) entonces hago lo que sea, ahí tu árbol tiene la vida a cero y en cada frame se ejecuta, ¿es cero? SI.. ejecuta el sonido,¿es cero? si, ejecuta el sonido.....
Por eso te va todo lento, pero imagino que la animación también te está fallando ¿no?, el problema no viene con el sonido, sino con el if. Además imagino que la vida llega a cero en algún sitio ¿no? con cada golpe que le das.
El problema que veo ahí es lo que te digo, la vida llega a cero y repites infinitamente ese código, como te han dicho mira como va el if y que pasa en el evento update() de unity.
Cita de: Ufita date=1467200911Lo que te pasa es que ejecutas ese código muchas veces. Lo que te dicen que intentes entender como funciona el if, porque ese ultimo mensaje el código es desastroso.
if (estoymuerto == true){
hago las cosas del arbol, animar, sonido, etc
estoymuerto = false; / aviso que ya no tengo que hacer nada,
}
Si la vida del árbol es menor o igual (imagino que es a 0, nunca he usado un if así) entonces hago lo que sea, ahí tu árbol tiene la vida a cero y en cada frame se ejecuta, ¿es cero? SI.. ejecuta el sonido,¿es cero? si, ejecuta el sonido.....
Por eso te va todo lento, pero imagino que la animación también te está fallando ¿no?, el problema no viene con el sonido, sino con el if. Además imagino que la vida llega a cero en algún sitio ¿no? con cada golpe que le das.
El problema que veo ahí es lo que te digo, la vida llega a cero y repites infinitamente ese código, como te han dicho mira como va el if y que pasa en el evento update() de unity.
Ufita, antes que nada agradecerte el tiempo y la explicación ya veo el concepto y lo has explicado muy bien,
Así es , el árbol tiene 5 de vida: public static float vida = 5;
La animación, si funciona bien la cree manualmente y no da problemas, solo l sonido en este caso, y es por lo que decis , el árbol muere cada frame y eso retarda el sonido.
La vida se le baja a cada axazo aqui:
using UnityEngine;
using System.Collections;
public class sonidoarbol : MonoBehaviour {
public AudioClip madera;
public GameObject astillas;
public float lifetime;
public Animation anim;
public vidaenemiga vida;
public float lifetime2;
AudioSource audio;
void Start()
{
astillas.SetActive (false);
anim = GetComponent<Animation> ();
audio = GetComponent<AudioSource> ();
}
void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "axa")
audio.PlayOneShot (madera, 0.8F);
astillas.SetActive (true);
vidaenemiga.vida -= 1;
}
void OnTriggerExit(Collider col)
{
astillas.SetActive (false);
}
}
cada axazo cuenta 1 al llegar a 5 muere.
aquí le quito 1: vidaenemiga.vida -= 1;
y evidentemente el objeto del axa lleva el tag "axa", esto va de perlas las atillas salen , el ruido de el axa va perfecto...
En fin basandome en tu amable explicación me rompere la cabeza aver como lo ago.
Saludo cordial
*Braltor ,*pioj,*Ufita.
Como bien decía, una breve explicación vale mas que mil enciclopedias.
Gracias a los 3, LO HE CONSEGUIDO
Mezclando las 3 explicaciones: que se repetía constantemente, que debía : poner un bool q al entrar en el
if se pone true .
Que revisara el if y la guinda final el ejemplo de Ufita:
Aqui esta el resultado!!
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class vidaenemiga : MonoBehaviour {
public static float vida = 5;
public Animation anim;
public float tiempocaida;
public AudioClip audio1;
AudioSource audio;
private bool arbolmuerto;
void Start()
{
audio = GetComponent<AudioSource> ();
}
void Update ()
{
if (vida <= 0f) {
if (!arbolmuerto)
arbolanima ();
{
}
}
}
void arbolanima ()
{
arbolmuerto = true;
audio.PlayOneShot (audio1, 0.3F);
anim.Play ("palmeracae");
Debug.Log ("arbol caeee");
}
}
En lugar de usar el true o false e optado por este if : if (!arbolmuerto)
le digo que si la vida es 0 , pues que esta muerto y llame al void el cual se encargara de cargar las demás acciones que debe hacer el árbol.
Tambien prove con un invoke....pero seguía sin funcionar bien , ahora el sonido va perfecto , la anim perfecta , todo ok!!
GRACIAS A LOS 3.
Por favor no cierren el post para futuros aprendices como yo que les puede venir bien estas explicaciones , para eso dejo el script resultante para que puedan ver mis fallos y las soluciones expuestas.
Saludos y.....hasta pronto :)
Recuerda marcar como Best Answer (Mejor Respuesta) la solución a tu problema, para que todos los usuarios puedan acceder a ella de forma más rápida.