Otro pequeño avance en el prototipo. En esta ocasión he configurado la cámara para que siga al personaje. También he configurado colisiones para que el jugador no traspase algunas paredes que he añadido a la escena.
La animación de correr también ha sido mejorada ligeramente para mostrar una mayor energía y que coincida mejor con la velocidad de desplazamiento.
Bytecode Bits
Beyond Source Code
jueves, 13 de septiembre de 2018
domingo, 9 de septiembre de 2018
Controlando al personaje con movimientos relativos a la cámara
No estoy teniendo mucho tiempo últimamente, pero he avanzado en poder controlar al personaje. Ahora se puede utilizar un controlador o el teclado para mover al personaje en diferentes direcciones. Cuando se usa el teclado el personaje simplemente corre en la dirección deseada. En el caso del controlador, se utiliza la posición de los ejes para determinar la velocidad del personaje y la animación utilizada (andar o correr).
El movimiento del personaje en este ejemplo es relativo a la cámara. Es algo que me ha costado un poco hacer en Unity pese a que lo he hecho cien veces en Unreal Engine. Si bien es cierto que en general Unity es más sencillo que Unreal, en ocasiones creo que complica las cosas. Por si alguien está buscando hacer algo parecido, el código es el siguiente:
Nótese que la variable
Nótese también que el formateo de código que proporciona Blogger es bastante cutre :-( Ya buscaré otro.
Todavía queda mucho trabajo en cuanto a la animación del personaje y la transición entre animaciones como se puede observar en el video, pero como primera aproximación no está mal.
El movimiento del personaje en este ejemplo es relativo a la cámara. Es algo que me ha costado un poco hacer en Unity pese a que lo he hecho cien veces en Unreal Engine. Si bien es cierto que en general Unity es más sencillo que Unreal, en ocasiones creo que complica las cosas. Por si alguien está buscando hacer algo parecido, el código es el siguiente:
1: /// <summary>
2: /// Método llamado para actualizar el estado cada frame.
3: /// </summary>
4: private void Update () {
5: // Calculamos el desplazamiento horizontal y vertical
6: float hoffset = Input.GetAxis(AXIS_HORIZONTAL);
7: float voffset = Input.GetAxis(AXIS_VERTICAL);
8: // Cambiamos la animación basándonos en los valores de los ejes
9: float hspeed = Math.Abs(hoffset);
10: float vspeed = Math.Abs(voffset);
11: if (hspeed > runningThreshold || vspeed > runningThreshold)
12: {
13: Run();
14: } else if (hspeed > 0.0f || vspeed > 0.0f)
15: {
16: Walk();
17: } else
18: {
19: Idle();
20: return;
21: }
22: // Calculamos el vector de desplazamiento del personaje proyectado sobre los ejes de la cámara
23: Transform cameraTransform = Camera.main.transform;
24: Vector3 forward = cameraTransform.forward;
25: forward.y = 0.0f;
26: forward.Normalize();
27: Vector3 right = cameraTransform.right;
28: right.y = 0.0f;
29: right.Normalize();
30: Vector3 offset = (forward * voffset + right * hoffset) * speedMultiplier * Time.deltaTime;
31: // Calculamos la rotación del personaje hacia la dirección correcta
32: Quaternion targetRotation = Quaternion.LookRotation(offset);
33: Quaternion smoothRotation = Quaternion.Slerp(gameObject.transform.rotation, targetRotation,
34: turnSpeed * Time.deltaTime);
35: // Giramos y movemos el personaje
36: gameObject.transform.rotation = smoothRotation;
37: gameObject.transform.position += offset;
38: }
Nótese que la variable
runningThreshold es un atributo público de la clase. Su valor define el umbral a partir del que cambio la animación de andar a correr. La variable speedMultiplier es otro atributo público que define la velocidad general del personaje. turnSpeed define la velocidad de giro. Cuando se cambia la orientación del personaje, no lo hago directamente, sino que interpolo la rotación para el cambio de orientación se haga suavemente.Nótese también que el formateo de código que proporciona Blogger es bastante cutre :-( Ya buscaré otro.
Todavía queda mucho trabajo en cuanto a la animación del personaje y la transición entre animaciones como se puede observar en el video, pero como primera aproximación no está mal.
miércoles, 5 de septiembre de 2018
Secuencia de logotipo de Bytecode Bits
Para variar un poco de lo que he estado haciendo últimamente y seguir aprendiendo, he estado dedicando tiempo a hacer un pequeña secuencia de video para poner en la presentación de mis juegos y experimentos con Unity.
El logo está modelado en Qubicle y la secuencia se ha renderizado y post-procesado en Blender. El sonido de ruido blanco lo he generado con Audacity. Realmente es todo muy sencillo. Curiosamente lo que más problemas me ha dado ha sido la exportación del video desde Blender porque creaba el video sin el sonido, o no conseguía que Unity se lo tragase. Parece ser cosa de los codecs, así que por si alguien está interesado, he acabado utilizando la siguiente configuración:
El logo está modelado en Qubicle y la secuencia se ha renderizado y post-procesado en Blender. El sonido de ruido blanco lo he generado con Audacity. Realmente es todo muy sencillo. Curiosamente lo que más problemas me ha dado ha sido la exportación del video desde Blender porque creaba el video sin el sonido, o no conseguía que Unity se lo tragase. Parece ser cosa de los codecs, así que por si alguien está interesado, he acabado utilizando la siguiente configuración:
domingo, 2 de septiembre de 2018
Añadiendo sonido y nuevas animaciones
En esta ocasión, hemos añadido sonido a los pasos mediante eventos de animación y además hemos incluido una nueva animación para correr. También he mejorado algo la animación de espera (idle) haciendo que el personaje mire hacia los lados. No es gran cosa, pero le da algo más de vida.
Decir que me sorprende lo malo que es el soporte en Unity para eventos de animación sobre animaciones importadas desde otros programas. Básicamente se deben incluir los eventos en las opciones de importación de la animación con un interfaz de usuario bastante lamentable. En este caso eran animaciones sencillas, pero no quiero ni pensar el infierno que puede llegar a ser hacerlo con animaciones medianamente complejas.
En fin, os dejo el video con los avances.
Decir que me sorprende lo malo que es el soporte en Unity para eventos de animación sobre animaciones importadas desde otros programas. Básicamente se deben incluir los eventos en las opciones de importación de la animación con un interfaz de usuario bastante lamentable. En este caso eran animaciones sencillas, pero no quiero ni pensar el infierno que puede llegar a ser hacerlo con animaciones medianamente complejas.
En fin, os dejo el video con los avances.
jueves, 30 de agosto de 2018
Mejorando el personaje
Seguimos mejorando el personaje. En este caso le he aplicado un modificador Subsurface desde Blender para suavizar las esquinas de los voxels. También he mejorado ligeramente el esqueleto y las animaciones.
En el video se puede observar el personaje inicial a la izquierda y el personaje mejorado a la derecha.
Por cierto, gran trabajo por parte de la gente de Unity mejorando los tiempos de compilación. Actualicé a la última versión y se nota muchísimo.
En el video se puede observar el personaje inicial a la izquierda y el personaje mejorado a la derecha.
Por cierto, gran trabajo por parte de la gente de Unity mejorando los tiempos de compilación. Actualicé a la última versión y se nota muchísimo.
Suscribirse a:
Comentarios (Atom)