このようなアイテムを持つとプレイヤーが消える仕組みを作ります。
コードは以下を参考にしています。
コードの全体
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
invisible := class(creative_device):
@editable
cond_btn: conditional_button_device = conditional_button_device{}
@editable
mutator: mutator_zone_device = mutator_zone_device{}
HoldingEvent( Agent : agent) : void =
if(FortCharacter := Agent.GetFortCharacter[]):
if(cond_btn.IsHoldingItem[Agent]):
FortCharacter.Hide()
else:
FortCharacter.Show()
OnBegin<override>()<suspends>: void =
loop:
mutator.Enable()
mutator.AgentEntersEvent.Subscribe(HoldingEvent)
Sleep(0.1)
mutator.Disable()
Sleep(0.1)
コードの解説
冒頭
今回の仕組みではデバイスの条件付きボタンとミューテーターゾーンを使うため、9~13行目に記載されている通り@editableを前につけて定義します。
関数宣言
16行目からHoldingEvent関数を定義しています。
引数は(Agent:agent)となっているのは後ほど27行目で出てくるAgentEnterEventの対象がagent型だからです。
17行目ではifが使われていますが、これは条件分岐をしたいから使われているというよりは、 FortCharacter := Agent.GetFortCharacter[]が失敗する可能性のある式であるため、失敗コンテキストであるifの条件節(括弧内のこと)で書くために使われています。
後ほど出てくる19,21行目でShow、Hideのメソッドを使うためにagent型からfort_character型へ変換する必要があるため、この式が必要になります。
18行目のifは17行目のifとは違い条件分岐を行うためのifです。
18行目~21行目の意味は以下の通りです。
ここでは、IsHoldingItem、Hide、Showの3つのメソッドが使われています。
IsHoldingItemはagent型の情報を必要とするため、[] 内でagent型であるAgentを書いています。これにより、アイテムを保持しているプレイヤーを判別しています。
Hide、Showは前述した通り、fort_character型を対象とするため、メソッドの前にfort_character型のFortCharacterを書きます。
これで関数定義は完了です。
On Begin~
24行目からは、ゲーム開始後に実行されていく式です。
loopはコードブロック内にある式を繰り返し実行するものです。
コードブロックの式の意味は以下の通りです。
26,29行目のEnableとDisableはメソッドで、ミューテーターゾーンの有効化と無効化を行っています。
27行目は「~が起きた時、関数をを実行する」という場合によく使われる文法です。
ここでは、AgentEnterEventが起きた時に、HoldingEventを実行するとなります。
前述した通り、AgentEnterEventではagent型の情報が必要なため、HoldingEventの引数でAgent:agentとしています。
コメント