前回の作業で動く障害物を作ることができました。次はこの障害物をランダムな間隔で生成するゲームオブジェクトを作りましょう。
今回もVisual Scriptingを使うのでC#スクリプトを書く必要は全くありませんが、グラフが少し複雑になるので一つ一つの処理をしっかり追って理解して頂ければと思います。
障害物生成オブジェクトの作り方
ゲームオブジェクトの作成&変数の設定
では、まずは障害物を生成するゲームオブジェクトの本体を新規作成します。新しく空のゲームオブジェクトを作り、いつも通り「Script Machine」コンポーネントをアタッチして新しいGraphアセットを作ります。
そうしたら、今回はVisual Scriptingを使うにあたって変数が必要になるので予めそれを用意しておきましょう。
Script Machineコンポーネントをアタッチすると一緒にアタッチされる「Variables」コンポーネントで、上の図のように
- isWaiting:Boolean型、初期値はFalse
- Prefab:GameObject型、初期値は前回作った障害物のプレハブ
という2つの変数を作ってください。これで下準備はOKです。
Visual Scriptingで障害物生成処理を作る
次に、いつも通りVisual Scriptingを使って処理を作っていきます。
完成図
今回の処理の完成図は下の図の通りです。
もう皆さんはVisual Scriptingに十分慣れてきたと思いますので、左から順番に処理の流れを解説していきますね。
条件分岐
まず、最初にIfユニットで条件分岐を行っています。これはUpdateイベントに繋がっていて毎フレーム処理が走るので、ものすごい勢いで障害物が生成されるのを防ぐためです。
判定基準は先ほど用意してもらった変数「isWaiting」で、これがFalseのときのみ後続の障害物生成処理を行うようにします。
障害物の生成
次に条件分岐の先ではisWaitingをTrueにしておき、その後Instantiateユニットを使って障害物を生成する処理を行います。
Instantiateユニットは何種類かあるので別のものを間違えて使わないように注意してください。
タイマーで一定時間だけ待つ
最後にTimerユニットを使って一定時間だけ待つ処理を挟みます。Unityで一定時間待つ、というとコルーチンが有名ですが、Visual ScriptingではTimerユニットという便利なユニットがあるようなので今回はそれを使うことにしました。
Timerユニットのポートの繋ぎ方はお手本を参考にしていただきたいのですが、ここでは「カウント開始→終了したら処理続行」という感じにしたいので、Control Portは入力がStart・出力がCompletedというポートを使います。
また、障害物の出現間隔はランダムの方がゲーム的に面白いので、Rangeユニットを使ってランダムな間隔(ここでは1~2秒の間)を取得してTimerユニットのValue Portに繋いでいます。
そしてタイマーが終了したらisWaitingをFalseに戻して、また新しい障害物を生成できるようにします。
テストプレイして動作を確認しよう
これで障害物を生成する処理ができました。テストプレイして結果を確認してみましょう。
再生ボタンを押して次のGIFのようになれば成功です。
次のページ→ゲームオーバー処理の作り方