Desempenho e processamento do jogo

Olá pessoal, tudo bem?
Ainda não finalizei o curso, mas vamos lá
Estou com um problema que vem me incomodando a tempos.
Meu jogo é relativamente simples. Tem bastante lógica já nele, mas nada muito elaborado. Não tenho muita coisa que roda no update por exemplo.
Hoje, comecei a implementar a movimentação do personagem.

Porém, depois de implementar uma movimentação simples, quando rodo o jogo a Placa de vídeo e o processador vão para valores ridículos. A placa chegou a 92% de uso e quase 100º :eyes:

Preciso resolver isso logo, para não seguir o jogo todo com estes problemas.
Sobre a movimentação: estou usando blend tree, animator controller e o novo input system da unity.

Já está tudo funcionando, com o boneco seguindo meus comandos.
Vou anexar algumas fotos e códigos.
Estou usando um pacote de assets da synty, e montei uma cena bem simples e pequena para testar, com os prefabs que vieram no pacote.

Se alguém souber o que está acontecendo e puder ajudar ou dar dicas, muito obrigado.

Código de movimentação:

using UnityEngine;
using UnityEngine.InputSystem;

public class Movimentacao : MonoBehaviour {

    private Rigidbody rb;
    private Vector2 movimento;
    private Animator animator;

    public float velocidade = 2.5f; // Controla a velocidade do movimento
    public float forcaPulo = 300f; // Força do pulo

    private int inputXHash = Animator.StringToHash("InputX");
    private int inputYHash = Animator.StringToHash("InputY");
    private bool correndo = false;

    private void Awake() {
        animator = GetComponent<Animator>();
        rb = GetComponent<Rigidbody>();
    }

    public void Movimentar(InputAction.CallbackContext valor) {
        movimento = valor.ReadValue<Vector2>();
    }

    public void Pular(InputAction.CallbackContext valor) {
        if (valor.performed && IsGrounded()) {
            rb.AddForce(Vector3.up * forcaPulo);
        }
    }

    public void Correr(InputAction.CallbackContext valor) {
        if (valor.performed) {
            correndo = true;
        } else if (valor.canceled) {
            correndo = false;
        }
        animator.SetBool("Correr", correndo);
    }

    // Verifica se o personagem está no chão (evita pular infinitamente no ar)
    private bool IsGrounded() {
        // Raycast para checar se está no chão
        return Physics.Raycast(transform.position, Vector3.down, 1.1f);
    }

    // Movimenta o personagem de forma física, aplicando força com o Rigidbody
    private void FixedUpdate() {
        Vector3 direcao = new Vector3(movimento.x, 0, movimento.y);
        velocidade = correndo ? 3f : 2.5f;

        if (direcao != Vector3.zero)
            transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direcao), Time.deltaTime * 10);

        rb.MovePosition(rb.position + direcao * velocidade * Time.fixedDeltaTime);

        // Suaviza a transição das animações
        float smoothX = Mathf.Lerp(animator.GetFloat(inputXHash), movimento.x, Time.fixedDeltaTime * 10f);
        float smoothY = Mathf.Lerp(animator.GetFloat(inputYHash), movimento.y, Time.fixedDeltaTime * 10f);

        // Define os valores suavizados para o Animator
        animator.SetFloat(inputXHash, smoothX);
        animator.SetFloat(inputYHash, smoothY);
    }
    public void OnFootstep() {
        // Aqui vai ser colocado o som de passos ou outros efeitos
    }
}



image

2 curtidas

Atualizando aqui…
Encontrei a seguinte configuração e recomendo todos que estão tendo problemas similares a implementar:

A Unity força o PC a executar ao máximo de FPSs possíveis, e isso estoura a GPU. Uma M. Enfim, setando essas configurações da documentação o problema aqui resolveu. Vou seguir fazendo mais testes e informando.

Além disso, encontrei alguns gringos falando sobre:
https://www.reddit.com/r/Unity3D/comments/x5v0ew/unity_games_going_crazy_with_gpu_usage_100_gpu/?share_id=2SG5wat9MDOGITJQk5LgN&utm_medium=ios_app&utm_name=iossmf&utm_source=share&utm_term=3

Caso alguém precise de mais apoio.
Obrigado

2 curtidas