sábado, 24 de enero de 2015

#Script 2D Character Controller Unity - Controlador de Player en 2D


Como se habrán dado cuenta en #Unity al momento de crear un proyecto nuevo nos permite importar los controles de Character Controller dentro de los cuales contamos con los #Scripts de la 1era. Persona (FPC-First Person Controller) y 3ra. Persona (3rd Person Controller). 


Estos Assets nos ahorran tiempo al momento de programar un juego ya sea en tercera o en primera persona. Pero ¿Qué pasa cuando necesitamos realizar nuestro juego en 2D, osea que solo el Player se vea afectado en las coordenadas X y Y?.


Para resolver ese inconveniente a continuación adjunto el Script del Controller 2D, el mismo que lo puedes encontrar también en el sitio oficial de Unity.

Para usar este Script debemos de realizar los siguientes pasos:

  • Crear una Scene nueva, en la cual vamos a poner dos cubos, uno que asemeje al piso, y el otro que será nuestro Player.
  • Para habilitar la vista en 2D, debemos de dar clic en la parte superior de la ventana de Scene donde se encuentra el icono "2D" al habilitar este icono, la vista de la cámara se hará plana y en los ejes solo podremos usar en X y Y.

  • Todos los objetos que nosotros colocamos en Unity vienen con la propiedad BoxCollider la misma que afecta en los 3 ejes (X, Y, Z) por lo tanto para usarlos con el controller 2D deberemos de eliminarlos y usar las mismas propiedades pero en 2D. Para usar las propiedades en 2D, deben de ir a al menú/Component/Physics 2D y seleccionar el comportamiento que deseen.

  • Para el cubo que va a ser de Player le asignaremos el Componente / Physics2D , Rigibody2D (para que caiga y se vea afectado por la gravedad) y BoxCollider (para que colisione con el piso), y para el cubo que hará de piso le pondremos el compomenente BoxCollider.

  • La escena nos debe de quedar de la siguiente forma: 1 Cubo Player, 1 Cubo Piso. Como se dan cuenta en la siguiente imagen he colocado una esfera del lado derecho para que simule como si fuera la boca. Esto lo hago porque el Script facilita que cuando el Cubo retroceda la "boca" también se cambie de posición facilitando mayor fluidez en el movimiento y realismo. Esta esfera la ponemos como hijo del Player.

  • Una vez que tenemos nuestro escenario como se muestra en la imagen, procederemos a crear el Script en C#.

* C#
-------------------------------------------
using UnityEngine;
using System.Collections;

public class Controlador2D : MonoBehaviour {
public float maxSpeed = 10f;
bool facingRight = true; //posicion de la cara
bool grounded = false; //tome con el piso
public Transform groundCheck;
float groundRadius = 0.2f;
public LayerMask whatIsGround; //gameobject vacio que sirve de guia
public float jumpForce = 400f; //fuerza de salto

void FixedUpdate () {

//para que salte
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);

//para que se mueva
float move = Input.GetAxis ("Horizontal");
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
if (move > 0 &&!facingRight){
Flip();
}
if (move < 0 && facingRight){
Flip();
}
}

//voltea la cara al lugar del movimiento
void Flip(){
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}

void Update () {
if (grounded && Input.GetKeyDown(KeyCode.Space)){
rigidbody2D.AddForce(new Vector2 (0,jumpForce));
}
}
}
-------------------------------------------


  • Luego de asignar el Script al Player (Cubo) podemos observar que necesitamos llenar la variable "groundCheck" en la cual le pondremos el tome o límite del player, en otras palabras es límite donde termina los pies del player. Esto sirve para que Controllador sepa sobre que debe de pararse (el piso).

  • Para crear la zona del "grounded" o pies, vamos a crear un GameObject vacío al que llamaremos "Pies" y en la ventana del Inspector del GameObjecto vacío le cambiaremos la visualización del icono al azul, para poder visualizarlo en la escena.



  • El GameObject vacío que hemos llamado Pies lo colocamos debajo del Cubo-Player para que indique cual es el límite del Player, y en otras palabras para que sepa donde se encuentran los pies de nuestro Player. Este GameObject lo ponemos como hijo del Player.


  • Al Player le asignaremos el Layer "Player", sino está creado procederemos a crear el Layer necesario. Una vez asignado el Layer Player, nos consultará si deseamos que todos los objetos hijos del Player deben de tener el mismo Layer, para lo que indicaremos que sí.

  • Ahora si procedemos a indicar los valores en el script del Player, como se muestra en la imagen adjunta. En la variable "Ground Check" le asignamos nuestro GameObject vacío llamado "Pies". La variable "JumpForce" significa la fuerza del salto del Player. Hasta aquí ya podemos mover nuestro Player de derecha a izquierda, y la esfera (cara), se volteará al lugar donde nos estamos moviendo.
  • Para que el Player pueda saltar debemos de modificar la variable "What Is Ground", en este momento nuestra variable está con el valor "Nothing" para lo cual abriremos las opciones y seleccionaremos "Everything", y luego abriremos de nuevo la opción y le quitamos el Check a Player. Y en la variable ahora apara el texto "Mixed".




  • Luego de realizar ese cambio nuestro Player ya podrá saltar.
El link original del procedimiento que he indicado en la parte superior lo encuentras en LINK.


Si tienes alguna consulta, no dudes en escribirme.

No hay comentarios:

Publicar un comentario