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º
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
}
}
