SwitchablePawn は、Play 中に FirstPerson / ThirdPerson / VR の Pawn を切り替えるための Unreal Engine Runtime Plugin です。
- Author: Hironori Sugino
- Website: https://sugi.cc
- Original Repository: https://github.com/sugi-cho/UE_SwitchablePawn
- Unreal Engine 5.7
- C++ プロジェクト推奨
- Enhanced Input 使用
- VR は OpenXR 使用
- UE プロジェクト直下に
Pluginsフォルダを作成します。 - この
SwitchablePawnフォルダをPlugins/SwitchablePawnに配置します。 .uprojectに Plugin を追加します。
{
"Name": "SwitchablePawn",
"Enabled": true
}- 必要に応じて依存 Plugin も有効化します。
{
"Name": "EnhancedInput",
"Enabled": true
},
{
"Name": "OpenXR",
"Enabled": true
}.uprojectを右クリックしてGenerate Visual Studio project filesを実行します。- Editor target をビルドします。
& "C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\Build.bat" YourProjectEditor Win64 Development -Project="C:\Path\To\YourProject\YourProject.uproject" -WaitMutex -NoHotReloadFromIDEGameMode または World Settings で PlayerController を次に設定します。
ASwitchablePlayerController
Default Pawn は未設定、または Plugin 側の Pawn を指定します。
ASwitchableFirstPersonCharacterASwitchableThirdPersonCharacterASwitchableVRCharacter
ASwitchablePlayerController は開始時に DefaultMode の Pawn を生成して Possess します。
NavMesh 制限は ASwitchablePlayerController::bConstrainMovementToNavMesh で全モード共通に切り替えます。
NavMesh 制限時に NavLinkProxy で飛ばしたい場合は、ASwitchableBaseCharacter::NavLinkProxies にレベル上の NavLinkProxy を設定します。空ならワールド内を自動探索します。
Level に ASwitchablePawnTeleportPoint を配置します。
主な設定:
bSetAsDefaultStart: 起動時の位置として使うTeleportPointName: Outliner の Actor 名を反映した読み取り用の名前
Blueprint から Spawn する場合は USwitchablePawnBlueprintLibrary::SpawnTeleportPoint() を使うと、Spawn 時に名前を渡せます。
ActorName:TeleportToPointByName()で検索する名前。Level 上で自動的に一意になる
Blueprint / C++ から次の API で移動できます。
TeleportToStartPoint();
TeleportToPointByName("Lobby");
TeleportToPointByIndex(0);既定では PlayerController が Runtime fallback の Enhanced Input Mapping を作成します。
既定キー:
1: FirstPerson2: ThirdPerson3: VRWASD: 移動Mouse: LookSpace: JumpRightMouseButton: VR teleport aim / confirmGamepad_RightTrigger: VR teleport confirm
BP_SwitchablePlayerController では次を変更できます。
bEnableModeSwitchKeys:1/2/3のモード切替キーをまとめて無効化SwitchFirstPersonKeySwitchThirdPersonKeySwitchVRKeyOnModeWillChange/OnModeChanged: モード変更前後の独自処理
VR へ切り替える時は HMD / stereo を有効化し、VR から FirstPerson / ThirdPerson に戻る時は Windowed に戻します。
プロジェクト側で独自の InputMappingContext / InputAction を指定することもできます。
ThirdPerson の body mesh、VR の hand mesh は Plugin 内にコピーしません。
この Plugin の BP は、UE テンプレート側のアセットを参照する前提です。
そのため、BP の設定をそのまま使うなら次のテンプレートが必要です。
- Third Person Template
- First Person Template
- VR Template
差し替え用 property / component 設定:
ASwitchableThirdPersonCharacter::BodyMeshASwitchableVRCharacter::HandSkeletalMeshCharacterMesh0/FirstPersonMesh/LeftHandMesh/RightHandMeshのAnimation Mode- 各 Mesh の
Anim Class CameraDistance
目安:
- ThirdPerson の見た目を変える:
BodyMesh - VR の手モデルを変える:
HandSkeletalMesh - 動かすアニメを変える: 各 Mesh の
Anim Class - カメラ距離を変える:
CameraDistance
補足:
Animation ModeがUse Animation Blueprintでないと、Mesh は出ても動きません。- テンプレートを使わずに運用する場合は、BP 側で参照先を自前アセットへ差し替えてください。
最終的な Plugin は、テンプレート依存を BP の参照に閉じる方針です。
つまり、Plugin 本体の C++ はテンプレートアセットを複製せず、BP 側の参照だけがテンプレート依存になります。
- FirstPerson / ThirdPerson / VR の Pawn 切り替え
- 切り替え時の Transform / Velocity / ControlRotation 引き継ぎ
- FirstPerson / ThirdPerson の移動と Jump
ASwitchablePlayerControllerのbConstrainMovementToNavMeshによる全モード移動の NavMesh 制限ASwitchableVRCharacterの teleport ray は既定で赤/緑のデバッグ表示TeleportPreviewMesh/TeleportPreviewMaterial/TeleportPreviewValidMaterialは任意の見た目変更用TeleportNavMeshSnapDistanceで、Collider hit から NavMesh 最近傍へ寄せる許容距離を調整可能- VR の HMD Camera / MotionController / Hand mesh slot
- VR line trace teleport
- NavMesh projection による teleport destination 判定
ASwitchablePawnTeleportPointによる default start と teleport point
この Plugin の変更後は、最低限 Editor target の C++ build を確認します。
& "C:\Program Files\Epic Games\UE_5.7\Engine\Build\BatchFiles\Build.bat" UE_SwitchablePawnEditor Win64 Development -Project="C:\Users\git\source\sugi-cho\UE_SwitchablePawn\UE_SwitchablePawn.uproject" -WaitMutex -NoHotReloadFromIDEShader や Editor load の確認が必要な場合は UnrealEditor-Cmd.exe で別途ログ確認します。
- Git ルートはこの
SwitchablePawnフォルダです。 - UE プロジェクト直下の
Source/Content/Configはこの Plugin repo の管理対象ではありません。 Binaries/Intermediate/Savedは Git 管理しません。