【UEFN】Verseで「プロップがプレイヤーについていく仕組み」を実装する

このようなプロップがプレイヤーについていく仕組みを作ります。

目次

コードの全体

using { /Fortnite.com/Devices } 
using { /Verse.org/Simulation } 
using { /UnrealEngine.com/Temporary/Diagnostics } 
using { /Fortnite.com/Characters } 
using { /UnrealEngine.com/Temporary/SpatialMath } 


prop_follow_player_device := class(creative_device): 
    @editable 
    FollowProp : creative_prop = creative_prop{} 


    DoFollowPlayer()<suspends> : void = 
        loop: 
            if(PlayerList := GetPlayspace().GetPlayers(), FortniteCharacter := PlayerList[0].GetFortCharacter[]): 
                PlayerPosition : vector3 = FortniteCharacter.GetTransform().Translation 
                FollowProp.MoveTo(PlayerPosition,rotation{},1.0) 


    OnBegin<override>()<suspends>:void= 
        DoFollowPlayer() 

 

コードの解説

冒頭

4行目のusing { /Fortnite.com/Characters }は
GetFortCharacter関数を使うために書かれます。 

5行目のusing { /UnrealEngine.com/Temporary/SpatialMath }は
vector3構造体を使うために書かれます。 

10行目に動かしたいプロップを定義します。 

関数宣言

13行目から関数の定義ですが、コードブロックの意味は以下のようになります。 

以下をループ 
1.全てのplayer情報を取得、最初のプレイヤーのplayer情報からfort_character情報を取得
2.最初のプレイヤーの位置情報を取得
3.プロップをプレイヤーの位置まで動かす


Ifは条件分岐のifというよりは、失敗する可能性のある式を失敗コンテキストであるifの括弧内に書くために使われています。 

15行目のPlayerList := GetPlayspace().GetPlayers()によってゲーム内の全てのプレイヤーのplayer情報を取得しています。
PlayerListは複数の情報が入っていることになるため、配列となります。 

そして、FortniteCharacter := PlayerList[0].GetFortCharacter[]で配列の最初、つまり、最初にゲームに参加したプレイヤーにアクセスし、player情報からfort_character情報を取得しています。これは、GetTransform()はplayer情報に対しては使えませんが、fort_character情報には使えるためです。 

16行目のGetTransform()の後ろの.TranslationはGetTransform()で得た位置、回転、拡大の情報のうち、位置の情報だけを取り出すために書きます。 

そして、17行目でMoveTo関数を使い、パラメータには動かしたい位置のvector3情報rotation情報移動時間を入力します。 
MoveTo関数はcreative_object classを対象としますが、creative_prop classはcreative_object classの子クラスであるためcreative_prop classも対象にできます。 

OnBegin~

20行目以降はゲーム開始時に実行される式ですが、 関数宣言だけとなります。 



以下のように動けば完成です。

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

この記事を書いた人

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

コメント

コメントする

目次