En este momento estás viendo Cómo detener un if por un segundo antes de ejecutar el resto de comandos

 – Unity

Cómo detener un if por un segundo antes de ejecutar el resto de comandos – Unity

Cómo detener un if por un segundo antes de ejecutar el resto de comandos

– UnityAssets3Free

hola , soy juansito y aqui os traigo
esta unity pregunta

Estoy trabajando en un script para un menú de pausa y no sé cómo hacer que se detenga antes de que comience a ejecutarse la siguiente línea Este es el código, lo pido porque ejecuta el «si» varias veces, porque detecta que todavía estoy presionando el botón Cancelar. (Uso C# y trabajo en Unity 5) Gracias

 using UnityEngine;
using System.Collections;

public class MenuPausa : MonoBehaviour 

public GameObject menuPausa;

private bool pausaMenu = false;

// Use this for initialization
void Start () 



// Update is called once per frame
void Update ()  pausaMenu == false) 
        menuPausa.SetActive (true);
        Time.timeScale = 0;
        WaitForSeconds(1); 
        pausaMenu = true;
     else 
        menuPausa.SetActive (false);
        Time.timeScale = 1;
        Invoke("waiting",0.3f);
    

4 respuestas 4

Yo usaría una corrutina algo como esto:

bool paused = false;

void Update ()

    if (paused) // exit method if paused
        return;

    if (Input.GetButtonDown("PauseButton")) 
        StartCoroutine(OnPause()); // pause the script here


// Loops until cancel button pressed
// Sets pause flag 
IEnumerator OnPause ()

    paused = true;

    while (paused == true) // infinite loop while paused
    
        if (Input.GetButtonDown("Cancel")) // until the cancel button is pressed
        
            paused = false;
        
        yield return null; // continue processing on next frame, processing will resume in this loop until the "Cancel" button is pressed
    

Esto simplemente «pausa» y reanuda ese guión individual. Todos los demás scripts continuarán ejecutando sus métodos de actualización. Para pausar métodos independientes de la velocidad de fotogramas (es decir, físicos), establezca Time.timeScale = 0f cuando haga una pausa y vuelva a 1f cuando no esté en pausa. Si desea pausar todos los demás scripts y dependen de la velocidad de fotogramas (es decir, métodos de actualización), use un indicador de pausa global en lugar de la variable de pausa local utilizada en este ejemplo y asegúrese de que el indicador esté configurado en cada método de actualización, como en este ejemplo

Pido disculpas si no lo entiendo bien, pero me parece que está abriendo y cerrando un menú de pausa con el botón «Cancelar», y que su script parece cerrarlo inmediatamente después de abrirlo debido al botón «Cancelar» todavía presionado. También me parece que este script está destinado a ser un componente del objeto de menú que se activa y desactiva. Si ese es el caso, sugiero lo siguiente:

Haga que este script se use en un objeto que no sea el menú en sí (como un objeto MenuManager o algo así; también cambiaría el nombre de este script a MenuManger para evitar confundirlo con el menú real) que permanecerá activo en la escena. Tenga un objeto PauseMenu en la escena que esté asignado a la propiedad «menuPause» de este MenuManager. Luego eliminaría la variable pauseMenu. Además, asegúrese de que este script se agregue como un componente SOLAMENTE a un objeto (el MenuManager), de lo contrario, un segundo objeto podría actualizarse en el mismo marco y deshabilitar el menú nuevamente.

Al final del método, ponga

Thread.Sleep(1000);

Detiene la ejecución durante 1000 milisegundos == 1 segundo. ¿Es suficiente esta solución simple o necesita una solución más compleja con un temporizador?

Puede usar un cronómetro, ingresarlo en la barra de herramientas, cambiar el intervalo en milisegundos y, una vez hecho esto, usar los scripts timer.Start(); y timer.Stop();
es lo que usé.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

por hoy,espero que te halla servido

Deja una respuesta