【UEFN】Verse言語で「アイテムを持っている間、プレイヤーが消える仕組み」を実装する。

このようなアイテムを持つとプレイヤーが消える仕組みを作ります。

コードは以下を参考にしています。

目次

コードの全体

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行目の意味は以下の通りです。 

もし、Agentがアイテムを所持しているならば、ForCharacterを隠す。
そうではないならば、ForCharacterを見せる。 

ここでは、IsHoldingItemHideShowの3つのメソッドが使われています。 

IsHoldingItemはagent型の情報を必要とするため、[] 内でagent型であるAgentを書いています。これにより、アイテムを保持しているプレイヤーを判別しています。 

Hide、Showは前述した通り、fort_character型を対象とするため、メソッドの前にfort_character型のFortCharacterを書きます。 
これで関数定義は完了です。 

On Begin~

24行目からは、ゲーム開始後に実行されていく式です。 
loopはコードブロック内にある式を繰り返し実行するものです。 

コードブロックの式の意味は以下の通りです。 

loopで以下を繰り返し実行
ミューテーターゾーンを有効化 
ミューテーターゾーンにAgentが入っているのならば、HoldingEvent関数を実行 
0.1秒処理を停止 
ミューテーターゾーンを無効化 
0.1秒処理を停止 

 

26,29行目のEnableDisableはメソッドで、ミューテーターゾーンの有効化と無効化を行っています。 

27行目は「~が起きた時、関数をを実行する」という場合によく使われる文法です。 
ここでは、AgentEnterEventが起きた時に、HoldingEventを実行するとなります。 

前述した通り、AgentEnterEventではagent型の情報が必要なため、HoldingEventの引数でAgent:agentとしています。 

コード全体で見てみると、 
1.ミューテーターゾーンに入っているならば、アイテムを持っているか確認 
2.持っているならばプレイヤーは消える 

を高速で繰り返し、この仕組みを実現しています。 

よかったらシェアしてね!

この記事を書いた人

メタバースに興味を持ち、UEFN、Verseを学びながらFortniteでゲーム制作しています。
初心者でも理解できるような記事を書くことを心がけております。
間違いがありましたら指摘よろしくお願いいたします。

コメント

コメントする

目次