Unity 3D – Cómo hacer un cuadro de selección como el de un RTS

Lógica del Input y de la cámara

Ahora vamos a manejar los input del usuario, pero sólo vamos a guardar los valores introducidos, de modo que cada componente que los necesite los utilice con su propia lógica.

El código del «InputHandlerScript» es el siguiente:

  1. using UnityEngine;
  2. using System.Collections;
  3. public class InputHandlerScript : MonoBehaviour
  4. {
  5.     //ACCESOS DE TECLADO
  6.     //Camera
  7.     KeyCode _cameraUpKey1 = KeyCode.UpArrow;
  8.     KeyCode _cameraUpKey2 = KeyCode.W;
  9.     KeyCode _cameraDownKey1 = KeyCode.DownArrow;
  10.     KeyCode _cameraDownKey2 = KeyCode.S;
  11.     KeyCode _cameraLeftKey1 = KeyCode.LeftArrow;
  12.     KeyCode _cameraLeftKey2 = KeyCode.A;
  13.     KeyCode _cameraRightKey1 = KeyCode.RightArrow;
  14.     KeyCode _cameraRightKey2 = KeyCode.D;
  15.     //Control
  16.     KeyCode _selectionKey1 = KeyCode.Mouse0;
  17.     KeyCode _selectionKey2 = KeyCode.Return;
  18.     KeyCode _keepSelectionKey1 = KeyCode.LeftShift;
  19.     KeyCode _keepSelectionKey2 = KeyCode.RightShift;
  20.     KeyCode _invertSelectionKey1 = KeyCode.LeftControl;
  21.     KeyCode _invertSelectionKey2 = KeyCode.RightControl;
  22.     //Input State
  23.     public Vector3 _mousePosition;
  24.     public bool _cameraUp;
  25.     public bool _cameraDown;
  26.     public bool _cameraLeft;
  27.     public bool _cameraRight;
  28.     public bool _selectingBegins;
  29.     public bool _selectingEnds;
  30.     public bool _keepSelection;
  31.     public bool _invertSelection;
  32.     // Use this for initialization
  33.     void Start ()
  34.     {
  35.     }
  36.     // Update is called once per frame
  37.     void Update ()
  38.     {
  39.         //Reseteamos el input
  40.         this.ResetKeys();
  41.         //Checkeamos los nuevos valores
  42.         this.CheckInput();
  43.     }
  44.     private void ResetKeys()
  45.     {
  46.         //Guardamos la posición del ratón, por si alguien hace uso de ella
  47.         this._mousePosition = Input.mousePosition;
  48.         this._cameraUp = false;
  49.         this._cameraRight = false;
  50.         this._cameraDown = false;
  51.         this._cameraLeft = false;
  52.         this._selectingBegins = false;
  53.         this._selectingEnds = false;
  54.         //El keepSelection y el invertSelection se resetean cuando se deja de pulsar el botón
  55.     }
  56.     //Handles keyboard and mouse input
  57.     void CheckInput()
  58.     {
  59.         #region Camera
  60.         if (Input.GetKey(_cameraUpKey1)
  61.             || Input.GetKey(_cameraUpKey2))
  62.         {
  63.             this._cameraUp = true;
  64.         }
  65.         if (Input.GetKey(_cameraDownKey1)
  66.             || Input.GetKey(_cameraDownKey2))
  67.         {
  68.             this._cameraDown = true;
  69.         }
  70.         if (Input.GetKey(_cameraLeftKey1)
  71.             || Input.GetKey(_cameraLeftKey2))
  72.         {
  73.             this._cameraLeft = true;
  74.         }
  75.         if (Input.GetKey(_cameraRightKey1)
  76.             || Input.GetKey(_cameraRightKey2))
  77.         {
  78.             this._cameraRight = true;
  79.         }
  80.         #endregion
  81.         #region Control
  82.         if (Input.GetKeyDown(_selectionKey1)
  83.             || Input.GetKeyDown(_selectionKey2))
  84.         {
  85.             this._selectingBegins = true;
  86.         }
  87.         else if (Input.GetKeyUp(_selectionKey1)
  88.             || Input.GetKeyUp(_selectionKey2))
  89.         {
  90.             this._selectingEnds = true;
  91.         }
  92.         if (Input.GetKeyDown(_keepSelectionKey1)
  93.             || Input.GetKeyDown(_keepSelectionKey2))
  94.         {
  95.             this._keepSelection = true;
  96.         }
  97.         if (Input.GetKeyUp(_keepSelectionKey1)
  98.             || Input.GetKeyDown(_keepSelectionKey2))
  99.         {
  100.             this._keepSelection = false;
  101.         }
  102.         else if (Input.GetKeyDown(_invertSelectionKey1)
  103.             || Input.GetKeyUp(_invertSelectionKey2))
  104.         {
  105.             this._invertSelection = true;
  106.         }
  107.         else if (Input.GetKeyUp(_invertSelectionKey1)
  108.             || Input.GetKeyUp(_invertSelectionKey2))
  109.         {
  110.             this._invertSelection = false;
  111.         }
  112.         #endregion
  113.     }
  114. }

Vamos a arrastrarlo al «GameLogic» igual que hicimos con el «GameLogicScript».

Unity 3D – Cómo hacer un cuadro de selección como el de un RTS comentarios en «4»

  1. Me encants está sección *O* ,antes daba un poco de programación,nada del otro mundo pero ya se me ha olvidado casi todo T^T

      1. Sí, la verdad es que este tutorial me ha quedado un poquito bastante denso.

        Espero que con el código fuente, por lo menos la gente pueda trastear y ver cómo está todo si se pierden en algún punto del tutorial y no les sale ;).

  2. Buenas, estaba trasteando y me he quedado un poco colgado en la primera parte con el script, me da un error en la linea 14
    «GameObject fighter = Resources.Load(“FighterObject”)»
    Podrias poner de nuevo la fuente de ejemplo para ver como está la jerarquia y despejar mis dudas? Porque da error.
    Gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *