Unity Visual Scripting 入門第8回:RaycastとListを使って的あてゲームを作る(後編)

この記事はVisual Scripting 入門の第8回です。前回の記事は下記のリンクから確認できます。

本記事は前後編でRaycastとListを使って的あてゲームを作る方法を解説します。

今回(後編)の記事で学べる事

 

  • Raycast
  • Destroy
  • Listの要素の削除
  • Tagの使い方

Raycastを使ってオブジェクトの情報を取得する

Rayとは設定した方向に向けて放つ光線のことで、その光線にあたったオブジェクトの情報を得ることができます。

Variableに、GameObject型の変数[Camera]を追加します

ValueにシーンにあるMainCameraを代入します。

[Camera]をGraph Editorに追加します。

[Camera]をGraph Editorに追加

[Camera]をGraph Editorに追加

Graph Editorに以下を追加します。

 

  • On Update 
  • Get Key Down 
  • If 
  • Get Mouse Position 
  • Screen Point To Ray 
  • RayCast 

※ノードの画像はわかりにくいもののみ載せています。

Screen Point To Ray 

Screen Point To Ray


RayCast 

RayCast

Get Key Down のKeyにMouse 0(左クリック)を入力します。

スクロールしないと表示されないのでGIFをご覧ください。

Get Key Down のKeyにMouse 0を入力

Get Key Down のKeyにMouse 0を入力

以下のようにノードを接続します。

Screen Point To Rayはカメラのコンポーネントとマウスの位置を左のポートに接続するとカメラからRayの情報を作成し、Rayの情報をRaycast

接続することでRayを飛ばすことができます。

ノードを接続

ノードを接続

実際にRayが飛ばせているのか確認します。

Graph Editorに以下のノードを追加します。

 

  • Debug Log(Message)
  • Get Collider
  • Get Game Object

Get Collider

Get Collider


Get Game Object

Get Game Object

以下のようにノードを接続します。

Rayに当たったオブジェクトのColliderを取得し、そこからオブジェクトの情報を取得して、的の名前をConsoleに表示します。

ノードを接続

ノードを接続

シーンを実行します。クリックした的の名前を表示させることができました。

シーンを実行

シーンを実行

取得したオブジェクトを削除する

ゲームの要素として、まず床を作ります。

Hierarchyの+ボタンをクリックし、3DObject→PlaneをクリックしてPlaneを作ります。

PlaneのTransformを以下のように設定します。

PlaneのTransformを設定

PlaneのTransformを設定

床か的かを判定するために新しいTagを登録します。

Tagとはオブジェクトに種類を付けられる機能で、オブジェクトのTagを判別して処理を変えることができます。

Projectの[Target]プレハブのTagをクリックしAdd Tagをクリックします。

Add Tagをクリック

Add Tagをクリック

+ボタンをクリックしNew Tag Nameに[Target]と入力して、Saveをクリックします。

これで、新しいTagを登録することができました。

これでプレハブ[Target]は、[Target]というTagが付与されたので、Tagに対して処理できるようになります。

新しいTagを登録

新しいTagを登録

Graph Editorに以下のノードを追加します。

 

  • If×2
  • String Literal
  • Get Tag
  • Equal
  • Destroy
  • Aot List Remove

※ノードの画像はわかりにくいもののみ載せています。

Variableから[TargetList]を追加します。

Get Tag

Get Tag


Destroy

Destroy


Aot List Remove

Aot List Remove

以下のようにノードを接続します。Stringには「Target」を入力します。

ノードの説明をします。

  1. Raycastの右の真ん中のポートはRayがオブジェクトに当たっているか判定するものです。当たっていればTrue、当たっていなければFalseとなります。今回の場合Rayが当たった場合次の処理に進みます。
  2. GameObjectのTagを取得し、それが[Target]であった場合にTrueになり、次の処理に進みます。
  3. Removeの左の真ん中のポートに消すオブジェクトが含まれているリストを接続します。

一番下のポートにはリストから消すオブジェクトを接続します。

リストから削除しないとエラーがでてしまうのでオブジェクトを削除する前にリストから削除します。

そして、最後にDestroyの左の下のポートに消すオブジェクトを接続し、削除します。

ノードを接続

ノードを接続

実行します。

シーンを実行

シーンを実行

これで完成です。Unity Visual Scripting 入門第3回と第4回をみてスコア機能を付けて見たものが以下になります。

余裕があればぜひ作ってみてください。

スコア機能あり

スコア機能あり

完成サンプルは以下にあるのでわからなくなってしまったら確認してください。

https://github.com/Manufuki/HitTargetSample.git

次回の第9回ではVisual Scriptingで音源とアニメーションの再生について紹介します。