[英]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.