Unity C# Interface nybegynnerveiledning
Et grensesnitt i C# er en kontrakt som definerer et sett med metoder, egenskaper og hendelser som en klasse må implementere. Den fungerer som en blåkopi for implementering av funksjonalitet i flere klasser. Grensesnitt gir en måte å oppnå polymorfisme, slik at forskjellige klasser kan dele felles atferd.
Unity C#-grensesnitt
For å bruke grensesnitt i Unity, følg trinnene nedenfor:
- Lag et nytt skript og navngi det hva som helst (i mitt tilfelle kaller jeg det InterfaceContainer)
- Fjern alt inni den og lim inn koden nedenfor:
public interface IEntity
{
void Initialize(); //Function without any arguments
float health { get; set; } //A variable
void ApplyDamage(float points); //Function with one argument
}
Grensesnittet kalles IEntity (Merk: Hovedstaden i i starten er ikke nødvendig, men for enkelhets skyld, navngi alle grensesnittene dine med '[elem] =11]I' i starten, på den måten ville du vite når klassen bruker et grensesnitt).
For å bruke grensesnittet i et C#-skript, følg trinnene nedenfor:
- Opprett et nytt skript og navngi det hva som helst (i mitt tilfelle kaller jeg det EntityScript)
- Legg til grensesnittnavn etter MonoBehaviour, som er IEntity i dette tilfellet (atskilt med komma)
public class EntityScript : MonoBehaviour, IEntity
Du vil legge merke til at skriptet gir en feil, det er fordi grensesnittmetodene ikke er implementert. Så la oss implementere IEntity-metoder:
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity
{
public float health { get; set; }
public void Initialize()
{
health = 100;
}
public void ApplyDamage(float points)
{
health -= points;
}
}
Grensesnittmetodene er nå implementert.
Hvordan forenkler grensesnitt arbeidsflyten for programmering?
Hovedfordelen med C#-grensesnitt er at de kan brukes av flere klasser, så i stedet for å kalle GetComponent for hvert skript, kan du få alle skriptreferansene ved å bruke grensesnittnavnet.
Bruk C#-grensesnittene når du trenger å implementere de samme metodene i mer enn ett skript, eller når du trenger å referere til en ukjent klasse i samme kontekst.
Sjekk eksempelet nedenfor:
//Get the script that uses IEntity interface
IEntity interfaceEntity = gameObject.GetComponent<IEntity>();
interfaceEntity.Initialize(); //Initializing the entity
interfaceEntity.ApplyDamage(10); //Applying the damage
interfaceEntity.health += 10; //Healing the entity
Skriptet ovenfor får en komponent med et IEntity-grensesnitt, og kaller deretter metodene.
Bonus
Grensesnitt kan også godta tilpassede datatyper, for eksempel:
public interface IHealable<T>
{
void Heal(T type);
}
Datatypen oppgis da når grensesnittet implementeres i en klasse (det kan være en standardtype som float eller int, eller en mer kompleks type som en klasse eller til og med et annet grensesnitt):
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity, IHealable<int>
{
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;
}
}