Вы находитесь на странице: 1из 10

Character

animation
Pequeo ejemplo basado en un personaje animado 3D, dek tupo tercera persona

En este ejemplo haremos uso de la edicin de terrenos, la importacin de modelos
y animaciones, y el componente Character Controller de Unity3D.

- Creamos un nuevo proyecto al que llamaremos Character Demo
- Aadimos el Project la carpeta Scenes y sobre ella guardamos la escena
actual con el nombre Character Demo

Creamos un nuevo terreno con Terrain -> Create Terrain

La herramienta de creacin de terrenos es muy intuitiva. Nos permite:


o Modelar dibujando las alturas del terreno
o Pintar texturas sobre el mismo

o Ubicar elementos adicionales como plantas, rboles etc.


-

Importamos algunos recursos de ejemplo para terrenos con Assets-


>Import Package->Environment



-
-

Experimentar con las diferentes opciones de creacin de relieves (alturas)


en el terreno
Utilizar la textura SandAlbedo y la GrassHillAlbedo. La primera ser
utilizada como base de nuestro terreno, la segunda nos permitir pintar
zonas verdes (Seleccionar herramienta Paint Texture->Edit Textures->Add
Texture->Select Albedo)
Aadir la palmera Palm a nuestra lista de rboles y aadir unas cuantas
palmeras a nuestro terreno (Seleccionar herramienta Place Tress->Edit
Trees->Add Tree->Botn circula->PalmDesktop)

Ampliacin opcional


o En la Asset Store est el paquete gratuito llamado Terrain Assets
que contiene numerosas texturas, diferentes tipos de rboles y
detalles (hierba etc)

Character Controller

El Character Controller es una alternativa ms cinemtica que la de modelar
nuestro personaje utilizando Rigidbody y la fsica. Los dos enfoques son posibles.

El Character Controller nos permitir simular cierto comportamiento fsico (sin
usar el propio motor fsico de Unity3D) y aprovechar ventajas de su Collider
integrado (del tipo cpsula).

- Importamos el paquete goober.unitypackage con Assets->Import Assets-
>Custom package

-
-

En la carpeta Goober Artwork -> FBX tenemos el modelo y la


animaciones. Seleccionamos goober@idle y en la solapa Animations
activamos Loop Time . Seleccionamos goober@walk y de nuevo en la
solapa Animations nos aseguramos que Loop Time est tambin activado.
Aadimos, si no la tenamos, una luz direccional a la escena
Arrastramos del prefab goober una instancia sobre la escena (procurando
que nuestro personaje est sobre la superficie del terreno)

Creando la mquina de estados



Si seleccionamos el GameObject de la escena goober podremos observar que ste
ya cuenta con una componente llamada Animator, con su controller y avatar.

Manteniendo seleccionado goober, nos vamos a Windows y visualizamos la vista
Animator.



En esta vista Unity nos muestra las diferentes animaciones creadas para nuestro
personaje. Idle es la animacin que ser ejecutada por defecto cuando arranque el
juego.

En esta mquina de estados lo que tenemos que crear son las transiciones entre los
estados y bajo qu circunstancias se van a llevar a cabo. Las circunstancias que
marcan la transicin entre estados se especificarn mediante condiciones que han
de cumplir un conjunto de parmetros que crearemos en esta misma vista.


Creamos las siguientes transiciones entre estados, pulsando el botn derecho
sobre el estado origen y seleccionando Make transition y seleccionando el estado
de destino:



Seleccionando la solapa Parameters creamos los siguientes parmetros:
- Speed, del tipo float
- Grounded, del tipo trigger
- Jump, del tipo trigger


-
-
-
-
-

Seleccionamos la transicin idle a walk y especificamos que se produce


cuando la velocidad, Speed, es mayor que (greater) 0.1 y desactivamos Has
Exit Time
Seleccionamos la transicin walk a idle y especificamos que se produce
cuando la velocidad, Speed, es menor que (less) 0.1 y desactivamos Has
Exit Time
Seleccionamos la transicin idle a jump y especificamos que se produce
cuando se da el trigger Jump y desactivamos Has Exit Time
Seleccionamos la transicin de jump a idle y especificamos que se
produce cuando se da el trigger Grounded y activamos Has Exit Time
Seleccionamos la transicin del walk a jump y especificamos que se
produce cuando se da el trigger Jump y desactivamos Has Exit Time




Personaje y script

- Aadimos con Component->Physics->Character Controller un Character
Controller a nuestro personaje.

Modificamos los parmetros por defecto (el valor del centro en Y a 1)

Nos creamos la carpeta de Scripts y en su interior creamos un nuevo script


C# al que llamamos Move



using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class Move : MonoBehaviour {
public float speed = 3.0f;
public float rotateSpeed = 60.0f;
CharacterController controller;
Animator animator;

// Use this for initialization


void Start () {
controller = GetComponent<CharacterController>();
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
float V = Input.GetAxis("Vertical");
float H = Input.GetAxis("Horizontal");
float curSpeed = 0.0f;
float curRotSpeed = 0.0f;
Vector3 forward;
if (V > 0.0f)


curSpeed = speed * V;
curRotSpeed = H * rotateSpeed * Time.deltaTime;
forward = transform.forward;
transform.Rotate(0, curRotSpeed, 0);
controller.SimpleMove(forward * curSpeed);
animator.SetFloat("Speed", Mathf.Max(curSpeed,
Mathf.Abs(curRotSpeed)));
print (Mathf.Max(curSpeed, Mathf.Max(curRotSpeed)));
}
}

Creamos un nuevo script llamado Follow.cs (un viejo conocido):

using UnityEngine;
using System.Collections;
public class Follow : MonoBehaviour {
public Transform target;
private Vector3 offset;

// Use this for initialization


void Start () {
offset = transform.position - target.position;
}
// Update is called once per frame
void LateUpdate () {
transform.position = target.transform.position + offset;
}
}

Ajustamos la cmara y la posicin de nuestro personaje, intentando


conseguir que la cmara enfoque en primer plano a nuestro personaje en la
escena. Este ajuste ser mantenido posteriormente por el script Follow:


-
-
-
-




Aadimos el script Follow a la cmara


Con la cmara seleccionada, nos aseguramos de arrastrar nuestro goober
sobre el valor Target del script Follow
Ya podemos ejecutar
Trucos: Modificar los parmetros de Slope Limit y sobre todo Step Offset (0)
para evitar que Goober suba a las palmeras.

Podemos hacer que salte con el siguiente script:


using UnityEngine;
using System.Collections;
[RequireComponent(typeof(CharacterController))]
public class Move : MonoBehaviour {
public float speed = 3.0f;
public float rotateSpeed = 60.0f;
public float jumpSpeed = 5.0f;
public float gravity = 10.0f;
CharacterController controller;
Animator animator;
float vSpeed = 0.0f;

// Use this for initialization


void Start () {
controller = GetComponent<CharacterController>();
animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update () {
float V = Input.GetAxis("Vertical");
float H = Input.GetAxis("Horizontal");
float curSpeed = 0.0f;
float curRotSpeed = 0.0f;
Vector3 forward;
if (V > 0.0f)
curSpeed = speed * V;
curRotSpeed = H * rotateSpeed * Time.deltaTime;
forward = transform.forward * curSpeed;
transform.Rotate(0, curRotSpeed, 0);
if (controller.isGrounded) {
vSpeed = 0.0f;
animator.SetTrigger("Grounded");
if (Input.GetButtonDown("Jump")) {
vSpeed = jumpSpeed;
animator.SetTrigger("Jump");
}
}
vSpeed -= gravity * Time.deltaTime;
forward.y = vSpeed;

controller.Move(forward * Time.deltaTime);
animator.SetFloat("Speed", Mathf.Max(curSpeed,
Mathf.Abs(curRotSpeed)));
}
}