【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) 

コードの解説

冒頭

今回の仕組みではデバイスの条件付きボタンミューテーターゾーンを使うため、@editableを前につけて定義します。 

関数宣言

17行目からHoldingEvent関数を定義しています。 
パラメータが(Agent:agent)となっているのは後ほど出てくるAgentEnterEventの情報がagent型だからです。 

18行目ではifが使われていますが、これは条件分岐をしたいから使われているというよりは、 FortCharacter := Agent.GetFortCharacter[]が失敗する可能性のある式であるため、失敗コンテキストであるifの条件節(括弧内のこと)で書くために使われています。 

後ほど出てくるShow、Hideの対象がfort_character型であり、agent型からfort_character型へ変換したいため、この式が必要になります。 

19行目のifは行目のifとは違い条件分岐を行うためのifです。
 
20行目~22行目の意味は以下の通りです。 

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

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

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

Hide、Showは前述した通り、fort_character型を対象とするため、メソッドの前にfort_character型のFortCharacterを書きます。 

これで関数定義は完了です。 

On Begin~

25行目からは、ゲーム開始後に実行されていく式です。 

loopはコードブロック内にある式を繰り返し実行するものです。 
コードブロックの式の意味は以下の通りです。 


loopで以下を繰り返し

  1. ミューテーターゾーンを有効化 
  2. ミューテーターゾーンにAgentが入っているのならば、HoldingEvent関数を実行 
  3. 0.1秒処理を停止 
  4. ミューテーターゾーンを無効化 
  5. 0.1秒処理を停止 

 

27行目のEnableと30行目のDisableはメソッドで、有効化と無効化を行っています。 

28行目は「~が起きた時、関数をを実行する」という場合によく使われる文法です。 
ここでは、AgentEnterEventが起きた時に、定義したHoldingEventを実行するという意味になります。 
前述した通り、AgentEnterEventではagent型の情報が必要なため、HoldingEventのパラメータでAgent:agentとしています。 

コード全体で見てみると、以下 を高速で繰り返し、この仕組みを実現しています

  1. ミューテーターゾーンに入っているならば、アイテムを持っているか確認 
  2. 持っているならばプレイヤーは消える 
よかったらシェアしてね!

この記事を書いた人

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

コメント

コメントする

目次