Un controlador de personajes puede ayudarte a implementar una física de movimiento simple en tu juego.
Puede acercarse a los controladores de personajes de Unity3D desde varios ángulos. Si usa una biblioteca con clases y funciones poderosas, crear un controlador de personajes basado en la física puede ser un lugar divertido para comenzar el desarrollo de su juego.
Paso 1: crea una escena con objetos de jugador y terreno
Una vez que Unity esté abierto y haya creado un nuevo proyecto, puede comenzar agregando un par de objetos a su escena. Puede crear estos objetos en el orden que desee, pero asegúrese de utilizar la configuración correcta. Si bien este proyecto es básico, es una excelente manera de empezar con la unidad.
Un objeto plano 3D para terreno
El primer objeto que debe agregar a su escena es un avión. Haga clic con el botón derecho dentro del panel de jerarquía, desplace el cursor sobre
Objeto 3Dy seleccione Avión de la lista. Puede ajustar el tamaño del avión para proporcionar un área de prueba más grande, pero no necesita hacer nada más.Un modelo de reproductor de objetos de cubo
A continuación, es hora de agregar un cubo a la escena para que actúe como modelo de jugador. Haga clic con el botón derecho dentro del panel de jerarquía, desplace el cursor sobre Objeto 3Dy seleccione Cubo del menú desplegable. Coloque el nuevo cubo de modo que quede sobre el plano que también ha agregado. También debe agregar un componente de cuerpo rígido para convertir el cubo en un objeto físico.
Seleccione el cubo y vaya al Inspector. Haga clic en Agregar componente en la parte inferior del panel, busque rigidbody y seleccione Cuerpo rígido de la lista cuando aparezca. Marque la usar la gravedad marque la casilla y deje el resto de los ajustes como están.
Puedes encontrar Activos gratuitos de Unity en línea para engalanar tu proyecto.
Una cámara en tercera persona
Tu escena ya debería tener una cámara que puedas usar como tu cámara en tercera persona. Coloque la cámara de modo que quede en una posición cómoda de tercera persona sobre su cubo. Vaya al panel de jerarquía antes de arrastrar y soltar la cámara en el cubo para crear una relación padre-hijo. La cámara seguirá automáticamente tu cubo con esto hecho.
Una prueba rápida
Si bien su escena aún no tiene ningún código, puede probar el trabajo que ha realizado hasta ahora. Haga clic en el Jugar en la parte superior de la pantalla para cargar tu juego. Debería ver caer el cubo y aterrizar sobre el avión, y la cámara debería seguir el cubo mientras cae.
Paso 2: configurar un archivo C#
Ahora es el momento de crear un archivo C# para que pueda comenzar a programar algún movimiento. Vaya a la sección Proyecto, haga clic con el botón derecho, desplace el cursor sobre Crear y seleccione Carpeta de la lista. Nombre la carpeta Scripts o algo similar.
Navegue dentro de su nueva carpeta y repita el proceso, pero seleccione C# Script de la lista. Puede dar a este archivo cualquier nombre, pero este también será el nombre de la función principal dentro de él. Asegúrese de que su nuevo C# se vea así.
usando Sistema. colecciones;
usando Sistema. Colecciones. Genérico;
usando motor de unidad;públicoclaseControl_de_caracteres: MonoBehaviour {
vacíoComenzar() {
}
vacíoActualizar() {
}
}
Paso 3: use C# para crear movimiento hacia adelante y hacia atrás con Velocity
Antes de agregar funciones en su archivo de script, declare algunas variables públicas. Lo primero es un Rigidbody para almacenar el modelo del jugador. También declare un flotador para realizar un seguimiento de la velocidad de movimiento. Estas variables van en la clase principal, fuera de cualquier función.
público cuerpo rígido cuerpo rígido;
públicoflotar velocidad;
A continuación, es hora de agregar una sola línea de código a la función Inicio. Esto utiliza una declaración GetComponent para asignar el componente de cuerpo rígido del cubo a la variable de cuerpo rígido que creó.
vacíoComenzar() {
cuerpo rígido = GetComponent < cuerpo rígido > ();
}
Ahora puede agregar un código que hará que su modelo de jugador se mueva. Este código es agradable y simple; solo necesita dos declaraciones if, una para avanzar y otra para retroceder. Puede utilizar Entrada. GetKey para determinar cuándo se presiona una tecla. En este caso, está buscando presionar las teclas W y S.
Presionar cualquiera de estas teclas agrega una fuerza al cubo rigidbody usando rigidbody. AgregarFuerza. Puede calcular la dirección y la velocidad de la fuerza añadida multiplicando su posición en el eje Z (transform.forward) por la variable de velocidad. No hay una clase transform.backward que pueda usar para el movimiento hacia atrás, pero esto se puede lograr multiplicando transform.forward por -1.
si (Aporte. Obtener la clave("w")) {
cuerpo rígido. AddForce (transform.forward * velocidad);
}
si (Aporte. Obtener la clave("s")) {
cuerpo rígido. AddForce((transformar.reenviar * -1) * velocidad);
}
Guarde el archivo C# y navegue de regreso a Unity. Busque la secuencia de comandos dentro del panel Proyecto y arrástrela y suéltela en el cubo del modelo de personaje dentro de la jerarquía para asignar la secuencia de comandos a ese objeto. Cuando seleccione el Cubo, debería ver el script como un componente en el panel Inspector. Haga clic dentro del cuadro de variable de cuerpo rígido y seleccione el cuerpo rígido de su cubo.
Ahora puede usar el botón Reproducir para iniciar el juego y probar su código. ¡Pero espera! Hay un problema; su cubo va a rodar en lugar de moverse hacia adelante. Vuelva al inspector del cubo, busque el componente Rigidbody y marque las casillas para congelar la rotación en los ejes X y Z antes de volver a iniciar el juego. Ahora debería funcionar.
Paso 4: use C# para crear giros a la izquierda y a la derecha con torque
A diferencia de moverse hacia adelante y hacia atrás, girar su modelo de reproductor Cube requiere una fuerza llamada torque. Necesita otra variable para esto: un flotador público para asignar un valor de par.
públicoflotar esfuerzo de torsión;
El código para girar a la izquierda y a la derecha en este script es muy similar al que se usa para avanzar y retroceder también. Hay un si instrucción para cada dirección que busca presionar la tecla D (giro a la derecha) o la tecla A (giro a la izquierda).
El primer paso en cada instrucción if es determinar la dirección del giro usando la Entrada. GetAxis y asigne el resultado a una variable flotante. A continuación, utilice rigidbody. AddTorque para aplicar fuerza de rotación al modelo de personaje del cubo multiplicando el par, el giro y el eje Z del cubo.
si (Aporte. Obtener la clave("d")) {
flotar giro = Entrada. ObtenerEje("Horizontal");
cuerpo rígido. AddTorque (transform.up * torque * turn);
}
si (Aporte. Obtener la clave("a")) {
flotar giro = Entrada. ObtenerEje("Horizontal");
cuerpo rígido. AddTorque (transform.up * torque * turn);
}
Guarde su código y regrese a Unity para probarlo. Puede ajustar la velocidad y el tiempo de aceleración de la rotación de su modelo de reproductor seleccionando el Cubo y editando las variables de masa, arrastre y torsión del cuerpo rígido en su secuencia de comandos. Este proyecto de ejemplo se basa en 1 masa, 1 arrastre y 2 par.
Paso 5: use C# para programar saltos
Como elemento final de este controlador de personajes de Unity, es hora de crear tu salto. Crear un salto es más complejo que los otros controles básicos en los que has trabajado, dado que un salto tiene que tener una altura limitada. Comience agregando una variable booleana privada para rastrear si el jugador está saltando o no.
privadobool esta saltando = FALSO;
Esta variable no hará nada sin una declaración para probarla. En este caso, una instrucción if básica para verificar si la variable es falsa hará el truco. Agregar la misma condición al otro movimiento si las declaraciones evitarán que el jugador se mueva durante los saltos.
si (! está saltando) {
}
Agregar la misma condición al otro movimiento si las declaraciones evitarán que el jugador se mueva durante los saltos.
si (Aporte. Obtener la clave("w") && !está saltando) {
cuerpo rígido. AddForce (transform.forward * velocidad);
}
Dentro de la sentencia if !isJumping, necesita otra sentencia if, esta vez para comprobar si se ha pulsado una tecla del botón de salto. Establecer la variable isJumping en verdadero es lo primero que debe hacer en esta declaración if, seguido de hacer una declaración rigidbody.angularVelocity para eliminar las fuerzas aplicadas actualmente al cubo.
Ahora puedes usar el rigidbody. Declaración AddForce para agregar fuerza al cubo en su eje Z, creando el movimiento ascendente de un salto. Finalmente, es hora de usar una declaración de invocación para llamar a una función diferente después de 0,8 segundos.
si (! está saltando) {
si (Aporte. ObtenerTeclaAbajo("espacio")) {
esta saltando = verdadero;
cuerpo rígido. AddForce (transform.up * velocidad * 120);
rigidbody.angularVelocity = Vector3.zero;
Invocar("Move_Setter", 0.8 F);
}
}
Esta función vuelve a establecer la variable isJumping en falso para que el movimiento/salto sea posible una vez más, y el retraso de 0,8 segundos impide que se active demasiado pronto.
vacíoMove_Setter() {
esta saltando = FALSO;
}
Paso 6: pruebe su código de controlador de caracteres
Guarde su archivo y regrese a Unity para probar el código que ha escrito. Como la mayoría de los compiladores, Unity proporciona información sobre errores y otros problemas con su código para que sea más fácil ver lo que podría necesitar cambiar. Puede ver el código completo de este proyecto en nuestro GitHub página.
Creación de controladores de caracteres de Unity
Puede elegir entre una variedad de enfoques diferentes al crear un controlador de personajes en Unity. Usar la física es una opción, pero también puedes usar el sistema de controlador de personajes incorporado si lo deseas.
Explorar diferentes opciones como esta es una excelente manera de aprender sobre herramientas como Unity.