ビジュアルスクリプティングチュートリアル (Logic Bricks)
収集可能アイテムのロジックの作成
Lesson 6 of 10 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
このレッスンでは、Cave Engine の Logic Bricks を使用してアイテムを収集するためのロジックを作成します。
プレイヤーが収集可能なアイテムと衝突したときにそれを検出し、タグを使用してアイテムを識別し、シーンから削除し、収集されたアイテムの数を示すシンプルな UI カウンターを更新する方法を学びます。
これは非常に一般的なゲームプレイシステム: アイテムの相互作用の始まりです。同じアイデアを後に拡張して、コイン、キー、弾薬の取得、健康の取得、クエストオブジェクト、パワーアップ、またはプレイヤーが収集できる他のオブジェクトを作成できます。
1. アイテムを収集するロジックの作成
私たちの Player のロジック内で、収集可能なアイテムとの衝突をプレイヤー自体から直接検出します。
移動ロジックの後に、アイテムとの接触を検出し、それをシーンから削除するシステムを作成します。
まず、Entity を取得して、その Character Component に Get Character を使用してアクセスします。
Character Component から、Get Collision With ノードを使用します。このノードは、特定の Tag に基づいて衝突を検出することを可能にします。
この場合、前のレッスンで収集可能なアイテムに割り当てたタグ item を使用します。
これが、アイテムにタグを追加することが重要だった理由です。特定の Entity 名をチェックする代わりに、プレイヤーに item としてタグ付けされたものと衝突したかどうかを単純に尋ねることができます。これにより、同じタグを持つ収集可能なオブジェクトは同じシステムによって検出できるため、ロジックがより柔軟になります。
この検出の結果は、衝突情報としても知られる Collision Info を返す Get ノードに接続する必要があります。
次に、最初に検出された衝突を表すインデックス 0 を取得します。
最後に、この結果をシーンから Entity を削除する責任を持つ Kill ノードに接続します。
削除される Entity は Collision Info から直接取得されます。つまり、収集されたアイテム自体が Kill への入力として渡され、プレイヤーに触れられたときにシーンから消えます。

このロジックにより、プレイヤーは既に収集可能なアイテムを検出し、それをシーンから削除できます。
実際には、プレイヤーが item というタグが付けられた Entity に触れると、その Entity は収集され、現在のシーンから削除されます。
2. 収集可能な UI の作成
今、私たちはプレイヤーにアイテムが実際に収集されたことを示す必要があります。
そのために、次の情報を表示するシンプルな UI インターフェースを作成します:
- アイテムアイコン
- 収集されたアイテムの数
- マップ内の利用可能なアイテムの総数
まず、Player Template にアクセスし、Interface コンポーネント、具体的には UI Element を追加します。この UI Element は、私たちの HUD の視覚部分を構築する責任を負います。
この要素から、収集可能なアイテムアイコンを作成して構成します。このアイコンは、プレイヤーの画面に収集情報を表示するための視覚的基盤として機能します。

UI Element の Basic タブでは、アイコンの位置とスケールを構成できます。
位置プロパティのアンカーアイコンをクリックすることで、画面の左下隅に固定できます。
スケール構成では、基準点を中央に固定し、位置とスケールのロックを有効にします。これにより、値が相対的になり、異なる画面解像度に正しく適応できるレイアウトが助けられます。
最後に、Layer 値を 2 に設定します。これにより、アイコンが優先順位の低い他の UI Elements の上に描画されることが保証されます。

アイコンが希望のサイズになるまで Scale 値を調整します。
その後、Position 値を使用して、左側またはインターフェース内の任意の他のエリアに配置します。
これらの設定により、HUD 内の要素のサイズと位置を正確に制御できます。
Behaviour タブでは、デフォルトで付随する Default Style を削除し、アイコンにカスタム Texture を追加できます。
視覚的結果を達成するために Tint 色と Alpha 透明度を調整することもできます。
9-Slice Scaling オプションは、レイアウトで画像が引き伸ばされたときの歪みを避けるために使用されます。有効にすると、アイコンのニーズに応じてその値を調整できます。画像が再サイズされても一貫性を保つことができます。私たちのケースでは、アイコンは画像なので、9-Slice は使用しません。

次に、Text タイプのインターフェースエンティティを 3 つ新たに作成します。
それらは、収集したアイテムの数とマップ内で利用できるアイテムの合計数を表示する役割を果たします。
まず、最初の Text の名前を TextCollect に変更します。このテキストは、プレイヤーが収集したアイテムの数を表示します。
次に、2 番目の Text は “/” 文字のみを含み、UI 内の値の間の視覚的セパレーターとして機能します。
最後に、3 番目の Text の名前を TextMax に変更します。これは、マップ内で利用可能なアイテムの最大数を表します。

次に、作成された UI Elements の Text タブにアクセスします。
このセクションでは、画面に表示するコンテンツを定義するフィールドがあります。
アイテム値を表す 2 つのテキスト TextMax と TextCollect には、初期値を 0 のままにします。
セパレーターとして使用されたテキストには、視覚的に収集された数を合計アイテムから分離するために “/” 文字のみを含めます。

次に、アイコンの隣に UI テキストを整理されて配置しましょう。
- 最初に TextCollect を配置します。
- 次に、その後に “/” のテキストを配置します。
- 最後に、スラッシュの後に TextMax を配置します。
このようにして、UI は進行状況カウンターとして整然と整理され、以下のように明確に表示されます:
収集アイテム / 合計アイテム
例:
0 / 10

注: 代わりに、単一の Entity を作成し、プログラム的に (Logic Bricks を介して) 文字列を連結して同じ結果を得ることもできます。
3. アイテムカウンターロジックの作成
今、UI に収集されたアイテムを反映させる必要があります。
現時点では、アイテムはシーンから削除できますが、UI はプレイヤーが何かを収集したことをまだ認識していません。したがって、カウンターロジックを実装します。
まず、Player Logic Brick に戻り、Collected Item という新しいプロパティを Int タイプとして作成します。
このプロパティは、プレイヤーがゲーム中に収集したアイテムの数を保存します。

このプロパティの初期値は 0 であるべきです。
プレイヤーロジックでは、収集したアイテムを削除する Kill ノードのすぐ後に、アイテムカウントを更新するロジックを作成します。
まず、Collected Item プロパティを取得します。
次に、その現在の値に +1 を追加します。
最後に、結果を Collected Item プロパティに再設定します。
こうすることで、プレイヤーがアイテムを収集するたびに、Collected Item の値は 1 増加し、カウンターが更新されます。

しかし、この値はまだプロパティにしか保存されていません。今、UI テキストに表示する必要があります。
その後、Set Collected Item から Set Text ノードへのフローを接続し、UI 内の表示テキストを更新する責任を持たせます。
Set Text を使用するには、次の 2 つの情報を提供する必要があります:
- テキストを更新する UI Element Component
- 新しいテキスト値
テキストはプレイヤーの子供として作成されているので、Entity 階層を介して直接アクセスできます。
これを行うには、Entity を使用し、次に Get Child を使用し、テキストオブジェクトの名前を指定します。Recursive オプションを有効にして、プレイヤーの子供の子供の中でも検索を確実に行うようにします。
その後、見つかったエンティティから UI Element Component を取得します。
テキスト値については、Collected Item プロパティを取得し、String に変換し、それを Set Text に接続します。
このようにして、UI テキストはプレイヤープロパティに保存されているのと同じ値で自動的に更新されます。

次に、マップ内のアイテムの総数を表すテキストを機能させます。
プレイヤーロジックブロック内で、Max Item という新しいプロパティを Int タイプとして作成します。
このプロパティは、マップ内で利用可能な収集可能なアイテムの合計数を保存します。

このプロパティにマップ内のアイテムの総数を保存するために、プレイヤーの On Start イベントを使用します。
この値はゲームの開始時に一度だけ計算される必要があります。これは、ゲームが開始されるときにシーン内に存在する収集可能なアイテムの数を表します。
まず、ゲームの Scene を取得します。
次に、item タグでフィルタリングされたシーン内のすべての Entities を返すノードを使用します。このタグは収集可能なアイテムにのみ存在するため、これにより現在のマップ内のすべての収集可能なアイテムのリストが返されます。
この Entity のリストを使用して、Size ノードを使用します。
Size ノードは、リスト内の要素の合計数を整数として返します。この値は、マップに存在するアイテムの数を正確に表します。
最後に、この結果を Max Item プロパティに設定し、収集可能なアイテムの正確な総数をプロパティに保存してゲームが始まるようにします。

今、この値を UI テキストに送信する必要があります。
これを行うには、収集済みアイテムで使用したのと同じロジックを使用します。
最大アイテムプロパティを取得し、その値を文字列に変換して、テキスト設定ノードに接続します。
次に、子要素を取得を用いてプレイヤーヒエラルキーを使用し、正しい名前を入力し、必要に応じて再帰的を有効にして、最大アイテムテキストに対応するUI要素にアクセスします。
最後に、そのUI要素コンポーネントをテキスト設定に接続します。
このようにして、アイテムの総数がプレイヤーインターフェースに正しく表示されます。

この時点で、収集可能アイテムシステムは機能しています。
プレイヤーはitemタグを使用して収集可能なアイテムを検出し、シーンから削除し、収集したアイテムカウンターを増やし、UIを更新して、収集した数とマップ上のアイテムの総数を表示できます。