首页 > 解决方案 > 状态机 - 如何将有关成功操作的信息传递给状态

问题描述

我在我的城市管理游戏中使用我自己的状态机作为我的人工智能,它运行得相当好。我使用了一个非常简单的界面:

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();
        }
    }

我唯一的问题是我发现自己重写了很多逻辑,以给出一个场景:

有面包师、铁匠、建筑工人等等。所有这些职业都有一个状态,可以找到最近的存储设施并去那里收集他们工作所需的材料。

所有这些都使用相同的逻辑,除了说明当你到达仓库时要做什么的那一行之外,即面包师想要得到小麦然后返回他们的面包店。铁匠会想要一些铁并返回给他们的铁匠。

基本上他们所做的是:

  1. 查找存储
  2. 去存储
  3. 如果存储有资源,则更改状态以返回工作场所
  4. 否则找到下一个最近的存储并查看该存储是否有资源
  5. 重复 3 直到找到资源。

正如你可以想象的那样,我对“回到工作场所”状态有完全相同的问题,除了在到达时要做什么之外,它在该状态下基本上是完全相同的逻辑。

有没有一些聪明的方法可以创建一个名为“FindStorageState”的单一状态,并在我的设备到达时向它传递信息?

这是一个很好的例子,说明了一个职业的样子:

在此处输入图像描述

标签: c#unity3dartificial-intelligencestate-machine

解决方案


推荐阅读