状態によってキャラクターの挙動を変えるサンプル.
1. 状態の定義
ここでは,例としてAngry状態とSmile状態があるとします.
状態をスクリプトで列挙する.
Angryを0, Smileを1と数字で置きます.
また,現在の状態をint型の整数currentState
として,最初の状態をAngryとすると,以下のように表すことができます.
現在の状態を設定するスクリプト
int currentState = 0; //Angry:0 , Smile:1
これで,現在何の状態なのかを設定することができました.
2. 状態を変える条件の追加
AngryからSmileに変わる条件を「Sキーを押した時」にします.
Sキーを押したらSmile状態に変えるスクリプト
// state : Angry
if (currentState == 0) {
Debug.Log ("Angry!");
//Smileになる条件
if (Input.GetKeyDown (KeyCode.S)) {
currentState = 1;
}
}
現在の状態が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完成図
これで実装完了です.
StateMachineに慣れてくると,AIを記述したり,ごちゃごちゃしたプログラムを考える時に整理するといったことが可能になります.