Дерево смешивания Unity в аниматоре не работает / дрожит

Я использую версию единства: 2021.3.6f1. Я настроил индивидуальную анимацию для игрока (четырехстороннее бездействие и ходьба), и я использую два дерева смешивания, к которым скрипт обращается и изменяет переменные moveX, moveY и is_idle. Я использую новую систему ввода Unity: Скриншот новой системы ввода Unity. и Cinemachine (хотя Cinemachine не вызывает проблем). Когда я запускаю сценарий, он имеет странный эффект дрожания, как будто аниматор продолжает сбрасывать воспроизведение анимации. Ниже видео. Ссылка на видео Скриншот аниматора: Скриншот аниматора Вот код в контроллере плеера:


using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{

    public float moveSpeed = 1f;
    public ContactFilter2D movementFilter;
    public float collissionOffset = 0.05f;
    
    
    
    
    Vector2 inputaxis;
    Vector2 movementInput;
    Vector2 prevMovementInput;
    Rigidbody2D rb;
    
    Animator animator;
    
    
    List<RaycastHit2D> castCollissions = new List<RaycastHit2D>();
    
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
    }
    
    
    private void FixedUpdate() {
        if (movementInput != Vector2.zero){
            bool success = TryMove(movementInput);
    
            if (movementInput != prevMovementInput)  {          
                animator.SetFloat("moveX", movementInput.x);
                animator.SetFloat("moveY", movementInput.y);
                prevMovementInput = movementInput;
            }
    
        
            if (!success){
                success = TryMove(new Vector2(movementInput.x, 0));
    
                if (!success){
                    success = TryMove(new Vector2(0, movementInput.y));
                }
            }
            animator.SetBool("is_idle",false);
        } else {
            //animator.SetBool("is_idle", true);
        }
    
        
    }
    
    
    
    private bool TryMove(Vector2 direction){
        int count = rb.Cast(direction,
                movementFilter,
                castCollissions,
                moveSpeed * Time.fixedDeltaTime + collissionOffset);
    
    
        if (count == 0){
            rb.MovePosition(rb.position + direction * moveSpeed * Time.fixedDeltaTime);
            return true;
        } else {
            return false;
        }
        
    }
    
    
    void UpdateAnimation_DONT_USE(){
        // this is my origional function that would be called when I didn't have a blend tre
        //animation direction
        if (movementInput.x == 0.00d){
            if (movementInput.y ==1.00d){
                //up
                animator.SetInteger("direction",1);
            }
        }else if (movementInput.x == 1.00d) {
            if (movementInput.y == 0.00d){
                //right
                animator.SetInteger("direction",2);
            }
        }else if (movementInput.x == 0.00d) {
            if (movementInput.y == -1.00d){
                //down
                animator.SetInteger("direction",3);
            }
        }else if (movementInput.x == -1.00d){
            if (movementInput.y == 0.00d){
                //left
                animator.SetInteger("direction",4);
                
            }
        } 
        
    
        
    
    
    }
    
    void OnMove(InputValue movementValue) {
        movementInput =  movementValue.Get<Vector2>();
    }

}

Видео с ютуба, которое я использовал Во-первых, у меня было много стрелок перехода от блока «Любое состояние» ко всем фазам анимации. Когда я попробовал это, произошел тот же результат. Затем я посмотрел другое видео на YouTube, в котором показано, как использовать дерево смешивания Я до сих пор не знаю, в чем проблема, перепробовав много разных вещей. Если кто-то может помочь, это было бы очень признательно. :)

🤔 А знаете ли вы, что...
C# позволяет создавать приложения с графическим пользовательским интерфейсом (GUI) на разных платформах.


219
1

Ответ:

Решено

Я нашел решение, означающее, что я должен переделать игру. Хотя я до сих пор не знаю, в чем проблема, я использовал систему ввода по умолчанию в новом проекте, и она отлично работает. Спасибо всем, кто пытался мне помочь! :)


Интересные вопросы для изучения