En este caso será un sencillo script el cual si lo asociamos a un objeto podremos moverlo con las teclas de dirección del teclado.
using UnityEngine; using System.Collections; public class Example : MonoBehaviour { public float speed = 10.0F; //Velocidad de movimiento public float rotationSpeed = 100.0F; //Velocidad de rotación void Update() { transform.Translate(0, 0, Input.GetAxis("Vertical") * speed * Time.deltaTime); transform.Rotate(0, Input.GetAxis("Horizontal") * rotationSpeed * Time.deltaTime , 0); } }
Este ejemplo es muy sencillo, las variables públicas son para que, dentro del inspector de Unity3D podamos modificarlas, por lo cual, mientras probamos el resultado podría cambiar la velocidad e ir ajustándolo a la velocidad que realmente queremos.
Pasaré a explicar ambas líneas de código:
transform.Translate(0, 0, Input.GetAxis("Vertical") * speed * Time.deltaTime);En esta línea estamos usando dentro del objeto que queremos mover, la propiedad transform, la cual pues nos permite mover, rotar y escalar el objeto entre otras cosas.
Con Translate nos desplazaremos en los puntos X, Y y Z respectivamente en cada parámetro.
En este caso para avanzar lo hacemos sobre el eje Z que es el eje de la profundidad por lo cual iríamos hacia adelante o hacia atrás, en caso de usar Y sería hacia arriba o abajo y al usar X izquierda o derecha.
transform.Translate(EjeX, EjeY, EjeZ); //Ejemplo de uso
Input, aunque en este caso sea para las flechas de dirección, nos puede devolver todo con lo que interactúa el usuario, desde cualquier tecla del teclado o ratón a pantallas táctiles.
En este caso usamos el GetAxis, el cual nos devolverá 0 en caso de no estar pulsando ninguna tecla, en caso de Horizontal nos devolverá -1 o 1 si pulsamos izquierda o derecha y en caso de Vertical nos devolverá pues lo mismo, -1 o 1 en caso de ser abajo o arriba respectivamente.
Además de Horizontal y Vertical hay muchas otras opciones a usar que ya explicaré mas adelante.
Por último, el Time.deltaTime te devolverá cuanto tiempo ha pasado desde el último Update del script, son décimas de segundo, y se usa para que el personaje avance a un ritmo visible y no salga disparado constantemente ya que un Update podría repetirse varias veces por segundo.
Bien, explicado esto, explicaré la fórmula para quien no sepa claramente lo que hemos usado con valores.
Imaginemos que del último frame al actual ha pasado un segundo pero no hemos pulsado ninguna tecla, en ese caso la fórmula en números sería:
0 * 10 * 1 = 0Ahora imaginemos que si pulsamos una tecla, por ejemplo para avanzar, en este caso pulsando la tecla delantera la fórmula sería:
1 * 10 * 1 = 10Por lo cual nos moveríamos hacia adelante, si nuestra posición en el eje Z antes era 0, ahora sería 10.
Ahora bien, al dejar esto pulsado, si siguiésemos a esa velocidad seguiría tan rápido que no lo podríamos ver, la verdad es que el Time.deltaTime da valores muy pequeños ya que entre el último Update
1 * 10 * 0.016 = 0.16Si contamos que en un Time.deltaTime devuelve un valor aproximado de 0.016, es un valor suficientemente pequeño como para que el personaje no salga disparado por cada update.
Por último el transform.Rotate que hace que el personaje rote sobre si mismo, para comprobar en que sentido rota, es mucho mas fácil descubrirlo por ti mismo rotando un objeto y viendo en el inspector el resultado, dicho esto se usa exáctamente de la misma manera que el Translate.
transform.Rotate(EjeX, EjeY, EjeZ); //Ejemplo de uso
Y hasta aquí esta primera clase en la que, realmente he explicado varias cosas de Unity3D con el ejemplo mas sencillo que podría dar a mi parecer.
Hola enhorabuena por el blog, yo estoy arrancando con unity y C#.
ResponderEliminarMe ha gustado mucho el presente articulo por la claridad y facilidad para entender como funciona Time.deltaTime. Hay infinidad de explicaciones sobre este tema en otras fuentes, pero se ve que soy un poco duro de mollera.
Hasta ahora no lo habia visto tan claro, solo me resta agradecerte y animarte a continuar.
Bastante tarde pero ¡muchas gracias! No había visto el comentario hasta ahora, estas cosas son las que animan a uno a seguir desde luego.
EliminarMuchas gracias.
ResponderEliminarEstas por todos lados, eres dios.
Trodebak
Muchas gracias a ti por visitar mi web, espero que te sea de ayuda ;)
EliminarGracias por todos tus aportes
ResponderEliminarYo quisiera saber como hacer que un objeto rote a la direccion que esta situado el mouse
ResponderEliminara lo mejor ya lo sabes pero usa un ray cast
Eliminargracias,
ResponderEliminarMuy bueno este blog
ResponderEliminareres un crack as conseguido sacarme de un apuro sigue asi muchas gracias por tu ayuda
ResponderEliminarUna pregunta como podria asignar el movimiento con los botones W (arriba)A(ixquierda D(derecha) S(abajo)
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarMe gusta si lo ves en 2017
ResponderEliminarY como con una animacion de caminar para que vaya a las cuatras direcciones?
ResponderEliminarGracias, Muchas Gracias
ResponderEliminarmuchisimas grasias no me funcionan ningunos de los tutoriales de YT pero esto si me funciono ya quiero leer tu proximo tutorial si se le puede llamar asi
ResponderEliminarMuy bueno pero es muy básico. Estoy tratando de saber que angulo estamos presionando en el joystick de nuestro control para hacer girar a un personaje en esa direccion. Con los controles Horizontal y Vertical -1 y 1 no consigo hayar el angulo hacia el que estamos presionando el joystick.
ResponderEliminarBro a mi no me funciona
ResponderEliminar>:c
no funciona el script da error
ResponderEliminarAwa
ResponderEliminar