Дерево смешивания 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, в котором показано, как использовать дерево смешивания Я до сих пор не знаю, в чем проблема, перепробовав много разных вещей. Если кто-то может помочь, это было бы очень признательно. :)

Можете ли вы поделиться своими условиями перехода?

Nefisto 27.11.2022 16:42

Можете ли вы вставить лог в свои проверки на !success и поделиться результатами?

Nefisto 27.11.2022 16:59

Мой журнал игрока пуст, но журнал редактора огромен, и я не знаю, как его проверить. Мои анимационные переходы выглядят так: imgur.com/a/mcK6Sk3

MrCPlusPlus 29.11.2022 18:42

Просто вставьте Debug.Log в !success testing, я думаю, что вы делаете двойное движение, и это может вызвать дрожание

Nefisto 29.11.2022 18:48

Извините за назойливость, но где в сценарии это указать?

MrCPlusPlus 29.11.2022 18:57

Внутри вашего if (!success), оба они и один снаружи тоже, поместите в него эту строку - Debug.Log($"A: {Time.frameCount}"); - просто измените A на что-то другое, чтобы мы могли различать их

Nefisto 29.11.2022 19:03

Он ничего не делает, кроме случаев, когда я во что-то вхожу — он регистрирует игровой объект, с которым он столкнулся (ожидаемый).

MrCPlusPlus 01.12.2022 17:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
219
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме