Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Bydark en Enero 31, 2018, 09:54:32 PM

Título: Ayuda con animación 2D
Publicado por: Bydark en Enero 31, 2018, 09:54:32 PM
Hola, estoy teniendo problemas para hacer la animación de correr.
 
El problema aparece cuando quiero cambiar de dirección mientras el personaje está corriendo, parece que al ser tanta velocidad, el personaje resbala por el suelo.
 
Tengo dos vídeos, en uno la velocidad es baja y en otro es alta.
 
VÍDEO 1: https://gyazo.com/1dd3dd4ba68fe6eceffd2b1ced6b9284 (https://gyazo.com/1dd3dd4ba68fe6eceffd2b1ced6b9284)
 
VÍDEO 2: https://gyazo.com/0b4c855937572048ce4d4e3f6dcbdc5b (https://gyazo.com/0b4c855937572048ce4d4e3f6dcbdc5b)
 
Aquí os dejo el código que estoy usando.
 
 
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
 
public float speed = 2f;
private Rigidbody2D rb2d;
public float maxSpeed = 5f;
private Animator anim;
public bool grounded;
public bool pressrun;
 
void Start () {
 
   rb2d = GetComponent<Rigidbody2D> ();
   anim = GetComponent<Animator> ();
   
}

// Update is called once per frame
void Update () {
 
   anim.SetFloat ("Speed", Mathf.Abs(rb2d.velocity.x));
   anim.SetBool ("Grounded", grounded);
   anim.SetBool ("PressRun", pressrun);
}
 

void FixedUpdate(){



   float h = Input.GetAxis ("Horizontal");
   rb2d.AddForce (Vector2.right * speed * h);
 
   
   float limitedSpeed = Mathf.Clamp (rb2d.velocity.x, -maxSpeed, maxSpeed);
   rb2d.velocity = new Vector2 (limitedSpeed, rb2d.velocity.y);
 
   if (Input.GetKey ("k")) {
      pressrun = true;
      rb2d.velocity = new Vector2 (limitedSpeed * 2, rb2d.velocity.y);
 
   } else {
 
      pressrun = false;
   }
   if (h > 0.1f) {
   
      transform.localScale = new Vector3 (1f, 1f, 1f);
   
   }
 
   if (h < -0.1f) {
      transform.localScale = new Vector3 (-1f, 1f, 1f);
   }
}
 
}

 
Muchas gracias a todos.
Título: Ayuda con animación 2D
Publicado por: Javiviplz en Enero 31, 2018, 10:30:10 PM
A mi me gusta el efecto que te ha quedado de resbalado a alta velocidad jajaja 
Título: Ayuda con animación 2D
Publicado por: Bydark en Enero 31, 2018, 10:32:43 PM
Cita de: Javiviplz date=1517434210A mi me gusta el efecto que te ha quedado de resbalado a alta velocidad jajaja 
   


JAJAJA Gracias javiviplz, en realidad el efecto no está del todo mal, pero cuando quiero cambiar de dirección, el persona sigue en la misma dirección, aunque el sprite si que cambia de dirección.
 
 
 
Y ya te digo, está relacionado con la velocidad, porque en el vídeo en el que va más lento, cambia de dirección sin problemas.
 
 
 
Un saludo.
Título: Ayuda con animación 2D
Publicado por: lightbug en Enero 31, 2018, 10:43:13 PM
Probaste que al no recibir entradas (supongo será tu "h") de setear la velocity a cero?
 

if(Mathf.abs(h) < 0.1f )
rb2D.velocity = new Vector2(0,rb2D.velocity.y);

 
Es bastante feo hacerlo así, pero es una posibilidad, antes lo usaba así y funcionaba bastante bien, vas a tener que tener en cuenta que si saltás y dejas de apretar el horizontal se va a frenar (en el eje X).
 
La otra que podés hacer es hacer un Lerp o MoveToward (muy sutil) a cero cosa de cofigurar cuanto querés que "resbale", o usar alguna curva de animación se me ocurre.
 
También chequea (en este caso no creo que se el problema) de los Physics Materials, tambien determinan como interactuás con el suelo (si te clavás o deslizás)
Título: Ayuda con animación 2D
Publicado por: Bydark en Enero 31, 2018, 11:03:25 PM
Cita de: lightbug date=1517434993Probaste que al no recibir entradas (supongo será tu "h") de setear la velocity a cero?
   
   

if(Mathf.abs(h) < 0.1f )
rb2D.velocity = new Vector2(0,rb2D.velocity.y);

   
      Es bastante feo hacerlo así, pero es una posibilidad, antes lo usaba así y funcionaba bastante bien, vas a tener que tener en cuenta que si saltás y dejas de apretar el horizontal se va a frenar (en el eje X).
   
   
      La otra que podés hacer es hacer un Lerp o MoveToward (muy sutil) a cero cosa de cofigurar cuanto querés que "resbale", o usar alguna curva de animación se me ocurre.
   
   
      También chequea (en este caso no creo que se el problema) de los Physics Materials, tambien determinan como interactuás con el suelo (si te clavás o deslizás)
   


La idea es poder cambiar de dirección al momento, y que al dejar de pulsar el botón de correr se clave en el sitio, vamos lo que vendría a ser una mecánica parecida a la de cualquier "Mario".
 
 
 
Voy a probar eso que comentas, muchísimas gracias.
 
Cita de: lightbug date=1517434993Probaste que al no recibir entradas (supongo será tu "h") de setear la velocity a cero?
   
   

if(Mathf.abs(h) < 0.1f )
rb2D.velocity = new Vector2(0,rb2D.velocity.y);

   
      Es bastante feo hacerlo así, pero es una posibilidad, antes lo usaba así y funcionaba bastante bien, vas a tener que tener en cuenta que si saltás y dejas de apretar el horizontal se va a frenar (en el eje X).
   
   
      La otra que podés hacer es hacer un Lerp o MoveToward (muy sutil) a cero cosa de cofigurar cuanto querés que "resbale", o usar alguna curva de animación se me ocurre.
   
   
      También chequea (en este caso no creo que se el problema) de los Physics Materials, tambien determinan como interactuás con el suelo (si te clavás o deslizás)
   


Así es como ha quedado:
 
 
 
https://i.gyazo.com/a72f83cc3428dac0ab98f97e82d26d30.mp4 (https://i.gyazo.com/a72f83cc3428dac0ab98f97e82d26d30.mp4)
 
 
 
Lo único que he hecho ha sido poner esto:
 

if(Mathf.abs(h) < 0.1f )
rb2D.velocity = new Vector2(0,rb2D.velocity.y);

 
 
 
Muchas gracias, tiene aún sus errores, como que en el aire sigue corriendo, pero imagino que será fácil de solucionar con un script que controle si está tocando el suelo o no.
 
 
 
Un saludo.
 
 
Título: Ayuda con animación 2D
Publicado por: lightbug en Enero 31, 2018, 11:56:23 PM
ahora que lo mencionás tenés razón, me olvidé eso de cambiar de golpe, solo te dije como frenar de golpe... bueno si estás con un H (positivo o neg) podés imponer la velocidad directamente, ya que después estás limitando la velocidad. No queda "natural" pero son tipicos trucos