🕺

fort_characterとplayerのIsActive[]関数の違い | UEFN, Verse

2024/09/04に公開

前書き

フォートナイトのプレイヤーは常にアクティブな状況であるとは限りません。撃破されて観戦画面であったり、そもそも島からいなくなっていたり。

それらの状態を確認する関数として「IsActive」というものがあるのですが、こちらはプレイヤー自身であるplayerクラスと、キャラクター全般(プレイヤー、NPC等)のfort_characterの両方に用意されています。

今回のテーマはその二つの違いを探ってこう!というやつです。

確認

using { /Verse.org/Simulation }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Colors }

MessageIsActive<localizes>(Agent:agent, Suffix:string):message="{Agent} | {Suffix}"

active_check_device := class(creative_device):

    @editable
    CheckButton : button_device = button_device{}

    var InitialPlayers : []player = array{}

    OnBegin<override>()<suspends>:void=
        set InitialPlayers = GetPlayspace().GetPlayers()

        CheckButton.InteractedWithEvent.Subscribe(CheckPressed)

    CheckPressed(Agent:agent):void=
        for(Player : InitialPlayers):
            Check(Player)

    Check(Agent:agent):void=
        if(Player := player[Agent]):
            if(Player.IsActive[]):
                Print(MessageIsActive(Player, "player.IsActive"), ?Color := NamedColors.Green, ?Duration := 10.0)
            else:
                Print(MessageIsActive(Player, "not player.IsActive"), ?Color := NamedColors.Red, ?Duration := 10.0)

        if(FortChar := Agent.GetFortCharacter[]):
            if(FortChar.IsActive[]):
                Print(MessageIsActive(Agent, "FortChar.IsActive"), ?Color := NamedColors.Green, ?Duration := 10.0)
            else:
                Print(MessageIsActive(Agent, "not FortChar.IsActive"), ?Color := NamedColors.Red, ?Duration := 10.0)

上記のコードで確認します。

リスポーン中

GorosukeSan | player.IsActive
GorosukeSan | FortChar.IsActive
ごろ助さん | player.IsActive
ごろ助さん | not FortChar.IsActive

実験対象は日本語名の「ごろ助さん」です。
リスポーンの待機中(リスポーンまで○○秒)と出てる間は、fort_characterは失敗し、playerは成功しました。

観戦

GorosukeSan | player.IsActive
GorosukeSan | FortChar.IsActive
ごろ助さん | player.IsActive
ごろ助さん | not FortChar.IsActive

今回も同様にfort_characterは失敗し、playerは成功しました。

途中離脱

GorosukeSan | player.IsActive
GorosukeSan | FortChar.IsActive
 | not player.IsActive

途中離脱の場合、playerのIsActive[]は失敗しました。また、上記のコードだとGetFortCharacter[]の時点で失敗するようです。

途中離脱2

0 | FortChar.IsActive
1 | not FortChar.IsActive

ちなみに、あらかじめfort_characterの状態で変数に入れた際の挙動は上の通りです。
1というのは抜けたプレイヤーで、判定としてIsActiveではないと出力されました。

結果!

ということで、違いは一目瞭然かなと!
player.IsActive[]というのはプレイヤー自身が島にいるかどうかの確認用。
fort_character.IsActive[]というのはプレイヤー自身が生きているかの確認用。
という感じかなと思います。

Discussion