Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Interação do Jogador com Objetos | Comportamento do Jogador
Jogo de Luta no Unity

bookInteraçã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 do GameObject. A palavra-chave out é usada para atribuir o componente recuperado à variável getAttacked, se for bem-sucedido. Caso contrário, ignora tudo dentro desse if;
  • IGetAttacked: Tipo de interface que o código está tentando recuperar do GameObject. Especifica que o GameObject deve possuir um componente que implemente a interface IGetAttacked.

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.

question mark

Qual é o propósito do método TryGetComponent no Unity?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 5

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

bookInteraçã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 do GameObject. A palavra-chave out é usada para atribuir o componente recuperado à variável getAttacked, se for bem-sucedido. Caso contrário, ignora tudo dentro desse if;
  • IGetAttacked: Tipo de interface que o código está tentando recuperar do GameObject. Especifica que o GameObject deve possuir um componente que implemente a interface IGetAttacked.

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.

question mark

Qual é o propósito do método TryGetComponent no Unity?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 5
some-alt