分岐処理は If ユニットや Switch ユニットなどを使って行います。
また純粋な分岐処理とは少し違うのですが、Select ユニット、Sequence ユニット、 Once ユニットの使い方も説明します。
まず準備です。
分岐処理テスト用に別の Script Graph を用意します
Scripts フォルダの中に入り、空いている部分を右クリックしてメニューを表示し、Create → Visual Scripting → Script Graph を選ぶ
Scripts フォルダ内に「New Script Graph」というアセットが出来るので「If Script」に名前を変更する
ヒエラルキーの PROGRAM をクリックしてインスペクタを表示する
Script Machine の Graph の Enzan Script と書いてあるセルに If Script をドロップする
さて初歩的な分岐処理は If ユニットを使って行えます。
If ユニットの左下の値入力ポートには正(True)か偽(False)を入力し、もし True が入力されたら右側の True のコントロール出力ポートに繋がっているユニットに制御が移ります。
一方、False が入力されたら False のコントロール出力ポートに繋がっているユニットに制御が移ります。
具体的に言うと、 If ユニットの左下の値入力ポートにはイコール、大なり小なり等の判定用ユニットを接続します。
イコールとか大なり小なりをどうやって検索するのか迷うかもしれませんが、値入力ポートからドラッグしてユニット検索ダイアログを開くと代表的な判定用ユニット一覧が表示されるので、それ程迷わないと思います。
もし判定用ユニット一覧が出てこなかった場合はユニット検索ダイアログの Logic の項目に判定用ユニット一覧があります。
では早速図 1 のサンプルを実行してみて下さい。
まずランダムで 0 から 9 までの整数を生成して表示します。
整数を出力するので Random Range は Max Exclusive 版の方を選択して下さい。
次に生成した数字が 5 以下なら Good、6 以上なら Bad と表示します。
最後に合流して OK と表示します。
次は Switch On ユニットです。
Switch On ユニットは入力された選択肢に従って制御を切り替えるという処理を行います。
なおSwitch On ユニットにはいくつか種類があるりますが、今回の例では Switch On Integer (in Control) ユニットを使います。
では早速以下の手順で Switch On Integer ユニットを作ってみましょう。
Switch On Integer ユニットを作成する
作成した Switch On Integer ユニットをクリックするとグラフインスペクタに Options という項目が表示される
Options の隣の+ポタンを押すと選択肢を追加出来る。今回は+ポタンを3回押す
すると選択肢が 3 つ出来るので上から 0、1、2 を入れる(図2)
図2. Switch ユニットのグラフインスペクタの Options 設定
Switch On Integer ユニットに 0、1、2 に対応したコントロール出力ポートが出来る(図3参照、Default はどれでも無い場合)
では早速図 3 のサンプルを実行してみて下さい。
まずランダムで 0 から 2 までの整数を生成して表示します。
整数を出力するので Random Range は Max Exclusive 版の方を選択して下さい。
次に生成した数字に合わせて Switch ユニットで処理を分岐します(今回は Default は使っていません)。
最後に合流して OK と表示します。
次は Select On ユニットです。
Select On ユニットは厳密には分岐処理では無いのですが、If ユニットや Switch On ユニットの代わりに使えることが多いのでここで説明します。
なお Select On ユニットにはいくつか種類がありますが、今回は Select On Integer と Select On Flow について説明します。
まず、Select On Integer ユニットは数字の選択肢に従って値を返すというユニットです。
とりあえず以下の手順でユニットを作ってみましょう。
Select On Integer ユニットを作る
作成した Select On Integer ユニットをクリックするとグラフインスペクタに Options という項目が表示される
Options の隣の+ポタンを押すと選択肢を追加出来る。今回は+ポタンを3回押す
すると選択肢が 3 つ出来るので上から 0、1、2 を入れる(図4)
図4. Select ユニットのグラフインスペクタの Options 設定
Select On Integer ユニットに 0、1、2 に対応した値出力ポートが出来る(図 5 参照、 Default はどれでも無い場合)
では早速図 5 のサンプルを実行してみて下さい。
図 3 と全く同じことをしています。
まずランダムで 0 から 2 までの整数を生成して表示します。
整数を出力するので Random Range は Max Exclusive 版の方を選択して下さい。
次に生成した数字に合わせて Select ユニットで文字列を選択して表示します。
なお今回は Default は使っていません(ただ Default を指定しないとユニットがオレンジの警告色になるので普通は指定した方が良いです)。
図3 と同じことをしているのにかなりスッキリしました。
Select On Flow ユニットは分岐処理ではなく、逆に処理が合流するときにやって来た経路に従って値を返すというユニットです。
合流する処理の数はユニット内の Branches の隣に入れます。
多分実際に動かした方が分かりやすいと思うので、以下の図6のサンプルを実行してみて下さい。
これも 図 3、図5 と全く同じことをしているスクリプトです。
まずランダムで 0 から 2 までの整数を生成して表示します。
整数を出力するので Random Range は Max Exclusive 版の方を選択して下さい。
次に生成した数字に合わせて Switch ユニットで処理を分岐します。
そして合流時に Select On Flow を使って文字列を選択して表示します(Branches の数を 3 にするのを忘れずに)。
なお今回は Default は使っていません。
今回はあまり良い例ではありませんが、使い方次第ではいろいろ面白いことが出来そうです。
Sequence ユニットは一応分岐処理ではあるのですが、If や Switch On ユニットみたいな条件は必要なくて、単に上から順に処理を行うだけというユニットです。
実行する処理の数はユニット内の Steps の隣の欄に入れます。
こちらも多分実際に動かした方が分かりやすいと思うので、以下の図7のサンプルを実行してみて下さい。
今回は乱数を使わず、Sequence ユニットから矢印を Select On Flow に直接繋いでいます(Steps の数を 3 にするのを忘れずに)。。
すると上の矢印から順に実行されるので、Good、Normal、Bad の順に表示がされます。
このユニットを上手く使うとスッキリとした綺麗なスクリプトが描けそうな感じがしますね。
Once ユニットは最初に一回だけ Once に繋がっている処理を実行し、それ以降は After に繋がった処理を実行するというユニットです。
Reset から処理がやってくるとリセットされて初期状態に戻ります。
こちらも多分実際に動かした方が分かりやすいと思うので、以下の図 8 のサンプルを実行してみて下さい。
Sequence ユニットから Once ユニットのコントロール入力ポートに矢印を繋いでいますが、3番のみ Reset に矢印を繋いでいます(Steps の数を 7 にするのを忘れずに)。
すると Once、After、After と表示がされた後にリセットがかかり再び Once、After、After と表示されます。
なお Reset 時には Once の後にあるユニットに処理が移りません。
わざわざフラグを用意しなくても良いので、何か一度だけ実行したい処理がある時など便利そうです。