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