🕺
fort_characterとplayerのIsActive[]関数の違い | UEFN, Verse
前書き
フォートナイトのプレイヤーは常にアクティブな状況であるとは限りません。撃破されて観戦画面であったり、そもそも島からいなくなっていたり。
それらの状態を確認する関数として「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