[英]Calling a method that is unspecified at compile time
在Unity中修修補補,我的GUI的一部分將呈現代表游戲中不同事物的幾種不同類類型之一的信息(例如,敵人統計數據)。 所有不同的類都有一個用於創建包含所需信息的信息對象的方法(例如,敵方信息對象),該方法具有一個DrawInfo()方法,該方法根據gameObject繪制信息。
在我的信息呈現腳本中,我希望能夠將任何一個不同的信息對象分配給一個變量(即當前選擇的敵人,NPC等),並能夠調用DrawInfo()方法。 有沒有一種干凈,簡單和/或更好的方法來做到這一點?
如果需要,我可以詳細說明。
這是一種眾所周知的設計模式,稱為“策略模式” 。 它擴展了“編程到接口”的思想。
該策略模式旨在提供一種定義一系列算法的方法,將每個算法封裝為一個對象,並使它們可互換。 策略模式使算法可以獨立於使用它們的客戶端而變化。
首先,定義一個包含DrawInfo
的接口,例如ISprite
。 您所有的精靈都是實現此接口的類。 現在,游戲可以存儲對所選ISprite
的引用,並在其上調用方法。
例如:
public interface ISprite
{
void Draw();
}
public class BossMonster : ISprite
{
public override void Draw()
{
// Draw scary stuff
}
}
public class NPC : ISprite
{
public override void Draw()
{
// Draw stuff
}
}
public class Game
{
private ISprite currentSprite = ...
private List<ISprite> otherSprites = ...
public void Render()
{
currentSprite.Draw();
foreach (ISprite sprite in otherSprites)
{
sprite.Draw();
}
}
}
我能想到的最好的方法是在實現IDrawableInfo
類的接口上制作要調用DrawInfo()的游戲中的所有對象:
public interface IDrawableInfo
{
void DrawInfo();
}
public class EnemyInfoObject : IDrawableInfo
{
public void DrawInfo()
{
// Do drawing stuff here
}
}
if(objectIdLikeToDrawInfoFor is IDrawableInfo)
{
objectIdLikeToDrawInfoFor.DrawInfo();
}
通過將DrawInfo()
調用包裝在這樣的if語句中,可以避免運行時錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.