Articles

Finite State Machines [Part 1] – Unity Development Resources from TKoU

Finite State Machines は、Unity でゲーム開発を始めた数年の間に、開発者なら誰でも一度は聞いたことがある言葉かもしれませんね。 そのため、少なくとも3つのパートに分かれています。 基本的に、有限状態マシン (Finite State Machine、または FSM) は、自動化が行われるデザイン パターンです。 AIの実装では、特定の動作のためによく使われます。 例えば、歩く、攻撃する、アイドリングする、など。 FSM は NPC にも実装でき、オープンワールド RPG で最も一般的です。

fsm1FSM をオーバーザーとして扱ってみましょう。 状態によって、AIはそれに反応する。 また、AIの種類(飛行型なのか、地上型なのか、泳ぐ型なのか)によっても、そのAIが行う行動は異なります。 このシナリオでは、FSMはAIに「パトロール状態」であることを伝え、「AからBまで歩いてください」と指示します。 状態が変化しない限り、AIはAからBまで歩くだけです。

fsm2

状態を変化させるには、まず条件が必要です。 左の画像では、AIがプレイヤーを見て、監督に伝えています。

1ZmLLoS1bAl71Ea_BNZzHWaja5YsjvqLa2z-ubNY ここでも、プレイヤーが視界に入らないので、AIは再び巡回を開始します。

このように、すべての状態には、他の状態に変化する前に条件があります。

sNz-b43jHw-bZzuRbNlrvHQ

以下の図を見てみましょう。 赤い線は、状態を変更するために必要な条件の偽を表します。 この図は非常にわかりやすいものです。 AIは目的地に到着するとIdle Stateになり、逆に目的地に到着しないとIdle Stateになります。 敵を発見したら攻撃を開始します。

では、FSMシステムを分解してみましょう。

  • Main FSM System – これは、AIの状態を制御し、状態間の条件をチェックするものになります。 メインFSMはすべての状態を含み、FSMアクションからのイベントコールを処理します。
  • FSM State – これはAIの現在の状態を決定し、AIに配置されたすべてのアクションを含みます。
  • FSM Action – これはAIが特定の状態にあるときに行うアクションになります。

    sV8-Gi7zqfM4YoWEXA-SCGw

    これは、FSMのループになります。 まず、FSM を初期化し、状態を作成し、アクションを作成し、それらをすべてマップします。 マッピングが終わったら、今度はFSMを起動し、AIが開始する状態を指示します。 さて、AIは特定の状態に変化し、FSMはアクションを初期化し、アクションが終了するまで更新し、アクションが終了したことを示すイベントを送信します。 最後に、FSM は戻って状態を変更します。

    状態の変更を引き起こすもう 1 つのものは、AIのロジックの外側でイベントが呼び出された場合です。 司令官を作成して、すべての兵士に動きを停止するように指示したときのように。 FSMをうまく説明できたでしょうか。 もしまだ理解できないなら、おそらく最初にすべてを実際に見て、自分自身ですべてをスキャンする必要があるでしょう。
    次回のパートでは、まず、いくつかの簡単な実際のFSM実装について再度説明し、ゼロからFSMエンジン全体をスクリプト化することにします!