El libro "Unidad para el desarrollador. Juegos móviles multiplataforma »

imagen Este libro está dirigido a todos los que quieran crear juegos, pero que no tengan experiencia previa en desarrollo. Unity admite varios lenguajes de programación. En este libro, usaremos C #. Antes de comenzar a crear juegos, debe comprender los conceptos básicos de su diseño, así como el motor del juego Unity, por lo que en la primera parte del libro estudiaremos estos temas. En la segunda y tercera parte, consideraremos el proceso de creación de juegos bidimensionales y tridimensionales, respectivamente, y en la cuarta parte hablaremos sobre otras características de Unity, cuyo conocimiento será útil para usted.

6. La implementación del juego con trampas y objetivos.


Trampas simples

La mayor parte de este juego consiste en manejar los toques de varios objetos: trampas, tesoros, puntos de salida, etc. Teniendo en cuenta lo importante que es determinar cuándo tocar objetos específicos, crearemos un script común que genere un Evento de Unidad cuando cualquier objeto con la etiqueta "Jugador" los toque. Este evento se configurará de manera diferente para diferentes objetos: las trampas informarán al administrador del juego que el gnomo ha recibido daños, el tesoro informará que el gnomo ha recogido el tesoro y el punto de salida es que el gnomo ha llegado a la salida.

Ahora cree una nueva secuencia de comandos C # en un archivo llamado SignalOnTouch.cs y agregue el siguiente código:

using UnityEngine.Events;  //  UnityEvent,     "Player"  //  . [RequireComponent (typeof(Collider2D))] public class SignalOnTouch : MonoBehaviour {  // UnityEvent      .  //     . public UnityEvent onTouch;   //    true,      AudioSource. public bool playAudioOnTouch = true;  //       ,  //  SendSignal. void OnTriggerEnter2D(Collider2D collider) {  SendSignal (collider.gameObject); }   //      , //  SendSignal. void OnCollisionEnter2D(Collision2D collision) {   SendSignal (collision.gameObject);  }    //    "Player"      //  UnityEvent,    .  void SendSignal(GameObject objectThatHit) {   //    "Player"? if (objectThatHit.CompareTag("Player")) {     //    ,     if (playAudioOnTouch) {  var audio = GetComponent<AudioSource>();   //     //     ,  //    if (audio &&     audio.gameObject.activeInHierarchy) audio.Play();   }   //      onTouch.Invoke();     }   }  } 

La base de la clase SignalOnTouch es el método SendSignal, que se llama mediante los métodos OnCollisionEnter2D y OnTriggerEnter2D. El motor de Unity llama a los dos últimos métodos cuando el objeto toca el colisionador o cuando el objeto cae dentro del alcance del disparador. El método SendSignal verifica la etiqueta del objeto y, si almacena la cadena "Player", genera un evento Unity.
Ahora que tiene la clase SignalOnTouch, puede agregar la primera trampa.

1. Importar sprites de objetos. Importe el contenido de la carpeta Sprites / Objects al proyecto.

2. Agregue las espigas marrones. Encuentra el sprite SpikesBrown y arrástralo a la escena.

3. Configure el objeto con púas. Agregue los componentes PolygonCollider2D y SignalOnTouch al objeto claveteado.

Agregue una nueva función al evento SignalOnTouch. Arrastre el Game Manager al campo de objeto y seleccione la función GameManager.TrapTouched, como se muestra en la Fig. 6.1.

imagen

4. Convierta el objeto claveteado en una plantilla. Arrastre el objeto SpikesBrown desde el panel Jerarquía a la carpeta Nivel. Como resultado, se creará una plantilla con la que podrá crear varias copias del objeto.

5. Pruébalo. Lanza el juego. Haz que el gnomo golpee las espinas. ¡Este gnomo debe caer y reaparecer!

Tesoro y salida


Después de agregar con éxito la trampa que mata al gnomo, es hora de agregar la oportunidad de ganar el juego. Para hacer esto, agregue dos elementos nuevos: un tesoro y un punto de salida.

Un tesoro es un sprite en el fondo de un pozo que detecta el toque de un gnomo y envía una señal al Game Manager. Cuando esto sucede, el administrador del juego le dice al gnomo que tomó el tesoro, después de lo cual el sprite con la imagen de la mano vacía del gnomo es reemplazado por el sprite con la imagen de la mano que sostiene el tesoro.

Un punto de salida es otro sprite ubicado en la parte superior del pozo. Como un tesoro, detecta un toque del gnomo y lo notifica al administrador del juego. Si en este momento el gnomo posee el tesoro, el jugador recibe la victoria en el juego.

El trabajo principal en estos dos objetos lo realiza el componente SignalOnTouch: cuando el gnomo llega al punto de salida, se debe llamar al método ExitReached del administrador del juego, y cuando el gnomo toca el tesoro, se debe llamar al método TreasureCollected.

Comencemos creando un punto de salida y luego agreguemos un tesoro.

Crear punto de salida


En primer lugar, importamos sprites.

1. Importar sprites de fondo de nivel. Copie la carpeta Sprites / Background del paquete descargado con recursos en la carpeta Sprites del proyecto.

2. Agregue un sprite Top. Colóquelo justo debajo del objeto Cuerda. Este sprite servirá como punto de salida.

3. Configurar el sprite. Agregue el componente 2D Box Collider al sprite y marque la casilla Is Trigger. Haga clic en el botón Editar colisionador y cambie el tamaño del colisionador para que sea corto y ancho, como se muestra en la Fig. 6.2.

imagen

4. Configure el envío de una señal al administrador del juego en el momento de tocar el sprite. Agregue el componente SignalOnTouch al sprite. Agregue un elemento a la lista de eventos del componente y conéctelo al Game Manager. Seleccione la función GameManager.ExitReached. Ahora tocando el gnomo de salida llamará al método ExitReached del Game Manager.
Ahora agrega el tesoro.

El tesoro funciona así: de forma predeterminada, el objeto Treasure muestra un sprite con la imagen del tesoro. Cuando el gnomo lo toca, se llama al método TreasureCollected del Game Manager y se muestra otro sprite en lugar del tesoro, que muestra que el tesoro ha sido recogido. Cuando el gnomo muere, el objeto Treasure regresa a su estado original y muestra el sprite con la imagen del tesoro nuevamente.

Dado que el cambio de sprites en el juego se realizará con bastante frecuencia, lo verás cuando mejoremos los gráficos, tiene sentido crear una clase universal para cambiar sprites y usarlo en el objeto del tesoro.

Cree un nuevo script de C # llamado SpriteSwapper.cs. Agregue el siguiente código:

 //     . ,    //   ' '   ' '. public class SpriteSwapper : MonoBehaviour { // ,   . public Sprite spriteToUse; //  ,    //    . public SpriteRenderer spriteRenderer; //  .    ResetSprite. private Sprite originalSprite; //  . public void SwapSprite() { //      ... if (spriteToUse != spriteRenderer.sprite) { //    originalSprite originalSprite = spriteRenderer.sprite;  //    . spriteRenderer.sprite = spriteToUse; } } //   . public void ResetSprite() { //     ... if (originalSprite != null) {  // ...  . spriteRenderer.sprite = originalSprite; }  } } 

La clase SpriteSwapper está diseñada para dos operaciones: cuando se llama al método SwapSprite, se pasa otro Sprite al visualizador SpriteRenderer conectado al objeto del juego para su visualización. En este caso, el sprite original se almacena en una variable. Cuando se llama al método ResetSprite, el visualizador recibe el sprite original para mostrar.
Ahora puedes crear y personalizar el objeto Treasure.

1. Agregue un sprite con una imagen del tesoro. Encuentra el sprite TreasurePresent y agrégalo a la escena. Colóquelo cerca del fondo, pero de tal manera que el gnomo pueda atraparlo.

2. Agregue un colisionador para el tesoro. Seleccione el sprite con la imagen del tesoro y agregue el componente Box Collider 2D. Marque la casilla Es Trigger.

3. Agregue y configure un script para cambiar el sprite. Agregue el componente SpriteSwapper. Arrastre el sprite con la imagen del tesoro al campo Sprite Renderer de este componente. Luego busca el sprite TreasureAbsent y arrástralo al campo Sprite To Use del cambiador de sprites.

4. Agregue y configure el componente de envío de señal en respuesta a un toque. Agregue el componente SignalOnTouch. Agregue dos elementos a la lista On Touch:

  • primer enlace al objeto Game Manager y seleccione el método GameManager.TreasureCollected;
  • asocie el segundo con el sprite del tesoro (es decir, con el objeto que está configurando actualmente) y seleccione el método SpriteSwapper.SwapSprite.

5. Agregue y configure el componente Resettable. Agregue un componente reiniciable al objeto. Agregue un solo elemento a la lista On Touch, seleccione el método SpriteSwapper.ResetSprite y asócielo con el objeto Treasure.

Como resultado, la configuración en el panel del inspector debe verse como se muestra en la Fig. 6.3.

6. Prueba el juego. Inicia el juego y toca el tesoro. En ese momento, el tesoro desaparecerá; si después de eso el gnomo muere, el tesoro reaparecerá en su lugar después de la creación del nuevo gnomo.

Agregar fondo


Actualmente, el juego se desarrolla contra un fondo azul opaco establecido por defecto en Unity. En esta sección, agregaremos un fondo temporal, que reemplazaremos con un sprite de fondo cuando comencemos a mejorar el diseño gráfico del juego.

1. Agregue un rectángulo de fondo. Abra el menú GameObject y seleccione 3D ObjectQuad (3D ObjectRectangle). Nombra el nuevo objeto Fondo.

2. Mueva el fondo al fondo. Para evitar la situación en la que se dibujará un fondo rectangular en la parte superior de los sprites del juego, muévalo al fondo, lejos de la cámara. Para hacer esto, establezca la coordenada Z del rectángulo en 10.

imagen

3. Establezca el ancho y la altura del rectángulo de fondo. Encienda la herramienta Rect presionando la tecla T, y luego use las manijas para establecer las dimensiones del rectángulo. El borde superior del fondo debe estar al mismo nivel que el sprite en la parte superior de la escena y el fondo con el tesoro (Fig. 6.4).

imagen

4. Prueba el juego. Después de comenzar, el fondo del campo de juego debe volverse gris oscuro.

»Se puede encontrar más información sobre el libro en el sitio web del editor
» Contenidos
» Extracto

Cupón de 20% de descuento para vendedores ambulantes - Unity

Source: https://habr.com/ru/post/es413531/


All Articles