このようなプロップがプレイヤーについていく仕組みを作ります。
コードの全体
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行目から関数の定義ですが、コードブロックの意味は以下のようになります。
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行目以降はゲーム開始時に実行される式ですが、 関数宣言だけとなります。
以下のように動けば完成です。
コメント