verseとテレポーターを組み合わせてプレイヤーキャラを回転させる

以前の記事で小道具に変身した状態でプレイヤーキャラクターを回転できない問題がありました。

その後、X(旧Twitter)で「テレポートを使えば小道具に変身したまま回転できるかも」というアドバイスを頂戴しました。

https://twitter.com/77nnaapp/status/1842405775911928183

それを受けて、前回の記事で作っていたコードを改変しました。

目次

機能説明

Qボタンを押下するとプレイヤーキャラの位置にテレポーターを移動し、テレポーターの向きにプレイヤーキャラクタの向きを合わせます。

これにより、小道具に変身した状態でもプレイヤーキャラクタの向きを変えることができるようになりました。

※若干90度よりも多く回転しているような気がするので、角度は要調整かもしれませんが、回転はできました。

ただし、小道具に変身した状態で ctrl ボタンを押下して ”位置の固定” になっている場合は、プレイヤーキャラクタは動かずに、カメラアングルだけが動くだけとなりました。

Verseのプログラム


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

player_position_device := class(creative_device):

    # 入力トリガーの仕掛け
    @editable
    MyInputTriggerDevice:input_trigger_device = input_trigger_device{}
    # テレポーター
    @editable
    TeleporterDeviceIn:teleporter_device = teleporter_device{}
    @editable
    TeleporterDeviceOut:teleporter_device = teleporter_device{}

    # ゲーム開始時
    OnBegin<override>()<suspends>:void=
        # 入力トリガーの仕掛けのイベントに関数を指定
        MyInputTriggerDevice.PressedEvent.Subscribe(OnInputPressed)
        # 入力トリガーの仕掛けに全てのプレイヤーを登録
        for (Player : GetPlayspace().GetPlayers()):
            MyInputTriggerDevice.Register(Player)

    # 関数 - ボタン押下時
    OnInputPressed(Agent:agent):void=
        if (FortChar := Agent.GetFortCharacter[]):
            # ボタンを押下したプレイヤーの位置情報を取得
            Transform := FortChar.GetTransform()
            Rotation := Transform.Rotation
            # 回転させるため90度加算
            NewRotation := Rotation.ApplyYaw(90.0)
            # 初期位置
            initalPos := vector3{ X := 0.0, Y := 0.0, Z := 0.0 }
            initalRotation := MakeRotationFromYawPitchRollDegrees(0.0, 0.0, 0.0)
            # ※キャラの位置にテレポーターを移動し、プレイヤーをテレポーターの向きに合わせる
            if (TeleporterDeviceOut.TeleportTo[Transform.Translation, NewRotation]):
                if (TeleporterDeviceIn.TeleportTo[Transform.Translation, NewRotation]):
                    # テレポーターを初期位置に戻しておく
                    if (TeleporterDeviceIn.TeleportTo[initalPos, initalRotation]):
                        if (TeleporterDeviceOut.TeleportTo[initalPos, initalRotation]):

UEFNでの設定

入力トリガーの仕掛け

適当なトリガーを設定します。

今回は “クイックバー入れ換え” (建築モードの切り替え。デフォルトではQボタン)に設定しておきます。

テレポーター

テレポーターは入り口と出口の2つを用意し、裂け目のビジュアルや音声はオフにしておきます。

また、テレポーターの設定で “プレイヤーをテレポーターの方向に向かせる” を “はい” に設定しておきます。

テレポーター(入口用)

テレポーター(出口用)

verse と入力トリガーの仕掛け・テレポーターを紐づけ

verse を島にドラッグ&ドロップで設置して、入力トリガーの仕掛けとテレポーターを紐づけておきます。

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