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