Unity C# Interface nybörjarguide
Ett gränssnitt i C# är ett kontrakt som definierar en uppsättning metoder, egenskaper och händelser som en klass måste implementera. Det fungerar som en ritning för att implementera funktionalitet i flera klasser. Gränssnitt ger ett sätt att uppnå polymorfism, vilket gör att olika klasser kan dela gemensamma beteenden.
Unity C#-gränssnitt
För att använda gränssnitt i Unity, följ stegen nedan:
- Skapa ett nytt skript och namnge det vad som helst (i mitt fall kallar jag det InterfaceContainer)
- Ta bort allt inuti den och klistra in koden nedan:
public interface IEntity
{
void Initialize(); //Function without any arguments
float health { get; set; } //A variable
void ApplyDamage(float points); //Function with one argument
}
Gränssnittet kallas IEntity (Obs! Det stora i i början är inte nödvändigt, men för enkelhetens skull namnge alla dina gränssnitt med ' Jag' i början, på så sätt skulle du veta när klassen använder ett gränssnitt).
Följ stegen nedan för att använda gränssnittet i ett C#-skript:
- Skapa ett nytt skript och namnge det vad som helst (i mitt fall kommer jag att döpa det till EntityScript)
- Lägg till gränssnittsnamn efter MonoBehaviour, vilket är IEntity i det här fallet (avgränsade med kommatecken)
public class EntityScript : MonoBehaviour, IEntity
Du kommer att märka att skriptet ger ett fel, det beror på att gränssnittsmetoderna inte är implementerade. Så låt oss implementera 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;
}
}
Gränssnittsmetoderna är nu implementerade.
Hur förenklar gränssnitt programmeringsarbetsflödet?
Den största fördelen med C#-gränssnitt är att de kan användas av flera klasser, så istället för att anropa GetComponent för varje skript, kan du få alla skriptreferenser genom att använda gränssnittsnamnet.
Använd C#-gränssnitten när du behöver implementera samma metoder i mer än ett skript, eller när du behöver referera till en okänd klass i samma sammanhang.
Kontrollera exemplet nedan:
//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 ovan får en komponent med ett IEntity-gränssnitt och anropar sedan dess metoder.
Bonus
Gränssnitt kan också acceptera anpassade datatyper, till exempel:
public interface IHealable<T>
{
void Heal(T type);
}
Datatypen tillhandahålls sedan när gränssnittet implementeras i en klass (det kan vara en standardtyp som float eller int, eller en mer komplex typ som en klass eller till och med ett annat gränssnitt):
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;
}
}