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

Y ahora vamos a crear el «Camera Script», donde recogemos los valores del «InputHandlerScript» para mover la cámara. El código sería el siguiente:

  1. using UnityEngine;
  2. using System.Collections;
  3.     public class CameraScript : MonoBehaviour
  4.     {
  5.         //CONSTANTES DE CÁMARA
  6.         //Velocidad de movimiento de la cámara
  7.         const float CAMERA_SPEED = 30.0f;
  8.         //Margen de pantalla donde se podrá mover la cámara situando allí el ratón
  9.         const int CAMERA_MOVE_MARGIN = 60;
  10.         //Manejador de input
  11.         InputHandlerScript _input;
  12.         // Use this for initialization
  13.         void Start()
  14.         {
  15.             //Guardamos la referencia al input en nuestra clase
  16.             _input = GameObject.Find(«GameLogic»).GetComponent<InputHandlerScript>();
  17.         }
  18.         // Update is called once per frame
  19.         void Update()
  20.         {
  21.             //Declaramos un vector velocidad de la Cámara
  22.             Vector3 cameraVector;
  23.             //Comprobamos si el ratón se encuentra en los margenes de movimiento
  24.             CheckMousePosition(out cameraVector);
  25.             //Y ahora comprobamos las entradas del teclado
  26.             if (_input._cameraUp)
  27.                 cameraVector.z = CAMERA_SPEED;
  28.             else if (_input._cameraDown)
  29.                 cameraVector.z = -CAMERA_SPEED;
  30.             if (_input._cameraRight)
  31.                 cameraVector.x = CAMERA_SPEED;
  32.             else if (_input._cameraLeft)
  33.                 cameraVector.x = -CAMERA_SPEED;
  34.             //Movemos la cámara en el vector que hemos especificado
  35.             transform.Translate(cameraVector * Time.deltaTime, Space.World);
  36.         }
  37.         void CheckMousePosition(out Vector3 cameraVector)
  38.         {
  39.             cameraVector = new Vector3();
  40.             if (_input._mousePosition.x < CAMERA_MOVE_MARGIN)
  41.             {
  42.                 cameraVector.x = -CAMERA_SPEED;
  43.             }
  44.             else if (_input._mousePosition.x > (Screen.width – CAMERA_MOVE_MARGIN))
  45.             {
  46.                 cameraVector.x = CAMERA_SPEED;
  47.             }
  48.             if (_input._mousePosition.y < CAMERA_MOVE_MARGIN)
  49.             {
  50.                 cameraVector.z = -CAMERA_SPEED;
  51.             }
  52.             else if (_input._mousePosition.y > (Screen.height – CAMERA_MOVE_MARGIN))
  53.             {
  54.                 cameraVector.z = CAMERA_SPEED;
  55.             }
  56.         }
  57.     }

Este script lo arrastraremos al «Main Camera». El proyecto debería quedarnos así:

Comprobamos que ahora podemos mover la cámara con el ratón y con el teclado. Si no es así, es que nos hemos olvidado de arrastrar alguno de los scripts.

En este caso, estamos moviendo la cámara, pero si controlásemos el input desde, por ejemplo, una de las naves, ésta se movería igual. Con algo tan sencillo como esto podemos mover tanto una cámara como al protagonista de nuestra historia o lo que más rabia nos dé, así como añadirle acciones, o llamar a un menú de pausa.

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 *