Noticias

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

Salto con Animator y Scripting

Iniciado por Pozo69, Marzo 18, 2016, 08:17:47 PM

Tema anterior - Siguiente tema
Hola gente.Estoy intentando realizar una animación con un Sprite 2D, os cuento:Cuando salto quiero que al coger altura tenga una animación, un sprite y cuando caiga tenga otra forma el sprite. He realizado las animaciones y las transiciones entre el reposo y el salto y he realizado también el Script pero no consigo realizar lo que yo quiero. El primer problema es que al pulsar el Space que es mi tecla de salto, no cambia la animación o si cambia lo realiza en medio del salto y luego la animación del salto no es como quiero porque no cambia cuando coge altura y cuando pierde altura. Os copio el Script a ver si me podéis echar un cable.
using UnityEngine;
using System.Collections;

public class Movimiento : MonoBehaviour {

public float velocidad = 3f;
public float fuerzaSalto = 100f;

private bool enSuelo = true;
public Transform comprobadorSuelo;
private float comprobadorRadio = 0.07f;
public LayerMask mascaraSuelo;          // Máscara para identificar elementos suelo. Es como un tag, así identificamos como suelo a todos los elementos que nosotros queramos.

private bool dobleSalto = false;

private Animator animator;

void Awake () {                           // Función que se llama al inicio una vez.
   animator = GetComponent<Animator> ();
}

// Use this for initialization
void Start () {

}

void FixedUpdate() {               // Esta función es para que se llame a la función cada intervalo de tiempo, no cada Frame como hace Update ya que cada ordenador es más o menos rápido
                              // y no coincidiría con todos los dispositivos.
   enSuelo = Physics2D.OverlapCircle(comprobadorSuelo.position, comprobadorRadio, mascaraSuelo);
   animator.SetBool ("isGrounded", enSuelo);
   if (enSuelo) {
      dobleSalto = false;
   }
}

// Update is called once per frame
void Update () {

   if (Input.GetKey (KeyCode.RightArrow)) {
      this.transform.Translate (Vector3.right * velocidad * Time.deltaTime);
   }

   if (Input.GetKey (KeyCode.LeftArrow)) {
      this.transform.Translate (Vector3.left * velocidad * Time.deltaTime);
   }

   if ((enSuelo || !dobleSalto) && Input.GetKeyDown (KeyCode.Space)) {
   //if (Input.GetKey (KeyCode.Space)) { --> No usar esto para que no se mantenga el salto. Sólo quiero que al pulsar salte, no se mantenga como al caminar.
      // Insertar código de salta. Comprobar cual es la mejor opción
      GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, fuerzaSalto);      // Para que el segundo salto cuando el personaje esté cayendo del primero se note que salta y no solo se mantenga.
      //GetComponent<Rigidbody2D>().AddForce(new Vector2(0, fuerzaSalto));         
      if (!dobleSalto && !enSuelo) {
         dobleSalto = true;
      }
   }
}
}
El Script está en C# y funciona correctamente (no saltan errores).En animator he realizado dos parámetros, uno llamado VelX para el modo correr que aún no he realizado y otro llamado isGrounded para saber que el Sprite está tocando el suelo. Además he realizado un Layer "Suelo" para que el Sprite sepa cuales son los elementos "Suelo" y así pueda diferenciar cuando está tocándolo. Cuando pulso la tecla espaceadora el parámetro "isGronded" pasa correctamente a false pero no ejecuta la animación.Además luego no se como realizar que un Sprite se ejecute cuando coge altura y otro cuando la pierde.¿Podéis ayudarme o guiarme?Gracias de antemano, un saludo a todos. 

He averiguado que el retardo en cambiar la animación es porque tenía activado "Has Exit Time". Con deseleccionarlo se arregla el problema. Aunque aún no he conseguido hacer que al ganar altura haga un Keyframe de la animación de Jump y cuando caiga haga otro Keyframe.

Marzo 18, 2016, 09:45:03 PM #2 Ultima modificación: Marzo 18, 2016, 09:45:17 PM por JMStudios
Para que al caer tenga otra animacion, debes hacer lo mismo que al saltar, en el animator. Supongo que has puesto que si la velocidad en y es mayor que 0, y algun booleano que indique si esta en el suelo sea falso, se ejecute la animacion de saltar. Haz lo mismo pero con otra animacion que sea caer, y que sea cuando no esta pisando suelo y cuando la velocidad en y sea menor que 0. 

[quote author=JMStudios" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35426" data-ipsquote-contentcommentid="128351 date=1458333903]Para que al caer tenga otra animacion, debes hacer lo mismo que al saltar, en el animator. Supongo que has puesto que si la velocidad en y es mayor que 0, y algun booleano que indique si esta en el suelo sea falso, se ejecute la animacion de saltar. Haz lo mismo pero con otra animacion que sea caer, y que sea cuando no esta pisando suelo y cuando la velocidad en y sea menor que 0. [/quote]Es muy buena idea. Voy a probarlo.Muchas gracias genio!

Etiquetas: