Noticias

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

Sonido distorsiona

Iniciado por ramunda, Junio 27, 2016, 01:19:21 AM

Tema anterior - Siguiente tema
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.  

Junio 29, 2016, 02:38:36 PM #18 Ultima modificación: Junio 30, 2016, 04:36:22 AM por pioj
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.

Etiquetas: