
みなみ
他の仕掛けとのインタラクションをカスタムコード化する方法について教えてください!

りゅう
こんなお悩みを解決します。
本記事の内容
本記事の信頼性
この記事を書いている僕は、クリエイター兼ブロガーです。実際にUEFNを使っており、現在進行形で学んでいます。
今回は、他の仕掛けとのインタラクションをカスタムコード化する方法について解説します。
なお、今回使用するオブジェクトの配置等は以下の記事をご参照ください
>> 公式ドキュメントを見る

あすか
仕掛けのリファレンスを作成する
なお、以下のコードの解説文はプログラミング初心者の主がなんとか調べて記述したものです。

あすか
誤りがありましたら恐縮ですm(_ _)m
▼ このコードは、アイテムスポーナーとボタンの仕掛けを作成し、それぞれの仕掛けを初期化するためのコードです。
@editable
Button:button_device = button_device{}
@editable
ItemSpawner:item_spawner_device = item_spawner_device{}
クリックすると開きます。
まず、Button:button_device = button_device{}
という行では、ボタンの仕掛けを作成しています。Button:button_device
は、ボタンの仕掛けを示す変数名です。button_device{}
は、button_device
というクラスのインスタンスを作成するためのコードです。
同様に、ItemSpawner:item_spawner_device = item_spawner_device{}
という行では、アイテムスポーナーの仕掛けを作成しています。ItemSpawner:item_spawner_device
は、アイテムスポーナーの仕掛けを示す変数名です。item_spawner_device{}
は、item_spawner_device
というクラスのインスタンスを作成するためのコードです。
これらの行では、それぞれの仕掛けのクラスのインスタンスを作成し、変数に代入しています。この変数を使用することで、後のコードで仕掛けのプロパティや振る舞いを制御することができます。
「初心者向けにわかりやすく」という要望に基づいて、より簡単な表現で説明すると、上記のコードは次のようになります。
# ボタンの仕掛けを作成し、ボタンの変数に代入する:
Buttonの変数 = ボタンのクラスの新しいインスタンスを作成する
# アイテムスポーナーの仕掛けを作成し、アイテムスポナーの変数に代入する:
ItemSpawnerの変数 = アイテムスポーナーのクラスの新しいインスタンスを作成する
これにより、ボタンとアイテムスポーナーの仕掛けを初期化し、それぞれの変数に代入することができます。この変数を使用して、後のコードでボタンやアイテムスポーナーに関する操作や設定を行うことができます。
仕掛けイベントに反応する
▼ button_device
クラスが公開する InteractedWithEvent
にサブスクライブする必要があります。
ゲームを開始したときに実行します。
OnBegin<override>()<suspends>:void=
Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
クリックすると開きます。
このコードは、ボタンの仕掛けに反応するために、button_device
クラスが公開するInteractedWithEvent
にサブスクライブ(登録)する方法を示しています。また、ゲームを開始したときに実行される処理も含まれています。
まず、OnBegin<override>()<suspends>:void=
という行は、ゲームの開始時に実行される処理を示しています。OnBegin
はゲームの開始時に呼び出されるイベントです。<override>
はこのメソッドがベースクラスのメソッドをオーバーライドしていることを示し、<suspends>
はこのメソッドが一時停止(サスペンド)可能であることを示します。void
はこのメソッドが値を返さないことを示します。
次の行では、Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
というコードがあります。これは、button_device
クラスのInteractedWithEvent
というイベントにOnButtonInteractedWith
というメソッドをサブスクライブするためのコードです。
InteractedWithEvent
は、ボタンがプレイヤーとのインタラクション(操作)に応答するイベントです。プレイヤーがボタンとインタラクトするタイミングでこのイベントが発生します。
Subscribe
メソッドは、イベントに対してコールバック関数(イベント発生時に実行される関数)を登録するためのメソッドです。OnButtonInteractedWith
は、このイベントが発生したときに呼び出されるコールバック関数です。したがって、OnButtonInteractedWith
メソッド内には、ボタンがインタラクトされたときの処理を記述することができます。
以上が、このコードの概要となります。
ゲームを開始すると、以下の処理が実行される:
ボタンの仕掛けの「インタラクションが行われた」というイベントに対して、OnButtonInteractedWithというメソッドを登録する
OnButtonInteractedWithというメソッドは、ボタンがプレイヤーとのインタラクション(操作)に応答したときに実行される
このようにすることで、プレイヤーがボタンを操作したときに、OnButtonInteractedWith
メソッドが呼び出されるようになります。OnButtonInteractedWith
メソッド内には、ボタンがインタラクトされたときに実行したい処理を記述することができます。
例えば、ボタンが押されたときにメッセージを表示する場合、以下のようなコードをOnButtonInteractedWith
メソッドに追加します。
OnButtonInteractedWith()
{
// ボタンがインタラクトされたときの処理
ShowMessage("ボタンが押されました!");
}
ShowMessage(string message)
{
// メッセージを表示する処理
Console.WriteLine(message);
}
上記のコードでは、ShowMessage
メソッドを定義しています。ShowMessage
メソッドは引数としてメッセージを受け取り、それをコンソールに表示する処理を行います。OnButtonInteractedWith
メソッドでは、ボタンが押されたときにShowMessage
メソッドを呼び出して、「ボタンが押されました!」というメッセージを表示するような処理が行われます。
このようにすることで、ボタンがインタラクトされたときに特定の処理を実行することができます。ただし、実際のゲーム開発では、具体的な処理内容やコンテキストに合わせて、OnButtonInteractedWith
メソッド内に適切な処理を記述する必要があります。
なお、上記のコードはC#言語を想定していますが、実際の開発環境や使用するプログラミング言語によって文法やメソッドの呼び出し方が異なる場合があります。詳細な実装方法については、使用しているゲームエンジンや言語のドキュメントやリファレンスを参照することをおすすめします。
▼ このコードは、ボタンがインタラクトされたときに呼び出されるOnButtonInteractedWith
メソッド内に、ItemSpawner.SpawnItem()
というコードが追加されています。
OnButtonInteractedWith(InPlayer:agent):void=
ItemSpawner.SpawnItem()
クリックすると開きます。
OnButtonInteractedWith(InPlayer:agent):void=
という行は、OnButtonInteractedWith
メソッドの宣言を示しています。メソッド名の後ろに(InPlayer:agent)
があるのは、引数としてInPlayer
という変数(エージェント)を受け取ることを意味しています。また、末尾のvoid
は、このメソッドが値を返さないことを示しています。
ItemSpawner.SpawnItem()
というコードは、ItemSpawner
というオブジェクト(アイテムスポナーの仕掛け)のSpawnItem()
というメソッドを呼び出しています。
これにより、ボタンがインタラクトされたときにOnButtonInteractedWith
メソッドが呼び出され、ItemSpawner.SpawnItem()
が実行されます。
ItemSpawner.SpawnItem()
は、アイテムスポナーの仕掛けが持つメソッドであり、アイテムの生成や出現などを担当します。具体的な処理内容は、SpawnItem
メソッドの実装によって異なりますが、例えば新しいアイテムを生成してゲーム内に配置したり、既存のアイテムを復活させたりすることが考えられます。
以下は、よりわかりやすくした説明です。
ボタンがインタラクトされたときに実行されるOnButtonInteractedWithメソッドの中で、以下の処理が行われる:
アイテムスポナーの仕掛けが持つSpawnItemメソッドを呼び出す
SpawnItemメソッドは、アイテムスポナーの仕掛けがアイテムの生成や出現を担当するメソッドである
このようにすることで、ボタンがインタラクトされたときにアイテムスポナーがアイテムを生成するなどの特定の処理を実行することができます。ただし、実際のゲーム開発では、具体的な処理内容やアイテムスポナーの仕組みに合わせて、SpawnItem
メソッドの実装やパラメータの受け渡し方などを調整する必要があります。
agent型が採用されている理由
クリックすると開きます。
agent
型が使用されているのは、ボタンがインタラクトされたときに関連するエージェント(プレイヤー)の情報を受け取るためです。エージェントは、プレイヤーやキャラクターなどのゲーム内の動作主体を表すための概念です。
具体的には、OnButtonInteractedWith
メソッドの引数であるInPlayer
は、ボタンのインタラクトを行ったプレイヤーやキャラクターを指す変数として使用されます。このagent
型の引数を使用することで、ボタンのインタラクトに関連するプレイヤーの情報を受け取ることができます。
なぜagent
型が使用されるのかというと、ゲーム開発では、プレイヤー以外にもNPC(Non-Player Character)やAI(Artificial Intelligence)など、複数の動作主体が存在する場合があります。agent
型は、これらの動作主体を包括的に扱うための抽象化された型です。具体的な実装や動作の詳細を気にせず、異なる動作主体に対して同一のメソッドやイベントを適用することができます。
したがって、OnButtonInteractedWith
メソッドの引数にagent
型が採用されることで、ボタンのインタラクトに関連するどの動作主体(プレイヤー、NPC、AIなど)からの操作であっても、同じメソッドを利用することができます。
要約すると、agent
型はゲーム開発において、異なる動作主体を一括して扱うための抽象化された型であり、OnButtonInteractedWith
メソッドにおいてボタンのインタラクトを行ったプレイヤー情報を受け取るために使用されています。
SpawnItemについて
クリックすると開きます。
SpawnItem
関数は、アイテムをスポーン(生成)するための関数です。この関数は、指定された条件や設定に基づいて現在のアイテムをスポーンさせる役割を担います。
以下に、SpawnItem
関数の技術的な詳細を解説します。
- パラメータ:
SpawnItem
関数はパラメータを取らないため、引数を必要としません。 - 属性:
SpawnItem
関数にはpublic
という属性が付けられています。これは、他のモジュールやクラスからアクセス可能な公開の関数であることを意味します。
>> 公式ドキュメントを見る
完全なスクリプト
using { /Verse.org/Simulation }
using { /Fortnite.com/Devices }
spawner_button := class<concrete>(creative_device):
@editable
Button:button_device = button_device{}
@editable
ItemSpawner:item_spawner_device = item_spawner_device{}
OnBegin<override>()<suspends> : void =
Button.InteractedWithEvent.Subscribe(OnButtonInteractedWith)
OnButtonInteractedWith(InPlayer:agent) : void =
ItemSpawner.SpawnItem()
今日はここら辺で。
お疲れさまでした🍵