Unity: secuencias de comandos de movimiento básicas

En esta lección, escribiremos código que hace que un gameObject se mueva hacia arriba, abajo, izquierda y derecha según la entrada del usuario. Esto debería ayudarnos a comprender el flujo de trabajo de las secuencias de comandos de Unity más fácilmente.

Recuerde que cada GameObject tiene al menos un componente: Transform. Lo que es especial es que la transformación de un gameObject también se muestra como variables en el lado de las secuencias de comandos de Unity, por lo que podemos modificarlo mediante código. Esto tampoco está restringido al Transform; todos los componentes de Unity tienen propiedades, a las que se puede acceder mediante variables en secuencias de comandos.

Comencemos con nuestro guión de movimiento. Cree un nuevo guión y asígnele el nombre "Movimiento".

Ahora, abra el guión y debería ver lo mismo que vio en la última lección.

Creemos una variable flotante pública llamada speed. Haciendo una variablepublic in Unity tiene una gran ventaja:

  • La variable aparece como un campo modificable dentro del editor, por lo que no tiene que ajustar manualmente los valores en el código.

public class Movement : MonoBehaviour {
   public float speed;
}

Si guardamos este script sin tocar los otros métodos, debería compilarse en Unity.

(Puede ver cuándo se está compilando mediante el

ícono en la esquina inferior derecha).

Próximo, drag and dropla secuencia de comandos de los activos en el GameObject. Si lo hace correctamente, esto es lo que debería ver en las propiedades de GameObject:

Dado que el valor de velocidad es ajustable y no es necesario cambiar el código todo el tiempo, podemos usar el método update () en lugar de start ().

Consideremos ahora los objetivos del método de actualización:

  • Compruebe la entrada del usuario.

  • Si hay una entrada de usuario, lea las direcciones de entrada.

  • Cambie los valores de posición de la transformación del objeto según su velocidad y dirección. Para hacerlo, agregaremos el siguiente código:

void Update() {
   float h = Input.GetAxisRaw(“Horizontal”);
   float v = Input.GetAxisRaw(“Vertical”);
   
   gameObject.transform.position = new Vector2 (transform.position.x + (h * speed), 
      transform.position.y + (v * speed));

Analicemos ahora el código en breif.

En primer lugar, creamos una variable de punto flotante llamada h (para horizontal), y su valor viene dado por el Input.GetAxisRawmétodo. Este método devuelve -1, 0 o 1 dependiendo de la tecla que haya presionado el jugador en las flechas arriba / abajo / izquierda / derecha.

La clase Input es responsable de obtener información del usuario en forma de pulsaciones de teclas, entrada del mouse, entrada del controlador, etc. El método GetAxisRaw es un poco más difícil de entender, así que volveremos a eso más adelante.

A continuación, estamos updating la posición de nuestro juego Objeto a una nueva posición definida mediante la creación de un nuevo Vector2. El Vector2 toma 2 parámetros, que son susx and yvalores respectivamente. Para el valor de x, proporcionamos la suma de loscurrent posición y su speed, agregando efectivamente una cierta cantidad cada cuadro que se presiona la tecla a su posición.

Guarde este script y regrese a Unity. Unity actualizará automáticamente todos los scripts una vez que se compile correctamente, por lo que no tendrá que volver a adjuntar el script una y otra vez.

Ahora que ha terminado, cambie el valor del speeden las propiedades del GameObject para decir 0.8. Esto es importante porque un valor más alto hará que el jugador se mueva demasiado rápido.

Ahora, haga clic en Play ¡y mira tu primer juego pequeño en acción!

Intente presionar las teclas de flecha y moverse. Para detener el juego, simplemente presione Reproducir nuevamente. Incluso puedes ajustar la velocidad en tiempo real para que no tengas que parar y empezar todo el tiempo.

En la próxima lección, aprenderemos acerca de los cuerpos rígidos y las colisiones.