Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Como mover un personaje ligeramente durante el salto o tiempo en el aire.

Iniciado por Lewis, Febrero 01, 2016, 04:07:25 AM

Tema anterior - Siguiente tema
Muy buenas comunidad, soy relativamente nuevo en esto de unity, así como en la programación pues apenas estoy estudiando informática.El problema es el siguiente, para aprender lo básico de unity empece animando un personaje que yo mismo modele en blender, La exportación de blender a unity fue bien (tarde en entender lo del animator y como aplicar root motion a los personajes no humanoides), luego tratando de hacer un poco de "ingeniería inversa" sobre los scripts de movimiento que trae los standard assets, en especifico el del personaje en tercera persona, logre hacer mi script de movimiento, bueno mas bien solo adapte el que ya estaba hecho para usarlo en mi personaje y pues mas o menos entendí como funcionaba lo que ahí estaba.Pero me surgieron dos inconvenientes. Primero, me di cuenta que no se puede maniobrar en el aire durante el salto, o en el aire en generar, lo que hace que cada salto sea lineal y aunque no lo veo como un graaaan problema, me gustaría saber como lograr que pueda maniobrar, lógico mediante el script.Segundo, este no se si es un problema con mis animaciones o en el input o que, pero cuando el personaje esta estático y giro la cámara al rededor de él, pues él rota, unos pocos grados, siempre de izquierda a derecha aun cuando no debería, no es como si se quedara rotando infinitamente, ya que simplemente es como si rotara con teclado solo que en este caso toma la rotación de la cámara como un input en esa dirección, hago la acotación de que solo lo hace en una dirección ya que si giro la cámara de derecha a izquierda no pasa nada. Ahora cuando camina el personaje rota normal en ambas direcciones mediante rotación de cámara y entrada por teclado.Se que a veces no me logro explicar bien,  así que si llegan a necesitar la referencia, pongo un vídeo y el script del personaje es básicamente el del stardard assets, lo único que no incluí es lo de agacharse, porque por ahora no lo necesito, de resto si pudieran ayudarme explicándome un poquito mas como funciona ese código y la posible solución les estaría muy agradecido.Posdata: perdón por escribir tanto.

Si el personaje se mueve a través de Físicas, deberías primero crear un vector de dirección, luego a tal dirección multiplicarla por la velocidad.Si es así como lo estas haciendo entonces, solo quedaría cambiar el valor del multiplicador que utilizas para la dirección de la velocidad cuando esté en el aire. CODIGO
public int Speed;
private int currentSpeed;

void Update()
{
    Vector3 Direccion = new Vector3(Axis.h,0,Axis.v);
    Direccion = transform.TrasnformDirection(Direccion);
    if(isGround)
        currentSpeed = Mathf.Lerp(currentSpeed,Speed,Time.deltaTime * 2);
    else
        currentSpeed = Mathf.Lerp(currentSpeed,Speed/2,Time.deltaTime * 2);
       
    Vector3 Vel = Direccion * currentSpeed;
    Vel.y = rigidBody.velocity.y;
   
    rigidBody.velocity = Vel;
}
 

 [quote author=francoe1" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35058" data-ipsquote-contentcommentid="126726">Si el personaje se mueve a través de Físicas, deberías primero crear un vector de dirección, luego a tal dirección multiplicarla por la velocidad.Si es así como lo estas haciendo entonces, solo quedaría cambiar el valor del multiplicador que utilizas para la dirección de la velocidad cuando esté en el aire. CODIGO
public int Speed;private int currentSpeed;

void Update()
{
    Vector3 Direccion = new Vector3(Axis.h,0,Axis.v);
    Direccion = transform.TrasnformDirection(Direccion);
    if(isGround)
        currentSpeed = Mathf.Lerp(currentSpeed,Speed,Time.deltaTime * 2);
    else
        currentSpeed = Mathf.Lerp(currentSpeed,Speed/2,Time.deltaTime * 2);
       
    Vector3 Vel = Direccion * currentSpeed;
    Vel.y = rigidBody.velocity.y;
   
    rigidBody.velocity = Vel;
}
 [/quote]Gracias, me sirvió el código lo adapte sin problema, pero mencionaste que estoy moviendo el personaje mediante físicas, me imagino que te refieres a mediante el código y no mediante las animaciones... ahora... que me recomiendas tu, es mejor realizar el salto mediante las físicas o con una animación? o un poquito de ambas?

Etiquetas: