Убрать внезапное изменение анимации - PullRequest
0 голосов
/ 05 мая 2020

У меня есть следующий код, который работает очень хорошо. Я имею в виду ... очень хорошо. Единственная проблема в том, что когда состояние анимации переключается, это очень резко и внезапно, и это ВООБЩЕ не выглядит естественным. Кто-нибудь знает, как я могу это исправить? Заранее спасибо !!!

//this runs in Update()
if (Input.GetKey(KeyCode.Space) || jumped) {
        if (!characterController.isGrounded)
            jumped = true;
        else
            jumped = false;

        if (jumped) {
            animator.Play("jump");
            return;
        }
    }
    if (characterController.velocity == Vector3.zero) {
        animator.Play("idle");
        if (!weaponEquipped && !switchingWeapon)
            animator.Play("idleArms", 1);
        return;
    } else if (Input.GetKey("a")) {
        if (isRunning && !vitals.isEmpty("stamina")) {
            animator.Play("runLeft");
            return;
        }
        animator.Play("walkLeft");
        return;
    }
    if (Input.GetKey("d")) {
        if (isRunning && !vitals.isEmpty("stamina")) {
            animator.Play("runRight");
            return;
        }
        animator.Play("walkRight");
        return;
    } else if (Input.GetKey("s")) {
        if (isRunning && !vitals.isEmpty("stamina")) {
            animator.Play("runBack");
            if (!weaponEquipped && !switchingWeapon)
                animator.Play("runBackArms", 1);
            return;
        }
        animator.Play("walkBack");
        if (!weaponEquipped && !switchingWeapon)
            animator.Play("walkBackArms", 1);
        return;
    } else if (isRunning && !vitals.isEmpty("stamina")) {
        animator.Play("run");
        if (!weaponEquipped && !switchingWeapon)
            animator.Play("runArms", 1);
        return;
    } else {
        animator.Play("walk");
        if (!weaponEquipped && !switchingWeapon)
            animator.Play("walkArms", 1);
    } if (!isRunning && characterController.velocity.magnitude > 0) {
        animator.Play("walk");
        return;
    }

1 Ответ

0 голосов
/ 05 мая 2020

То, что вы ищете, - это Blend Tree , которое в сочетании с Animator плавно исчезает между анимациями в зависимости от переменной, которую вы определяете. Я не могу переписать весь ваш код и настроить Blend Tree, но вот отправная точка:

using UnityEngine;
using System.Collections;
using System.Collections.Generics;

public class YourClass: MonoBehaviour
{
   public Animator animator;

   float vertical = 0f;
   float horizontal = 0f;

   void Update()
   {
      if (Input.GetButtonDown("Jump"))
      {
         animator.SetTrigger("Jump");
      }
      else
      {
         vertical = Input.GetAxis("Vertical");
         horizontal = Input.GetAxis("Horizontal");

         animator.setFloat("Vertical Movement", vertical);
         animator.setFloat("Horizontal Movement", horizontal);
      }
   }
}
...