Interação do Jogador com Objetos
Interfaces
Uma interface é como um contrato que define um conjunto de métodos e propriedades que uma classe deve implementar. Ela permite especificar quais funcionalidades uma classe deve possuir sem fornecer detalhes de implementação.
Exemplo
Suponha que você esteja desenvolvendo um jogo no Unity e queira criar diferentes tipos de armas, como espadas, armas de fogo e arcos. Você pode criar uma interface chamada IWeapon
que descreve as ações básicas que qualquer arma deve ser capaz de executar, como Attack()
e Reload()
.
Agora, qualquer classe que queira ser considerada uma arma em seu jogo deve implementar essa interface. Por exemplo, você pode ter uma classe Sword
ou uma classe Gun
.
Ao utilizar interfaces, é possível garantir que todas as suas armas tenham a mesma funcionalidade básica (Attack()
e Reload()
), mas cada uma pode ter sua própria implementação exclusiva. Isso torna seu código mais modular e fácil de gerenciar, especialmente à medida que seu jogo se torna mais complexo.
Esta é a interface que utilizamos em nosso jogo para marcar os inimigos como objetos que podem ser atacados.
public interface IGetAttacked
{
public void GetAttacked(int damage);
}
TryGetComponent
if (rayCastHit.transform.TryGetComponent(out IGetAttacked getAttacked))
{
getAttacked.GetAttacked(damage);
attackEffect.transform.position = rayCastHit.point;
attackEffect.Play();
isAttacking = false;
}
Pontos-chave
raycastHit
: Refere-se ao resultado de um raycast hit. Ao lançar um raio no Unity, obtém-se informações sobre qual objeto foi atingido;.TryGetComponent(out IGetAttacked getAttacked)
: Este método tenta recuperar um componente específico do transform doGameObject
. A palavra-chaveout
é usada para atribuir o componente recuperado à variávelgetAttacked
, se for bem-sucedido. Caso contrário, ignora tudo dentro desseif
;IGetAttacked
: Tipo de interface que o código está tentando recuperar doGameObject
. Especifica que oGameObject
deve possuir um componente que implemente a interfaceIGetAttacked
.
Se o GameObject
atingido pelo raycast possuir um componente que implementa a interface IGetAttacked
, a variável getAttacked
armazenará uma referência para esse componente após a execução desta linha. Caso contrário, getAttacked
receberá o valor null.
Obrigado pelo seu feedback!