ビジュアルスクリプティングチュートリアル (Logic Bricks)
ボタンアクティブプラットフォームの作成
Lesson 8 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.
このレッスンでは、ゲーム内のイベントをアクティブにする新しい方法を探ります。
集めるアイテムを使用する代わりに、プレイヤーによってアクティブにする必要のあるボタンに基づいたシステムを作成し、それによってプラットフォームを解放したり別のアクションを実行したりします。
この例は少し高度であり、これまでに学んだいくつかの概念、例えばエンティティ間の通信、プロパティの使用、タグ、視覚的ロジックの整理を練習するのに役立ちます。
最初の部分では、プラットフォームのロジックを作成し、シーンに直接保存されたプロパティを使用する方法を学びます。
これは、ゲーム内の異なるエンティティ間で情報を共有する必要があるときに非常に役立ちます。データを1つのエンティティの中にだけ保存するのではなく、シーンは複数のシステムが同じ情報を読み取ったり修正したりできる中央集権的な場所として機能します。
この例では、ボタンがシーンに保存された値を増加させ、プラットフォームがその値を読み取ってすべてのボタンがアクティブにされたかどうかを知ります。
1. プラットフォームの作成
まず、前のレッスンで学んだように、新しいエンティティテンプレートを作成します。
プラットフォームの視覚的表現に使用されるメッシュを、プロジェクトのスタイルとニーズに応じて設定します。
次に、衝突を追加して設定し、プレイヤーがシーン内でプラットフォームと正しく相互作用できるようにします。
この例では、プラットフォームは特定のタグやプロパティを必要としません。なぜなら、アクティベーションロジックは次のステップで作成するシステムの他の要素によって制御されるからです。

2. プラットフォームのロジックを作成
次に、新しいロジックブリックを作成してプラットフォームエンティティにリンクします。
このロジックブリック内で、プラットフォームの動作とシステムの他の部分との相互作用を制御するロジックを開発します。
このロジックブリックを直接エンティティに追加するか、前のレッスンで行ったように、プラットフォームテンプレートを通じて設定できます。
このプラットフォームは再利用することになると思われるため、テンプレートを通じて設定することが通常は良いオプションです。

まず、2つのプロパティを作成します。
最初のものはプラットフォームのロジックブリックに追加されます。ボタンという名前のIntプロパティである必要があります。
このプロパティは後でマップ内のボタンの総数を保存します。
この値を使って、プラットフォームはボタンがいくつ存在するかを把握し、プレイヤーによって既にアクティブにされたボタンの数と比較できます。

2つ目のプロパティはシーン内に直接作成され、ゲームロジックの異なる部分から簡単にアクセスできるようになります。
これを行うには、3Dビューでシーンの空/背景をクリックしてシーン自体を選択します。
次に、プロパティパネルで、選択したオブジェクトのタイプがシーンであり、現在のシーンの名前が表示されていることを確認します。
このプロパティは、後にグローバル情報を保存および共有するために使用されます。

シーンのプロパティタブをクリックして、新しいプロパティを作成し、ボタンカウントと名付けます。
このプロパティは、ボタンが作成されるときにもっと意味を持つようになります。ボタンはアクティブにされるたびに、その値を変更する責任を持ちます。
それでも、今すぐ作成することができます。なぜなら、これもプラットフォームロジックによってすぐに使用されるからです。
要約すると:
- ボタンはプラットフォームに属し、存在するボタンの数を保存します。
- ボタンカウントはシーンに属し、既にアクティブにされたボタンの数を保存します。

2つのプロパティを作成したので、1つはシーンに、もう1つはプラットフォームのロジックブリックに、プラットフォームロジックを開発し始めましょう。
グラフに戻ります。
最初に必要な情報は、マップ内に存在するボタンの総数です。
この値はゲームが開始するときに1回だけ計算されればよいので、このロジックは開始時に実行されます。
まず、シーンを取得し、ボタンというタグを持つすべてのエンティティを検索するノードを使用します。
まだボタンは作成していませんが、後でこのタグを追加する予定なので、このロジックをすでに準備しておきます。
次に、そのリストに見つかったエンティティの数を取得するためにサイズノードを使用します。
この値は、シーン内に存在するボタンの総数を表します。
最後に、この結果をプラットフォームのボタンプロパティにボタンを設定するを使って保存します。

次に、すべてのボタンが押された後にプラットフォームのアクションをアクティブにするロジックを作成しましょう。
この例では、シーンからプラットフォームを削除しますが、このロジックを適応させて、プラットフォームを移動させたり、アニメーションを再生したり、通路を開いたり、別のオブジェクトを有効にしたり、カットシーンをトリガーすることもできます。
このチェックには更新時にを使用し、ゲームが実行されている間、条件が継続的に確認されるようにします。
まず、シーンを取得し、そのプロパティにアクセスします。
先にシーンにボタンカウントプロパティを作成したので、プロパティを取得するノードを通じてアクセスできます。このノードはシーンのすべてのプロパティを含む辞書を返します。
次に、この辞書をプロパティを取得するノードに接続し、ボタンカウントという名前を指定して、シーンに作成したプロパティを正確に取得します。
デフォルトでは、プロパティを取得するの出力はAny型です。
この値をプラットフォームのボタンプロパティ(マップ内の存在するボタンの総数を保存します)と比較する必要があるため、プロパティを取得するの出力型をIntに変更します。
その後、この値とマップ内に存在するボタンの総数を保存しているプラットフォームのボタンプロパティを比較します。
2つの値が等しい場合、それはすべてのボタンがプレイヤーによってアクティブにされたことを意味します。
この瞬間、希望するアクションを実行できます。
この例では、プラットフォームエンティティをシーンから削除します。

完璧です。プラットフォームのロジックはこれで準備が整いました。
プラットフォームは、ゲームが開始するときにマップ内にいくつのボタンが存在するかを自動的に識別することができます。
これにより、シーンからボタンを追加または削除する自由が得られます。手動で値を変更する必要はなく、ロジックはゲームが開始されるたびに量を再計算します。
これにより、プラットフォームは、プラットフォームがボタンカウントシーンプロパティに保存された値と比較して、すべてのボタンがアクティブにされたかを動的に判断できます。
また、次のステップの準備のための構造全体も準備できました。ボタンにボタンタグの使用も含まれています。このタグは後でボタンに追加されます。
これは、要素間の通信がすでに計画されていることを意味します:
- プラットフォームは、いくつのボタンが存在するかをカウントします。
- 各ボタンは、アクティブにされたときにシーンプロパティを更新します。
- プラットフォームはシーンプロパティを確認します。
- カウントが合致すると、プラットフォームはアクションを実行します。
次のステップ、ボタンを作成し、それらをプラットフォームに接続するロジックを開発して、これら2つのシステム間の相互作用を完成させる準備が整いました。