はじめに
“仕掛け”を動かすことができます。
どういうことかというと、例えば、イスの仕掛けを以下の動画のように宙に浮かすことができます。
”仕掛け”を動かすためにverseを使います。
verseでは”仕掛け”をクラスと呼び、機能を持つと今まで説明をしてきました。
いろいろな”仕掛け”があり、いろいろな機能がありますが、どの”仕掛け”も共通して持っている機能が存在します。MoveToという機能と、TeleportToという機能です。
MoveTo、TeleportTo
MoveToは、以下の動画のように、”仕掛け”をA地点からB地点を移動させる機能です。
コードで書くと以下のようになります。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
Move_device := class(creative_device):
#イスの仕掛けを準備します。
@editable
Chair : chair_device = chair_device{}
OnBegin<override>()<suspends>:void=
#MoveProp関数を自分でつくって、使う。引数はChair
MoveProp(Chair)
#MoveProp関数をつくります。
#Chairのようなcreative_objectの位置情報を取得して、
#新しい位置に移動せよと指示をだす関数です。
MoveProp(Prop : creative_object)<suspends>: void=
#位置情報を取得しています。
#Positionが位置、Rotationが回転
Transform := Prop.GetTransform()
PositionX := Transform.Translation.X
PositionY := Transform.Translation.Y
PositionZ := Transform.Translation.Z
Rotation := Transform.Rotation
#新しい位置を指定します。
NewRotation := Rotation.ApplyYaw(0.0)
NewPosition := vector3{X := PositionX, Y :=PositionY + 1000.0, Z :=PositionZ}
#新しい位置に移動します。
#MoveToの登場です。(新しい位置、新しい回転、どれくらいの時間で移動するか)
Prop.MoveTo(NewPosition, NewRotation, 2.0)
#ここまで処理がちゃんとできているかを確認する。デバッグ。
Print("Move NewPosition: {NewPosition}")
Print("Move NewRotation: {NewRotation}")
新しい位置を変更してみます。以下のようなスクリプトにします。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
Move_device := class(creative_device):
#イスの仕掛けを準備します。
@editable
Chair : chair_device = chair_device{}
OnBegin<override>()<suspends>:void=
#MoveProp関数を自分でつくって、使う。引数はChair
MoveProp(Chair)
#MoveProp関数をつくります。
#Chairのようなcreative_objectの位置情報を取得して、
#新しい位置に移動せよと指示をだす関数です。
MoveProp(Prop : creative_object)<suspends>: void=
#位置情報を取得しています。
#Positionが位置、Rotationが回転
Transform := Prop.GetTransform()
PositionX := Transform.Translation.X
PositionY := Transform.Translation.Y
PositionZ := Transform.Translation.Z
Rotation := Transform.Rotation
#新しい位置を指定します。
NewRotation := Rotation.ApplyYaw(180.0)
NewPosition := vector3{X := PositionX, Y :=PositionY + 1000.0, Z :=PositionZ+1000.0}
#新しい位置に移動します。
#MoveToの登場です。(新しい位置、新しい回転、どれくらいの時間で移動するか)
Prop.MoveTo(NewPosition, NewRotation, 2.0)
#ここまで処理がちゃんとできているかを確認する。デバッグ。
Print("Move NewPosition: {NewPosition}")
Print("Move NewRotation: {NewRotation}")
そうすると、以下のような動きになります。
先ほどと違い、上空に向かい、しかも回転していることがわかります。ちょっとだけ数値をかえただけでこんなにも大きな変化が生まれます。これは”仕掛け”の詳細設定だけでは表現できない領域のお話で、verseならではの能力です。
いろいろな数値を試してみて、変化をお楽しみください。
ほかの”仕掛け”もMoveToしてみる
今回はイスの仕掛けを使用していますが、ほかの”仕掛け”でも同様なスクリプトを書くことができます。
“仕掛け”のクラス名を知りたいときは、レベルに設置してから詳細設定で確認できます。
例えば、アイテムスポナーを設置してみると、クラス:Device_ItemSpawnerとありますが、これをitem_spawner_deviceのように書き直したものがクラス名です。
ミューテーターゾーンを設置してみると、クラス:Device_MutatorVolumeとありますが、これをmutator_zone_deviceのように書き直したものがクラス名です。
クラス名を探すコツみたいなものが何となくわかったと思いますが(ほかにも方法ありますがまた後日に!)、心配であればこの方法で調べたクラス名をvisual studio(いつもverseファイルをいじっているところ)で調べなおすこともできます。verseファイルをひらいて、左側の下あたりにあるFortniteタブをクリックして、Fortnite.digest.verseをひらきます。そこでctl+Fを押して、調べてきたクラス名を検索して一致していそうなものがあれば大丈夫です!ちなみに、そこにはクラスの機能なども記載されていますので、いろいろ参考にできます。
それでは、アイテムスポナーを動かすためのスクリプトを以下に記載します。確認してみてください。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
Move_device := class(creative_device):
#アイテムスポナーの仕掛けを準備します。
@editable
Item : item_spawner_device = item_spawner_device{}
OnBegin<override>()<suspends>:void=
#MoveProp関数を自分でつくって、使う。引数はItem
MoveProp(Item)
#MoveProp関数をつくります。
#Itemのようなcreative_objectの位置情報を取得して、
#新しい位置に移動せよと指示をだす関数です。
MoveProp(Prop : creative_object)<suspends>: void=
#位置情報を取得しています。
#Positionが位置、Rotationが回転
Transform := Prop.GetTransform()
PositionX := Transform.Translation.X
PositionY := Transform.Translation.Y
PositionZ := Transform.Translation.Z
Rotation := Transform.Rotation
#新しい位置を指定します。
NewRotation := Rotation.ApplyYaw(180.0)
NewPosition := vector3{X := PositionX, Y :=PositionY + 1000.0, Z :=PositionZ+1000.0}
#新しい位置に移動します。
#MoveToの登場です。(新しい位置、新しい回転、どれくらいの時間で移動するか)
Prop.MoveTo(NewPosition, NewRotation, 2.0)
#ここまで処理がちゃんとできているかを確認する。デバッグ。
Print("Move NewPosition: {NewPosition}")
Print("Move NewRotation: {NewRotation}")
ぜひいろいろな”仕掛け”で試してみてください。
TeleportTo
これを使うとテレポートできます。考え方はMoveToと同じなので、いろいろ試してみてください。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
Move_device := class(creative_device):
@editable
Chair : chair_device = chair_device{}
OnBegin<override>()<suspends>:void=
TereportProp(Chair)
TereportProp(Prop : creative_object): void=
Transform := Prop.GetTransform()
PositionX := Transform.Translation.X
PositionY := Transform.Translation.Y
PositionZ := Transform.Translation.Z
Rotation := Transform.Rotation
NewRotation := Rotation.ApplyYaw(0.0)
NewPosition := vector3{X := PositionX, Y :=PositionY + 1000.0, Z :=PositionZ}
if (Prop.TeleportTo[NewPosition, NewRotation]):
Print("Teleport NewPosition: {NewPosition}")
Print("Teleport NewRotation: {NewRotation}")
以下の動画のように、瞬間移動のような挙動です。
まとめ
いかがでしたでしょうか。
verseならではの能力を実感できたと思います。
MoveTo、TeleportToの応用がたくさんあるので、どんどんご紹介していきたいと思います。
それでは。お疲れさまでした。
ご質問やご感想はお気軽にコメント欄まで!
コメント一覧 (4件)
こちらの動画が真っ黒になって再生されなくなっています
コメントありがとうございます。
こちら修正作業が完了し、動画がみれるようになったと思います!
お手数ですがご確認のほどよろしくお願いいたします。
クリエナビ
ちゃんと見れました!
ありがとうございます
信号リモコンを使ったときに、信号リモコンを使ったプレイヤーの周りにガード(NPC)をスポーンさせたいです。※プレイヤーの場所にガードスポナーをteleportさせて再現しようと思ってます。どうすればいいでしょうか?