[UEFN]第6章.アイテムゲットで武器を付与させよう
執筆者さんコメント
この記事は 7nap がモンドリアン様クリエイティブ作品「Save the CEO:2911-3111-5636」を作成する過程で、いろいろな情報を参照し見よう見まねで実践した内容を記載しています。必ずしも*正攻法ではない可能性がありますのでご了承ください。(*正しくない、執筆後に変更になっているなど)
シリーズ記事
第1章 第2章 第3章 第4章 第5章 第6章/最終
①コレクティブルオブジェクトを設置しよう
マリオのキノコゲットした時のように何かのアイテムをゲットするとプレイヤーに何か効果をつけたい場合、簡単な方法として「コレクティブルオブジェクト」を使用することができます。
コンテンツブラウザより「コレクティブルオブジェクト」を探して3D空間に設置します。
②アイテムの見た目をデフォルトのものではなく好きなアセットに変えよう
コレクティブルオブジェクトはデフォルトでコインやいろいろな見た目に変えられますが、自分がアップロードしたアセットに変更することもできます。
コレクティブルオブジェクトの右側詳細にて「カスタムメッシュ」にチェックを入れて、自分がアップロードしたアセットを選択します。
(スタティックメッシュだけが選択できるようですので、予めスタティックメッシュを作成してください。)
選択すると3D空間上の見た目も変わってくれます。
大きさが大きすぎたり、小さすぎたりしたら拡大縮小で変更しましょう。
③アイテムゲット時の武器付与用にアイテムグランターを設置する。
アイテムを取得したら武器を付与させたいので、アイテムグランターを設置します。コンテンツブラウザより「アイテムグランター」を探して3D空間に設置してください。
アイテムグランターの右側詳細タブより「アイテムリスト」から+ボタンにて要素を追加します。
インデックス[0]のアイテム定義から付与させたい武器を選択してください。
また、武器を付与させる際にすでに持っている武器をクリアするか保持したままにするかなど細かい設定もアイテムグランター内でできますので、詳細タブをよく確認してください。
④Verseの設定をします。
下記がアイテムを取得すると武器を付与するためのすべてのVerse設定です。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
hakekkyu_device := class(creative_device):
@editable
Ha1 : collectible_object_device = collectible_object_device{}
@editable
itemgranter : item_granter_device = item_granter_device{}
OnBegin<override>()<suspends>:void=
Ha.CollectedEvent.Subscribe(Ha_Interacted)
Ha_Interacted(Agent:agent) : void =
itemgranter.GrantItem(Agent)
一つ一つ説明していきます。
まずはライブラリ設定です。特に数式計算やキャラクターの位置参照などもないのでデフォルトのライブラリだけでOKです。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
次に@editable設定です。
3D空間に設置した「コレクティブルオブジェクト」と「アイテムグランター」をVerse内で扱えるようにこの二つを設定します。
Verse内では、
「Ha」:「コレクティブルオブジェクト」
「itemgranter」:「アイテムグランター」
として扱います。
「Ha」、「itemgranter」の名前は自分がわかりやすい名前に変更できます。
collectible_object_device = collectible_object_device{}
item_granter_device = item_granter_device{}
の部分はシステム側で設定されている名前なので自由に変更することはできません。
@editable
Ha : collectible_object_device = collectible_object_device{}
@editable
itemgranter : item_granter_device = item_granter_device{}
次です。
OnBegin関数がゲーム開始時にまず実行される部分です。
コレクティブルオブジェクトデバイスがVerse内で何ができるのか、は下記ページに記載されています。
OnBegin<override>()<suspends>:void=
Ha.CollectedEvent.Subscribe(Ha_Interacted)
CollectedEvent はプレイヤーがアイテムを取得した時に何をさせるか、を定義するためのコマンドです。
Subscribe は関数を呼び出すためのものでお決まりのコマンドだと思ってください。
Ha_Interacted は呼び出す関数名です。これは後述しますが、自分で好きな名前に変更できます。
Ha_Interacted(Agent:agent) : void =
itemgranter.GrantItem(Agent)
次です。
Ha_Interacted の中身を記載します。
アイテムを取得するとこの中身が実行されます。
まず、
Ha_Interacted(Agent:agent) : void =
の (Agent:agent) の部分ですが、Agent は変数であり、アイテムを取得したプレイヤーの情報が入ります。プレイヤーAがアイテムを取得したら、AgentにはプレイヤーAの情報が入り、プレイヤーBがアイテムを取得したら、AgentにはプレイヤーBの情報が入ります。
ちなみに「Agent」は自分の好きな名前をつけることができます。しかし「agent」(小文字のほう)はシステムが設定している型名なので、変更することはできません。
つまり、
Ha_Interacted(Agent:agent) : void =
は、アイテムを取得したプレイヤー(Agent)に対してなにかのアクションを記載できます。
今回であれば、「(Agent)に対して武器を付与する」ことができるわけです。
次です。
itemgranter.GrantItem(Agent)
は「アイテムグランター」に指示を出しています。
アイテムグランターデバイスで何ができるかについては下記を参照ください。
いろいろなことができますが、今回はアイテムを付与させるだけなので、GrantItem を使用します。
そして、行末ででてくる(Agent)が先に説明した、アイテムを取得したプレイヤー自身の情報を指定しています。
つまり、
プレイヤーAがアイテムを取得。
↓
Ha_Interacted(Agent:agent) : void =
で、Agent に プレイヤーAの情報を入れる。
↓
itemgranter.GrantItem(Agent)
で、プレイヤーA(Agent)に対して武器を付与。となります。
⑤武器付与以外にも・・・
今回は武器の付与についてのコード解説をしましたが、
他にも体力をアップさせる、スピードアップさせるなどいろいろなことができると思います。下記で簡単に説明します。
体力を一定期間アップする。
Ha3_spawn(Agent:agent)<suspends>:void=
Star_Audio.Play()
if (FortniteCharacter := Agent.GetFortCharacter[]):
spawn:
Star(FortniteCharacter)
Sleep(2.0)
Ha3.Respawn(Agent)
return
Star(Fort:fort_character)<suspends>:void=
loop:
Fort.Heal(200.0)
Fort.SetShield(200.0)
Sleep(1.0)
set Star_Count += 1
if(Star_Count = 10):
Star_Audio.Stop()
set Star_Count = 0
break
return
体力アップは、Agent ではなく fort_character 型にてプレイヤーを指定します。
Fort.Heal(200.0)
Fort.SetShield(200.0)
にて、緑ゲージ、シールドゲージを指定することができます。
スピードアップする
@editable
SpeedUp : movement_modulator_device = movement_modulator_device{}
Ha1_spawn(Agent:agent)<suspends>:void=
SpeedUp.Activate(Agent)
Sleep(2.0)
Ha1.Respawn(Agent)
return
スピードアップには「ムーブメントモジュレータ」というデバイスを使用します。「ムーブメントモジュレータ」側の設定にて有効化されるとスピードが2倍になるような設定にてしけおけば、
SpeedUp.Activate(Agent)
とすることで Agent に対して有効化させることができます。
一緒にゲーム、創りませんか?
【大募集】 モンドリアンは #PLATEAU を活用した #UEFN コンテンツをリリースするために日々、研究中! お気軽にお問合せ&DMを!