Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Animações pararam de funcionar corretamente

Boa noite a todos.

Depois de algum tempo tentando entender o que eu havia feito de errado no código, eu percebi que ao incluir o código:

GameManager.Instance.InputManager.OnAttack += PlayAttackAnim;

no Awake() as animações que eu havia criado paravam de funcionar, assim como a recem adicionada de ataque também não estava a funcionar. Porém ao colocar o mesmo código dentro do Update(), as animações anteriores e a de ataque passavam a funcionar.

Na aula, entretanto, esta parte do código funciona dentro do Awake(), mas no meu não funcionou. Alguém tem alguma ideia/explicação do motivo ? Estou confuso.

1 resposta
solução!

Oi João! Tudo joia?

Existem algumas possíveis causas para esse tipo de situação, vamos analisá-las junta das suas soluções.

Possíveis Causas

  1. Ordem de Inicialização: No Unity, a ordem de execução dos métodos Awake(), Start(), e Update() pode influenciar no comportamento do jogo. É possível que o InputManager ainda não esteja totalmente inicializado quando você está tentando se inscrever no evento OnAttack dentro do Awake().

  2. Referências Nulas: Verifique se todas as referências necessárias estão corretamente atribuídas antes de chamar GameManager.Instance.InputManager.OnAttack += PlayAttackAnim;. Se alguma referência estiver nula, isso pode causar problemas.

Soluções Sugeridas

  1. Mover para Start(): Tente mover a inscrição do evento para o método Start(), que é chamado após Awake() e pode garantir que todas as inicializações necessárias já foram concluídas.

    private void Start()
    {
        GameManager.Instance.InputManager.OnAttack += PlayAttackAnim;
    }
    
  2. Verificação de Inicialização: Certifique-se de que o GameManager e o InputManager estão inicializados corretamente antes de tentar se inscrever no evento. Você pode adicionar uma verificação para garantir que não são nulos.

    private void Awake()
    {
        animator = GetComponent<Animator>();
        groundedChecker = GetComponent<IsGroundedChecker>();
        playerHealth = GetComponent<Health>();
    
        playerHealth.OnHurt += PlayHurtAnim;
        playerHealth.OnDead += PlayDeadAnim;
    
        if (GameManager.Instance != null && GameManager.Instance.InputManager != null)
        {
            GameManager.Instance.InputManager.OnAttack += PlayAttackAnim;
        }
        else
        {
            Debug.LogError("GameManager or InputManager is not initialized.");
        }
    }
    
  3. Debugging: Adicione algumas mensagens de log para verificar se o Awake() está sendo chamado corretamente e se as referências estão sendo atribuídas como esperado.

    private void Awake()
    {
        Debug.Log("Awake called");
        animator = GetComponent<Animator>();
        groundedChecker = GetComponent<IsGroundedChecker>();
        playerHealth = GetComponent<Health>();
    
        playerHealth.OnHurt += PlayHurtAnim;
        playerHealth.OnDead += PlayDeadAnim;
    
        if (GameManager.Instance != null && GameManager.Instance.InputManager != null)
        {
            Debug.Log("Subscribing to OnAttack event");
            GameManager.Instance.InputManager.OnAttack += PlayAttackAnim;
        }
        else
        {
            Debug.LogError("GameManager or InputManager is not initialized.");
        }
    }
    

Espero que essas sugestões ajudem a resolver o problema com as animações.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.