Open8
[UEFN]自キャラについてくるPropを実現するVerseを作る
まとめ
動作
Verse
using { /Verse.org/Simulation }
using { /Fortnite.com/Devices}
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /UnrealEngine.com/Temporary/SpatialMath }
chase := class<concrete>(creative_device):
@editable
Prop:creative_prop = creative_prop{}
@editable
AdjustmentZ:float = 75.0
OnBegin<override>()<suspends> : void =
AllPlayers := Self.GetPlayspace().GetPlayers() #フィールド中のプレイヤーを全て取得
if (FirstPlayer := AllPlayers[0]): #一人目のプレイヤーを取得
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): # fort_characterクラスにGetTransform()があるので取得
loop:
Prop.MoveTo(FortniteCharacter.GetTransform().Translation - vector3{X:=0.0, Y:=0.0, Z:=AdjustmentZ}, rotation{}, 1.0) #FortniteCharacter.GetTransform().TranslationでとれるZが腰辺りの高さになってるので一旦無理やり合わせる
Sleep(0.0)
問題点
- キャラの方向を向いていない
- 障害物に弱い(ただ単にまっすぐこちらに向かってくるため)
- 一人目のプレイヤーしか追いかけない
とりあえず移動をさせるには
creative_propクラスにMoveToとTeleportToがあるのでこれを利用する
Propを行ったり来たりさせるDeviceを作成してみた
using { /Verse.org/Simulation }
using { /Fortnite.com/Devices}
using { /UnrealEngine.com/Temporary/SpatialMath }
back_and_forth := class<concrete>(creative_device):
@editable
Prop:creative_prop = creative_prop{}
MoveToOverTime: float = 2.0
var DefaultPosition: vector3 = vector3{} #初期位置
var MovementX: float = 200.0 #行ったり来たりさせる距離
OnBegin<override>()<suspends> : void =
set DefaultPosition = Prop.GetTransform().Translation #初期位置を取得
loop:
set MovementX = MovementX * -1.0 #ループごとに目的地を反転
Prop.MoveTo(DefaultPosition + vector3 {X:=MovementX, Y:=0.0, Z:=0.0}, rotation{}, MoveToOverTime)
Sleep(1.0)
自キャラの位置をとるには
チュートリアルでキャラクター情報まで辿っていく方法がのっているのでこれを利用する
下記のような感じで辿っていく
AllPlayers := Self.GetPlayspace().GetPlayers() #フィールド中のプレイヤーを全て取得
if (FirstPlayer := AllPlayers[0]): #一人目のプレイヤーを取得
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): # fort_characterクラスにGetTransform()があるので取得