martes, 26 de julio de 2016

Script - Pausar juego con UI - Pause a game with UI #Unity3d


En esta entrada procedo a actualizar el código que mostré tiempo atrás en la publicación sobre "#Script para pausar el juego en #unity3d - Pause a game" porque con las últimas actualizaciones de Unity, es más fácil trabajar el HUD o elementos que se muestran en pantalla con el apartado de Interfaz de Usuario o UI que trae el propio motor de Unity, por consecuente esta publicación incluye como trabajar con Imagen y Canvas.

El siguiente Script es formato C# y permite contar pausar el tiempo, y por consecuente, también toda acción dentro de la escena, en otras palabras pausar el juego.

Lo primero a desarrollar es habilitar la opción de la imagen, dando clic en GameObject/UI/Imagen. Para lo cual de forma automática crea el Canvas y EventSystem, no debes de eliminar el EventSystem, porque de hacerlo, se eliminará la opción que permite usar el touch. Luego procedemos a incorporar la imagen que usaremos como textura en formato png para sacar provecho al canal alpha.




Si nos damos cuenta al dar clic en el objeto imagen (hijo de canvas) en la ventana del Inspector encontraremos que podemos cambiar ese color blanco por una imagen como tal, pero este solo admite en formato de SPRITE, por lo cual al incorporar la imagen del botón pausa en las propiedades del mismo debemos de cambiarlo de Texture a Sprite, y luego dar clic en “Aplicar”. Ahora si podremos asignar la imagen del botón pausa, a la imagen que tenemos en el canvas.




Luego de haber asignado la imagen del botón a la image en el canvas, procederemos a adjuntarle a la imagen el componente de button para poder accionar cuando se dé clic sobre la imagen, en caso de no querer realizarlo con imagen, puede realizarlo de forma directa con un botón desde la opción UI.




El componente botón nos permitirá activar la opción cuando demos clic sobre la imagen, no olvidar que el script lo debe de tener la imagen, que a su vez esta será quien active la acción de la pausa o función PausaJuego en mi caso.




Este script incluye una variable pausa de tipo bool (verdadero o falso). En el método Start por defecto estoy indicando que la variable tome valor de falso para que no se congele el tiempo, y en el método PausaJuego ahí procedemos a indicar que si pausa es verdadero sea falso, o si es falso se cambie a verdadero para que proceda o se congele el tiempo.

El Time.timeScale controla el tiempo que está pasando en la escena, también se lo puede usar para activar por ejemplo la sensación de una cámara lenta. Cuando Time.timeScale es de 1,0 el tiempo pasa tan rápido como en tiempo real, cuando es de 0,5 el tiempo pasa 2x más y cuando se pone 0 el juego se detiene.

*C#
----------------------------------------------

bool pausa; //variable pausa

void Start () {
  pausa = false;
}

public void PausaJuego () {
  pausa = !pausa; //si pausa es true, que cambie a false o viceversa
 
  if (pausa){
  Time.timeScale = 0;
  }else{
  Time.timeScale = 1;
  }

}
----------------------------------------------

No hay comentarios:

Publicar un comentario