Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Temas - rayser

#1
Me encuentro bloqueado a la hora de ejecutar acciones tras un determinado tiempo. En este caso querría cambiar de escena tras cinco segundos de haber finalizado la partida, pero me ocurren varios problemas. Si pongo la velocidad a cero para que la bola no se mueva, desaparece el objeto por lo que desaparece el script y no llama a la siguiente escena. Y probando con la función Time.timeScale no parece hacer nada.
 
Me gustaría saber la forma correcta de pausar el juego para después llamar a una función después de un tiempo específico.
 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Threading;
using UnityEngine.SceneManagement;
public class Ball : MonoBehaviour {
    public float speed = 15;
    public int scoreFinal = 5;
    public Text scoreLeft;
    public Text scoreRight;
    public Text resultFinal;
    public int segundosAumentarVelocidad = 10;
    public AudioSource[] AudioClips = null;
    private float contadorSegundos = ;
    // Use this for initialization
    void Start ()
    {
        AudioClips = GetComponents<AudioSource>();
        GetComponent<Rigidbody2D>().velocity = Vector2.right * speed;
    }
    void FixedUpdate()
    {
        contadorSegundos += Time.smoothDeltaTime;
        //Aumentar la velocidad de la bola cada x segundos
        if(contadorSegundos >= segundosAumentarVelocidad)
        {
            speed = speed + 1;
            contadorSegundos = ;
        }
    }
    void OnCollisionEnter2D(Collision2D col)
    {
        //Golpea la pala izquierda
        if(col.gameObject.name == "RacketLeft")
        {
            //Se calcula el hitFactor
            float y = hitFactor(transform.position, col.transform.position, col.collider.bounds.size.y);
            //Calcular dirección
            Vector2 dir = new Vector2(1, y).normalized;
            //Asignar velocidad
            GetComponent<Rigidbody2D>().velocity = dir * speed;
            //Activar sonido
            //sonidopala.play();
            AudioClips[].Play();
        }
        //Golpea la pala derecha
        if (col.gameObject.name == "RacketRight")
        {
            //Se calcula el hitFactor
            float y = hitFactor(transform.position, col.transform.position, col.collider.bounds.size.y);
            //Calcular dirección
            Vector2 dir = new Vector2(-1, y).normalized;
            //Asignar velocidad
            GetComponent<Rigidbody2D>().velocity = dir * speed;
            //Activar sonido
            //sonidopala.play();
            AudioClips[].Play();
        }
        //Golpea las paredes arriba y abajo
        if (col.gameObject.name == "WallTop" || col.gameObject.name == "WallBottom")
        {
            //Activar sonido
            //sonidopared.play();
            AudioClips[1].Play();
        }
        //Golpea las paredes izquierda y derecha
        if (col.gameObject.name == "WallLeft" || col.gameObject.name == "WallRight")
        {
            //Activar sonido
            //sonidopared.play();
            AudioClips[2].Play();
            //Sumar puntos
            if(col.gameObject.name == "WallLeft")
            {
                scoreRight.text = (int.Parse(scoreRight.text) + 1).ToString();
                if(int.Parse(scoreRight.text) == scoreFinal)
                {
                    resultFinal.text = "El jugador " + 2 + " ha ganado";
                    //GetComponent<Rigidbody2D>().velocity = Vector2.right * 0;
                    //speed = 0;
                    Time.timeScale = ;
                    //Al pasar cinco segundos salta a la escena de créditos
                    //StartCoroutine(cambiarEscena());
                    //Invoke("cambiarEscena", 0.5f);
                    Invoke("cambiarEscena", 5);
                }
            }
            else
            {
                scoreLeft.text = (int.Parse(scoreLeft.text) + 1).ToString();
                if(int.Parse(scoreLeft.text) == scoreFinal)
                {
                    resultFinal.text = "El jugador " + 1 + " ha ganado";
                    //GetComponent<Rigidbody2D>().velocity = Vector2.right * 0;
                    //speed = 0;
                    Time.timeScale = ;
                    //Al pasar cinco segundos salta a la escena de créditos
                    //StartCoroutine(cambiarEscena());
                    //Invoke("cambiarEscena", 0.5f);
                    Invoke("cambiarEscena", 5);
                }
            }
        }
    }
    float hitFactor(Vector2 ballPos, Vector2 racketPos, float racketHeight)
    {
        return (ballPos.y - racketPos.y) / racketHeight;
    }
    /*private IEnumerator cambiarEscena()
    {
        Debug.Log("pr");
        yield return new WaitForSeconds(5);
        Debug.Log("pr2");
        SceneManager.LoadScene("Credits");
    }*/
    void cambiarEscena()
    {
        Debug.Log("pr");
        SceneManager.LoadScene("Credits");
    }
}

 
 
#2
General (Antiguo) / Saludos
Julio 19, 2016, 05:41:28 PM
Hola, soy rayser. Mi campo es la programación pero soy un recién iniciado en Unity.