LoginSignup
7
8

More than 5 years have passed since last update.

多分これが一番簡単なStateMachineだと思います.

Last updated at Posted at 2016-05-15

状態によってキャラクターの挙動を変えるサンプル.

1. 状態の定義

ここでは,例としてAngry状態とSmile状態があるとします.
スクリーンショット 2016-05-15 15.21.50.png

状態をスクリプトで列挙する.

Angryを0, Smileを1と数字で置きます.

また,現在の状態をint型の整数currentStateとして,最初の状態をAngryとすると,以下のように表すことができます.

現在の状態を設定するスクリプト

int currentState = 0;     //Angry:0 ,   Smile:1

スクリーンショット 2016-05-15 15.30.46.png

これで,現在何の状態なのかを設定することができました.

2. 状態を変える条件の追加

AngryからSmileに変わる条件を「Sキーを押した時」にします.

Sキーを押したらSmile状態に変えるスクリプト

// state : Angry
        if (currentState == 0) {
            Debug.Log ("Angry!");

            //Smileになる条件
            if (Input.GetKeyDown (KeyCode.S)) {
                currentState = 1;
            }
        }

図で表すと以下のようになります.
スクリーンショット 2016-05-15 15.36.11.png

現在の状態がAngry状態からSmile状態に変わりましたね.

この条件の矢印をSmileからAngryの方にも作ることで完成です.

完成スクリプト

int currentState = 0;  // 0:Angry   1:Smile

    void Update () {

        // state : Angry
        if (currentState == 0) {
            Debug.Log ("Angry!");

            //Smileになる条件
            if (Input.GetKeyDown (KeyCode.S)) {
                currentState = 1;
            }
        }


        // state : Smile
        if (currentState == 1) {
            Debug.Log ("Smile!");

            //Angryになる条件
            if (Input.GetKeyDown (KeyCode.A)) {
                currentState = 0;
            }
        }
    }

StateMachine完成図

image

これで実装完了です.

StateMachineに慣れてくると,AIを記述したり,ごちゃごちゃしたプログラムを考える時に整理するといったことが可能になります.

練習問題

以下の図のようにSad状態を追加せよ.
image

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8