前回までの作業がまだ済んでいない場合は、3D玉転がしゲームの作成方法から前回までのチュートリアルを先に済ませてください。
ここまででゲームクリアを作成できたため、次は障害要素を追加します。
DangerWall(赤い壁)に触れた場合は初めからやり直しにしましょう。
作成する内容は以下の通りです。
- OnTriggerEnterで
Player
と接触した場合にシーンをロードしなおす - 挙動の作成にはLogic Assetをし、同じ挙動を使いまわす。
- 挙動の再生にはLogic Playerを使用する。
Logic Assetの作成
- ProjectウィンドウでLogicフォルダを選択
- +ボタンをクリック
- メニューからLogic Toolkit/Logic Assetを選択
- 名前を
DangerWall Logic
に変更 - Logic AssetのEditボタンをクリックし、Logic Editorウィンドウを開く
DangerWall Logicの編集
Logic EditorウィンドウでDangerWall Logicを編集していきます。
Playerとの接触判定の作り方はItem Logicと同じです。
そのままコピー&ペーストしてきても良いですが、作成済みのメンバーアクセススクリプトを使う方法の確認のため、改めて一つ一つノードを作成してみましょう。
PubOnTriggerEnter.Callbackノードの作成
- グラフ上をクリックしフォーカスする
Space
キーを押し、ノード作成メニューを開く- Scriptsタブを選択
- 検索欄に
OnTriggerEnter Callback
と入力 - 一覧からPubOnTriggerEnter.Callback (Event)を選択
- ノード名はそのまま
Enter
キーで確定
Item LogicではMembersタブから選択していましたが、今回はScriptsタブで選択しています。
Membersタブではアクセス可能なすべてのメンバーから選択できるのに対して、Scriptsタブではすでに作成済みのノード用スクリプトから選択することができます。
もちろんMembersタブで同じメンバーアクセスを選択しても、作成済みのスクリプトを使用しますので、どちらで選択しても構いません。
お好みで使い分けてください。
PubOnTriggerEnter.Callbackノードの編集
- TargetフィールドのRequireをチェック
Component.CompareTagノードの作成
- PubOnCollisionEnter.CallbackノードのArg 0フィールドの出力ポートを右側付近(接続先ノードを作成したい位置)までドラッグ&ドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 検索欄に
CompareTag
と入力 - 一覧からComponent.CompareTag(string tag) (Compute)を選択
- ノード名はそのまま
Enter
キーで確定
Component.CompareTagノードの編集
- Tagフィールドの文字列を
Player
に設定
Branchノードの作成
- Component.CompareTagノードのResultフィールドの出力ポート右側付近(接続先ノードを作成したい位置)までドラッグ&ドロップし、ノード作成メニューを開く
- Scriptsタブを選択
- 一覧からFlow Controls/Branchを選択
Branchノードへの接続
- PubOnTriggerEnter.Callbackノードの実行ポートをBranchノードの入力ポートにドラッグ&ドロップして接続
SceneManager.LoadSceneノードの作成
Item Logicとは異なり、接触したらシーンをロードしなおす処理を作成します。
- BranchノードのTrueポートを右側付近(接続先ノードを作成したい位置)までドラッグ&ドロップし、ノード作成メニューを開く
- Membersタブを選択
- 検索欄に
LoadScene Name
と入力 - 一覧から
UnityEngine.SceneManagement.SceneManager
のLoadScene(string sceneName)を選択 - ノードの種類選択メニューでActionを選択。
- ノード名はそのまま
Enter
キーで確定
SceneManager.LoadSceneノードの編集
- Scene Nameフィールドの文字列を
RollABall
に設定
できれば現在シーンの名前を取得してきて設定したいところですが説明が長くなるため今回は省略します。SceneManager.GetActiveScene()
とScene.name
のメンバーアクセスで現在のアクティブなシーン名を取得できますので、気になる方は試してみてください。
Startノードの削除
最初から用意されているStartノードは今回使用しないため、削除してしまいましょう。
- Startノードを選択
Delete
キーを押して選択ノードを削除。
DangerWallプレハブの編集
DangerWallをプレハブモードで開く
DangerWallオブジェクトはプレハブで作成されています。
プレハブの編集を安定して行うにはプレハブモードで開く必要があります。
- ProjectウィンドウのAssets/RollABall/Prefabs/DangerWallをダブルクリック
または、選択してInspectorウィンドウのOpenボタンをクリック。
Logic Playerを追加
- HierarchyウィンドウのDangerWallオブジェクトを選択
- InspectorウィンドウのAdd Componentボタンをクリック
- コンポーネントメニューからLogic Toolkit/Logic Playerを選択
Logic Playerコンポーネントの編集
- AssetフィールドにDangerWall Logicを設定
プレハブモードの終了と保存
- Hierarchyのプレハブのヘッダ部の<ボタンをクリック
- 保存するかのダイアログが表示されるのでSaveボタンをクリック
DangerWallの動作確認
プレイ開始してDangerWallの挙動を確認します。
- Playerを操作してDangerWall(赤い壁)に触れた際に最初からやり直しになることを確認
- 念のためすべてのItemを拾い、
YOU WIN!
と表示されることを確認
まとめ
以上でLogic Toolkitチュートリアル「3D玉転がしゲームの作成方法」は完了です。
学習内容
学習した内容を振り返ってみましょう。
- オブジェクトの挙動制御にLogic Behaviorコンポーネントを使用する
- 共通の挙動を使いまわすにはLogic AssetとLogic Playerコンポーネントを使用する
- メンバーアクセスのスクリプト生成機能によりコーディング作業を挟まずに挙動が組める
- Eventノード、Actionノード、Computeノード、Branchノードの使用
- Blackboardの変数
同梱サンプル「Roll A Ball」との違い
細部に違いがあるためここに挙げておきます。
興味があれば見比べてみてください。
- 見返しやすいようにグループノードでまとめ
- Playerの移動にかかる力をBlackboardの変数で設定
- プロジェクトのRender Pipelineに関係なくBuilt-in Render Pipelineで再生されるように設定
- メンバーアクセススクリプトのアセンブリ名が
RollABall_GeneratedScripts
完了を投稿
チュートリアル完了をSNSに投稿する場合はこちら。