Este diretório contém os componentes que gerenciam o comportamento do jogador. Cada componente é uma classe que herda de PlayerComponent e implementa funcionalidades específicas do sistema de movimento e input.
Classe abstrata que define a interface padrão para todos os componentes do jogador.
Métodos disponíveis:
InitializeComponent()- Inicializa o componente com referência ao PlayerControllerAwakeComponent()- Chamado no Awake do MonoBehaviourStartComponent()- Chamado no Start do MonoBehaviourUpdateComponent()- Chamado no Update do MonoBehaviourFixedUpdateComponent()- Chamado no FixedUpdate do MonoBehaviourLateUpdateComponent()- Chamado no LateUpdate do MonoBehaviourOnEnableComponent()- Chamado quando o componente é ativadoOnDisableComponent()- Chamado quando o componente é desativadoOnDestroyComponent()- Chamado quando o componente é destruídoOnDrawGizmosComponent()- Chamado para desenhar Gizmos de debug
Arquivo: PlayerInputHandler.cs
Responsável pelo gerenciamento de input do jogador usando o novo Input System.
Funcionalidades:
- Captura inputs de movimento (W/A/S/D ou Analógico)
- Dispara eventos quando há movimento
- Gerencia o ciclo de vida do sistema de input
Eventos:
OnMovementInput- Disparado quando há input de movimento (Vector2)
Método de Inicialização:
AwakeComponent() {
_inputControls = new InputControls();
_moveAction = _inputControls.Player.Move;
_moveAction.performed += OnMovePerformed;
}Arquivo: PlayerMovement.cs
Responsável pelo movimento e física do jogador.
Funcionalidades:
- Movimento horizontal automático
- Sistema de pulo com gravidade customizável
- Queda acelerada
- Detecção de solo via Raycast
- Restrições de rotação para manter o cubo sempre na posição correta
Comportamento:
- W ou Seta Para Cima - Pulo (se estiver no solo)
- S ou Seta Para Baixo - Queda acelerada (se estiver no ar)
- Movimento automático para frente constantemente
Constraints do Rigidbody:
- Congelada rotação nos eixos X e Z
- Permite rotação no eixo Y
Debug:
- Raycast visual via Gizmos (Verde = no solo, Vermelho = no ar)
- Logs de input via PlayerDebugManager
- Crie uma nova classe que herde de
PlayerComponent - Implemente os métodos desejados (não é necessário implementar todos)
- Adicione a instância no array
_playerComponentsdoPlayerController
Exemplo:
[Serializable]
public class MeuComponente : PlayerComponent {
public override void InitializeComponent(PlayerController playerController) {
base.InitializeComponent(playerController);
// Inicialize suas referências aqui
}
public override void UpdateComponent() {
// Lógica a cada frame
}
}PlayerController (MonoBehaviour)
├── PlayerInputHandler (Component)
│ └── Gerencia Input
├── PlayerMovement (Component)
│ └── Gerencia Movimento e Física
└── Mais componentes...
Cada componente é inicializado no Awake() do PlayerController e todos os métodos são chamados de forma sincronizada através do sistema de ForEachComponent().
- Os componentes são instanciados via
[SerializeField]no Inspector - O sistema de eventos desacoplado permite comunicação entre componentes
- Todos os componentes têm acesso ao
PlayerControlleratravés de_playerController