5. DangerWallの挙動作成

前回までの作業がまだ済んでいない場合は、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.SceneManagerLoadScene(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に投稿する場合はこちら。