Guia do Iniciante da Interface Unity C#
Uma interface em C# é um contrato que define um conjunto de métodos, propriedades e eventos que uma classe deve implementar. Ele atua como um modelo para implementar a funcionalidade em várias classes. As interfaces fornecem uma maneira de obter polimorfismo, permitindo que classes diferentes compartilhem comportamentos comuns.
Unity Interface C#
Para usar interfaces em Unity, siga os passos abaixo:
- Crie um novo script e nomeie-o como quiser (no meu caso, vou chamá-lo de InterfaceContainer)
- Remova tudo dentro dele e cole o código abaixo:
public interface IEntity
{
void Initialize(); //Function without any arguments
float health { get; set; } //A variable
void ApplyDamage(float points); //Function with one argument
}
A interface é chamada de IEntity (Nota: A maiúscula i no início é não é necessário, mas por conveniência, nomeie todas as suas interfaces com I no início, assim você saberia quando a classe usa uma interface).
Para usar a interface em um script C#, siga os passos abaixo:
- Criar um novo script e nomeá-lo como quiser (no meu caso, vou chamá-lo de EntityScript)
- Adicionar o nome da interface após o MonoBehaviour, que é IEntity neste caso (separado por vírgula)
public class EntityScript : MonoBehaviour, IEntity
Você notará que o script dá um erro, porque os métodos da interface não estão implementados. Então vamos implementar os métodos IEntity:
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity
{
public float health { get; set; }
public void Initialize()
{
health = 100;
}
public void ApplyDamage(float points)
{
health -= points;
}
}
Os métodos de interface agora estão implementados.
Como as interfaces simplificam o fluxo de trabalho de programação?
A principal vantagem das interfaces C# é que elas podem ser usadas por várias classes, portanto, em vez de chamar GetComponent para cada script, você pode obter todas as referências do script usando o nome da interface.
Use as interfaces C# quando precisar implementar os mesmos métodos em mais de um script ou quando precisar referenciar uma classe desconhecida no mesmo contexto.
Confira o exemplo abaixo:
//Get the script that uses IEntity interface
IEntity interfaceEntity = gameObject.GetComponent();
interfaceEntity.Initialize(); //Initializing the entity
interfaceEntity.ApplyDamage(10); //Applying the damage
interfaceEntity.health += 10; //Healing the entity
O script acima obtém um componente com uma interface IEntity e chama seus métodos.
Bônus
Interfaces também podem aceitar tipos de dados personalizados, por exemplo:
public interface IHealable{
void Heal(T type);
}
O tipo de dados é fornecido ao implementar a interface em uma classe (pode ser um tipo padrão como float ou int, ou mais tipo complexo como Classe ou até mesmo outra Interface):
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity, IHealable{
public float health { get; set; }
public void Initialize()
{
//health = 100;
Heal(100);
}
public void ApplyDamage(float points)
{
health -= points;
}
public void Heal(int points)
{
health = points;
}
}