State

Last-modified: 2009-11-28 (土) 21:08:38

UnrealScriptでは言語レベルでステートマシンをサポートしている。
定義にはstateブロックを利用し、ブロック内で変数・関数を定義できる。stateブロック内で定義された関数は、アクタがその状態にいるときのみ呼び出しが可能となる。

定義

stateには三通りの定義方法があり、意味が異なる。

UnrealEdで設定可能なstate

stateのあとに括弧をつける記法。

state() MyState

{

...

}

設定不能なstate

stateのみの記法。

state MyState

{

...

}

デフォルトのstate

stateの前にautoをつける記法。このstateがアクタの初期状態になる。

auto state MyState

{

...

}

ブロック内の要素

stateブロック(ブレースで囲まれた中)内ではclassブロックと同様に変数・関数定義ができる他、stateコードとよばれるコードを記述できる。stateコードについては次節以降で述べる。
例:

state MyState

{

var int someValue;//変数が定義できる

var Actor someActor;

function someFunction()//関数も定義できる

{

...

}

//以下stateコード

Label://関数同様にラベルが利用可能

goto('Label');//無限ループ

}

stateコード

stateコードは、stateブロック直接書くことができるコードである。関数定義内と同様の記述ができるほか、いくつかの組み込み関数が利用でき、またラベルに関して特殊な用法がある。

組み込み関数

  • Sleep(float Seconds): Second秒待つ。
  • FinishAnim(): (恐らくアクタの)アニメーションが終わるまで待つ
  • FinishInterpolation(): 現在のInterpolationPoint movementが完了するまで待つ
    他にもあるかも

ラベルとgoto('')

stateコードのラベル名は基本的に自由だか、Beginという名前は予約されている。Beginラベルはその状態に遷移したときに実行を開始するラベルである。
また、goto('')はstateコードの実行を中断し、同一状態内の別のラベルか次の状態に遷移するまで何もしない。

状態の遷移

状態の遷移はGotoState('状態名', 'ラベル名')を用いる。第二引数のラベル名は省略でき、その場合Beginラベルに遷移する。

状態の継承