C# 状态机-如何将成功后的操作信息传递给状态机
我在我的城市管理游戏中使用我自己的状态机作为我的AI,它运行得相当好。我使用了一个非常简单的界面:C# 状态机-如何将成功后的操作信息传递给状态机,c#,unity3d,artificial-intelligence,state-machine,C#,Unity3d,Artificial Intelligence,State Machine,我在我的城市管理游戏中使用我自己的状态机作为我的AI,它运行得相当好。我使用了一个非常简单的界面: public interface IState { int Id { get; set; } void Enter(); void Execute(); void Exit(); } 要更改状态,请执行以下操作: public void ChangeState(IState newState) { if (currentState !=
public interface IState
{
int Id { get; set; }
void Enter();
void Execute();
void Exit();
}
要更改状态,请执行以下操作:
public void ChangeState(IState newState)
{
if (currentState != null)
currentState.Exit();
if (currentState != newState)
{
currentState = newState;
currentState.Enter();
}
}
我唯一的问题是,我发现自己重新编写了很多逻辑,给出了一个场景:
有面包师、铁匠、建筑工人等等。所有这些职业都有一个状态,即找到最近的储存设施,然后去那里收集他们工作所需的材料
同样的逻辑也适用于所有的面包店,除了说明当你到达仓库时该做什么的那一行之外,也就是说,面包师想要得到小麦,然后回到他们的面包店。铁匠会想要一些铁,然后回到他们的铁匠那里
基本上他们做的是:
为什么不将这些额外信息存储在实现接口的类中?取决于你对信息的需求程度,它可以是任何东西,从一个简单的值到一个在适当的时候执行的
委托
(甚至是另一个带方法的类)@unholyshim嗯,没有“Baker”类或“Blacksmith”类,他们都只是不同职业的工人,因此,要找到一个面包师,我需要查找所有工人,其中currentProfessions==“baker”
我的意思是你可以将其存储在FindStorageState
类中,那么你的意思是通过该职业,并且根据职业的不同,它会做出不同的反应?不要担心投票结果如何,看看首页,一切都会无缘无故地被否决。。。至于您的问题,我认为您应该有一个worker基类,其中包含所有的方法(find shop、action at shop、action at home等等),都是虚拟的,这样您就可以继承子类型。那些是铁匠等等。根据需要使用这些工具中的每一个。整个系统只处理工人类型。