この記事はVisual Scripting 入門の第7回です。前回の記事は下記のリンクから確認できます。
本記事は前後編でRaycastとListを使って的あてゲームを作る方法を解説します。
今回(前編)の記事で学べる事
- Listへの要素の追加
- Random
- For文
- Instantiate
完成イメージ
Random関数でランダムな座標を作成する
Random関数とは指定した数の範囲内でランダムに数を出力してくれるものです。
Hierarchyの+ボタンをクリックし、空のGameObjectを作ります。
名前を[AimLabManager]とします。
[AimLabManager]にScriptMachineをアタッチし、新しいグラフをMacrosというフォルダに作成し、そこに保存します。
グラフの名前は[AimLabGraph]とします。
数秒ごとに的を生成したいので、タイマーを設定します。
時間を計測する変数を追加します。[AimLabManager]のVariableにFloat型の変数[Time]を追加し、Graph Editorに[Time]を追加します。
Graph Editorに以下のノードを追加してください。
- Get Delta Time
- Add
- If
- Greater
- Set Object Variable ×2
- Float Literal
※ノードの画像はわかりにくいもののみ載せています。
ノードを以下のように接続します。
今回は0.5秒ごとに的を生成するので、Greaterに0.5を入力します。
0.5秒を超えたら[Time]を0に戻します。そのためSet Object Variableを2つ用意します。
次にランダムな座標を作ります。Graph EditorにRandom Range, Vector3 Create(X,Y,Z)を追加します。
Random RangeはResult(Float Output)のものを選んでください。
Int型のものを選ぶと整数でランダムな数が選択されてしまいます。
今回はランダム性に幅をつけたいのでFloat型の変数を選びます。
また、今回はX軸とY軸にランダム性を持たせるのでRandom Rangeを2つ作ります。
ノードを以下のように接続します。
Random Rangeは上の変数が最小値、下の変数が最大値としてその間でランダムに数を出力します。
今回はX軸は-4〜4、Y軸は0〜3にします。
Instantiateでオブジェクトをで成してListに追加する
Instantiateを使ってオブジェクトを生成することができるので、これを使って的を作ります。
まず、的のPrefabを作ります。Hierarchyの+ボタンをクリックし、3DObject→SphereをクリックしてSphereを作ります。
名前[Target]とします。
TargetをProject内のAssetフォルダにドラッグ&ドロップしてPrefab化します。
Prefab化したらHierarchyのTargetを削除します。
Prefab化したTargetをGraph Editorにドラッグ&ドロップすると以下のようなウィンドウがでるのでエンターを押して追加します。
Graph EditorにInstantiate、Get Identityを追加します。
ノードを以下のように接続します。Instantiate のそれぞれのポートについて説明します。
Originalポート | 生成するオブジェクトのPrefabを接続します。 |
Positionポート(Vector3型の変数) | 生成するオブジェクトの座標を接続します。 |
Rotationポート(Quaternion型の変数) | 生成するオブジェクトの回転を接続します。 |
Get IdentityにはQuaternion型の(0,0,0,1)の値が入っています。
実行します。ランダムな座標に[Target]を生成することができました。
For文を使ってListのオブジェクトに番号をつける
VariableにAot List型のListを追加します。名前は[TargetList]とし、Graph Editorに追加します。
Graph Editorに以下のノードを追加してください。
- Add Item
- Count Item
- For Loop
- Get List Item
- Integer To String
- Set Name
※ノードの画像はわかりにくいもののみ載せています。
以下のようにノードを接続します。
Instantiateの右の下のポートから生成したオブジェクトが出力されているので、それをAdd Itemを使ってリストに追加します。
Add Itemは左の真ん中のポートが追加先のリストを接続し、下のポートにはリストに追加するオブジェクトを接続します。
その後、リストに入っているTargetに名前を付けなおします。
For Loopとはある数を入力してその回数分Bodyに接続されている処理を繰り返すというものです。
Firstのポートには初期値が入力されています。
Stepの数が毎処理ごとにFirstの数に足されていき、Lastの値と同じになった時にFor Loopの処理を終え、Exitから処理が出ます。
Body後の処理を説明します。
Indexは今何回目のループかをInt型で出力しています。
To String を使ってIndexをString型に変換しています。
リストの番号は格納された順番で0から番号が振られます。
Get ItemはIndexに接続された番号のリストに格納されている情報を得ることができます。
最後にSet Nameを使い名前を付けなおします。
上から2番目のポートには名前を帰るオブジェクトを接続し、その下のポートには変更する名前を接続します。
実行します。生成したオブジェクトに0から順に番号を入れることができます。
的が生成される数を制限する
Variableの[Target List]をGraph Editorに追加します。
Graph Editorに以下のノードを追加してください。
- Count Items
- Greater
- If
※ノードの画像はわかりにくいもののみ載せています。
On Updateの後に以下のノードを付け足します。
今回は4つまで生成ます。
Greaterの変数に3を入力します(カウントは0から始まるので、0から3で4つという数え方です)。
[Target List]の要素が4を超えたら Greater がTrueになるので、Ifの後の処理が動かなくなります。
シーンを実行します。的を生成する数を4つまで制限することができました。
今回のVisual Scripting のノードの全体図です。
後編の記事では的をクリックすると消える仕組みを紹介します。