Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - juanchini220

#1
Hola amigos de Stratos:

Estoy con un proyecto en el que necesito hacer que una puerta tirada por cadenas reproduzca varios sonidos.

-El primer sonido es cuando estoy dentro de un trigger (que es cuando la puerta se abre añadiendo fuerza al rigidbody de la misma).
-El segundo es cuando salgo del trigger (que es cuando la puerta cae por su propio peso).
-Y el tercero es cuando la puerta cae y golpea el suelo.

La puerta se levanta cuando estoy dentro de un trigger y estos son  los script involucrados:
using UnityEngine;
using System.Collections;

public class TriggerActivadorPuno : MonoBehaviour {

    public bool toca;
    public PunoFuerza scriptPuno;
   
    void Start (){
   

    }
   
    void OnTriggerStay (Collider infotrigger){
        if (infotrigger.transform.tag == "PlayerAzul"){
            toca = true;
            scriptPuno.activado = true;
            }
    }

    void OnTriggerExit (Collider infotrigger){

        if (infotrigger.transform.tag == "PlayerAzul"){

            toca = false;
            scriptPuno.activado = false;
        }
    }
   



Y este es el otro:
using UnityEngine;
using System.Collections;

public class PunoFuerza : MonoBehaviour {

    public bool activado;
    public float fuerza;

    // Use this for initialization
    void Start () {
   
    }
   
    // Update is called once per frame
    void FixedUpdate () {
        if (activado){
            rigidbody.AddForce(0,fuerza,0);

        }
    }
}

Luego tengo otro script que se comunica con la cámara cuando choca con el suelo así se reproduce una animación en la que tiembla la cámara:
using UnityEngine;
using System.Collections;

public class TriggerGolpeCamara : MonoBehaviour {

    public bool temblar;
    public float tiempo;

    void Start (){


       
    }
   
    void OnTriggerEnter (Collider infotrigger){
        if (infotrigger.transform.tag == "Golpe"){
            temblar = true;


        }
    }
   


    void Update (){
        if (temblar){
            tiempo = tiempo + 1f*Time.deltaTime;
           
            if(tiempo >= 0.5f){
                temblar = false;
                tiempo = 0;
            }
        }

    }
   
}

Y este es el de la cámara:
using UnityEngine;
using System.Collections;

public class ControlTemblar : MonoBehaviour {
    public TemblarCamaraEvento scriptTembalarEvento;
    public TriggerGolpeCamara scriptTriggerGolpeCamara;
    public bool activar;
    public float tiempo;
    // Use this for initialization
    void Start () {
   
    }
   
    // Update is called once per frame
    void Update () {
   
        if (scriptTembalarEvento.temblar || scriptTriggerGolpeCamara.temblar){

            activar = true;
            tiempo = tiempo + 1*Time.deltaTime;
        }

        if (tiempo >= 0.5f){

            activar = false;
            tiempo = 0f;
        }
        gameObject.GetComponent<Animator>().SetBool("Activar", activar );

    }
}

El problema viene ahora..

He intentado hacer que cuando la fuerza este activada se reproduzca un sonido en otro gameobject (dado que quiero que el sonido se detenga cuando el otro esta reproduciendo)  y lo mismo al estar desactivada. Y lo único que me funciona, y mal, es el sonido del golpe que se reproduce usando el bool temblar del script TriggerGolpeCamara.
Este es el script (No me maten por favor!):
using UnityEngine;
using System.Collections;

public class PunoControlSonidos : MonoBehaviour {
    public GameObject bajadaSonido;
    public GameObject subidaSonido;
    public GameObject golpeSonido;

    public PunoFuerza scriptPunoFuerza;
    public TriggerGolpeCamara scriptTriggerGolpeCamara;

    public bool subiendo;
    public bool golpeando;
    public bool bajando;


    // Use this for initialization
    void Start () {
   
    }
   
    // Update is called once per frame
    void Update () {
   
        if(scriptPunoFuerza.activado ){
            subiendo = true;



        }
        if(!scriptPunoFuerza.activado && !scriptTriggerGolpeCamara.temblar){
            bajando = true;

        }

        if(scriptTriggerGolpeCamara.temblar){
            golpeando = true;

        }




        if(subiendo){
            subidaSonido.GetComponent<AudioSource>().audio.Play();
            bajadaSonido.GetComponent<AudioSource>().audio.Stop();
            subiendo = false;
            print ("estoy Subiendo");
        }

        if (bajando && !subiendo && !golpeando){
            bajadaSonido.GetComponent<AudioSource>().audio.Play();
            subidaSonido.GetComponent<AudioSource>().audio.Stop();
            bajando = false;
            print ("estoy Bajando");
        }

        if (golpeando){
            golpeSonido.GetComponent<AudioSource>().audio.Play();
            bajadaSonido.GetComponent<AudioSource>().audio.Stop();
            golpeando = false;
            print ("he golpeado");

        }



    }
}

Espero que me haya explicado bien dado que estoy totalmente bloqueado en eso y no encuentro nada en google y ni hablar con la documentación de Unity.

Ya está solucionado!

El problema radicaba que al activar audio.play con un bool desde Update( )  hace que el sonido comience desde el principio cada ves que los frames se actualizan. 

La solución que conseguí fue esta:
using UnityEngine;
using System.Collections;

public class PunoControlSonidos : MonoBehaviour {
    public GameObject bajadaSonido;
    public GameObject subidaSonido;
    public GameObject golpeSonido;

    public PunoFuerza scriptPunoFuerza;
    public TriggerGolpeCamara scriptTriggerGolpeCamara;

    public bool tocaTecho;


    // Use this for initialization
    void Start () {
   
    }


    void OnTriggerEnter ( Collider infocollider  ) {

        if (infocollider.transform.name == "Techo"){
            tocaTecho = true;
        }
    }

    void OnTriggerrExit (Collider infocollider){
        if (infocollider.transform.name == "Techo"){
            tocaTecho = false;
        }
    }


    // Update is called once per frame
    void Update () {
   
        if(scriptPunoFuerza.activado && !subidaSonido.GetComponent<AudioSource>().audio.isPlaying && !tocaTecho){
            //subiendo = true;
            subidaSonido.GetComponent<AudioSource>().audio.Play();
            bajadaSonido.GetComponent<AudioSource>().audio.Stop();
            print ("estoy Subiendo");
        }

        if(!scriptPunoFuerza.activado && !bajadaSonido.GetComponent<AudioSource>().audio.isPlaying && !scriptTriggerGolpeCamara.abajo){
            //bajando = true;
            bajadaSonido.GetComponent<AudioSource>().audio.Play();
            subidaSonido.GetComponent<AudioSource>().audio.Stop();
            print ("estoy Bajando");
            tocaTecho = false;
        }

        if(scriptTriggerGolpeCamara.temblar && !golpeSonido.GetComponent<AudioSource>().audio.isPlaying){
            //golpeando = true;
            golpeSonido.GetComponent<AudioSource>().audio.Play();
            bajadaSonido.GetComponent<AudioSource>().audio.Stop();
            print ("he golpeado");

        }

        if (tocaTecho){

            subidaSonido.GetComponent<AudioSource>().audio.Stop();
        }


}

Espero que sea de ayuda para alguien!
#2
General / Re:¿ERES NUEVO EN STRATOS? ¡PRESÉNTATE AQUÍ!
23 de Diciembre de 2014, 12:49:55 AM
Hola a todos:

Para empezar os comento que hace un año he hecho un curso de diseño y programación de videojuegos en Unity.
Por ahora tengo dos videojuegos publicados en Google Play.
Aquí os dejo los enlaces:

https://play.google.com/store/apps/developer?id=Engrossed+Games

Ahora me encuentro trabajando con un socio que se dedica a la parte artística de los proyectos que llevamos a cabo  y yo me dedico a la parte interactiva.

Espero poder ser de ayuda en un futuro al igual que vosotros conmigo!

Un gran saludo para todos!





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.