
- シーンを直観的に動きまわり、ホバーして観測点を簡単に決められるようにすること。
- VR をセットアップした現場に行くのではなく、デスクに座ったまま作業を続けて、エディタと VR モードとの間で簡単に切り替えられるようにすること。
- ルーム スケールによる制約を受けないこと。
- ハンド コントローラーが必要なのはオブジェクトの選択、カスタマイズ、移動のみであること。
VR モードの統合と合わせて、UE4 の標準エディタ内を、キーボード / マウス、ジョイスティック (XInput) 以外にも足で操作して移動できる機能もあります。
3dRudder を VR モードに統合する
3dRudder を VR モードに統合するには、VR モードを処理するためのコードを自分たちの既存の UE4 プラグインに追加する必要がありました。

エディタのプラグインを作成するために、Creating Editor Module の wiki に従いました。
最初のステップは以下のように 3dRudder Editor Moduleを作成することでした。
1. このエディタのモジュールを 3dRudder.uplugin:
に追加します。
{ "Name": "_3DRudderEditor", "Type":"Editor", "LoadingPhase":"PostEngineInit", "WhitelistPlatforms": [ "Win64", "Win32" ] }
2.以下のように Unreal Editor (UnrealEd) を _3dRudderEditor.build.cs:
の依存関係として追加します。
PublicDependencyModuleNames.AddRange( new string[] { "Core", "CoreUObject", // Provides Actors and Structs "UnrealEd", });
3.以下から継承する F3DRudderEditorModule クラスを作成します。
a.モジュールを登録、開始、停止させる IModuleInterface
b.各フレームでティックし、3dRudder の入力軸の値を取得し、ビューポート カメラを更新する FTickableEditorObject
void F3DRudderEditorModule::Tick(float DeltaTime) { //UE_LOG(_3DRudderEditor, Warning, TEXT("tick %f"), DeltaTime); // 3dRudder SDK ns3dRudder::CSdk* pSdk = ns3dRudder::GetSDK(); // Mode : curve ns3dRudder::ModeAxis mode = ns3dRudder::ValueWithCurveNonSymmetricalPitch; // Curves for each axis (Pitch, Roll, Yaw, UpDown) ns3dRudder::CurveArray *curves = new ns3dRudder::CurveArray; // Only one device (0) uint32 i = 0; if (pSdk->IsDeviceConnected(i)) { // Axis :X, Y, Z, rZ ns3dRudder::Axis axis; // Status of 3dRudder ns3dRudder::Status status; if (pSdk->GetAxis(i, mode, &axis, curves) == ns3dRudder::Success) { status = pSdk->GetStatus(i); if ((status == ns3dRudder::InUse || status == ns3dRudder::ExtendedMode) && GetDefault()->bActive) UpdateViewportCamera(FVector(axis.m_aY, axis.m_aX, axis.m_aZ), axis.m_rZ); } } }
UpdateViewportCamera で FEditorViewportClient オブジェクトを取得し、MoveViewport 関数を呼び出します。この関数は、UE4 のソース コードの中で、ゲームパッド / ジョイステックを使ってエディタ内でカメラを動かすために使われている場所にあります。
void F3DRudderEditorModule::UpdateViewportCamera(const FVector& translation, float yaw) { //UE_LOG(_3DRudderEditor, Warning, TEXT("tick %f"), yaw); if (translation.IsZero() && yaw == 0) return; if (GEditor != nullptr && GEditor->GetActiveViewport() != nullptr && GEditor->GetActiveViewport()->GetClient() != nullptr) { FEditorViewportClient* client = StaticCast(GEditor->GetActiveViewport()->GetClient()); if (client != nullptr && !client->Viewport->IsPlayInEditorViewport()) { const FVector speed = GetDefault ()->Translation; const float speedRotation = GetDefault ()->RotationYaw; // X Y local FVector local(translation.X * speed.X, translation.Y * speed.Y, 0); FVector world = client->GetViewRotation().RotateVector(local); // Z world world += FVector(0.0f, 0.0f, translation.Z * speed.Z); // Pitch Yaw Roll FRotator rotation(0, yaw * speedRotation, 0); // Move Camera of Viewport with 3dRudder client->MoveViewportCamera(world, rotation); } } }
4.エディタの環境設定に固有のパラメータを表示し、保存するための U3DRudderSettings クラスも作成しました。
a. カメラ モーションをアクティブ / オフにする boolean
b. X,Y,Z 軸のモーションのべロシティ / 速度を変更するための vector3
c. Z (yaw) の回転のべロシティ / 速度を変更するための float
UCLASS(config = Editor, defaultconfig) class U3DRudderSettings : public UObject { GENERATED_BODY() public: U3DRudderSettings(const FObjectInitializer& ObjectInitializer); /** Enable/Disable */ UPROPERTY(EditAnywhere, config, Category = Move) bool bActive; /** Speed Translation */ UPROPERTY(EditAnywhere, config, Category = Speed) FVector Translation; /** Speed Rotation (Yaw) */ UPROPERTY(EditAnywhere, config, Category = Speed, meta = (DisplayName = "Rotation (Yaw)" )) float RotationYaw; };
こうした設定を利用するには、Edit -> Editor Preferences -> 3dRudder -> Viewport
の順に選択します。

これらの値を更新すると、Config/DefaultEditor.ini に保存されます。このように各プロジェクトでモーションを様々な速度にすることができます。
[/Script/_3DRudderEditor.3DRudderSettings] Translation=(X=1.000000,Y=2.000000,Z=3.000000) RotationYaw=5.000000 bActive=True
プラグインを空の C++ プロジェクト内で、Visual Studio 2015 上でビルドしました。

コード全体は GitHub の以下の場所にあります。
https://github.com/3DRudder/3DRudderSDK_Unreal_Engine
最終ステップは、パッケージをマーケットプレイス チームに提出し、アンリアル エンジンの最新バージョン (4.15, 4.16, 4.17, 4.18) でスムーズに動作するかを確認することでした。3dRudder プラグインは、UE4 マーケットプレイスのここ にあります。
直面した問題
全体として統合は非常にスムーズに進みました。唯一の問題はビューポート カメラの移動でした。適切なドキュメントやサンプル コードが見つからなかったからです。代わりに、ゲームパッドを使ってカメラがどのように動くかについての VR Mode のソース コードを見ました。
プラグインのインストール
最後に、プラグインのインストール方法と UE4 で 3dRudder を使うとどのようになるかについての動画を作成しました。
この動画では、まずエディタと VR モードで 3dRudder プラグインをインストールする方法を示し、次に動画の時間 0:45 で 3dRudder を使って標準のエディタ内でシーン内を動き、2:57 で VR モードでシーンを動き回っています。
特別提供価格
3dRudder は UE4 の VR エディタの操作感全般を大幅に高めると我々は考えています。ですから、アンリアル エンジンのデベロッパーの皆様向けに、3dRudder professional のウェブサイトから 3dRudder を、 99 ドルすなわち 99 ユーロ (従来の 179 ドルすなわち 179 ドルからの割引) の特別価格で購入いただけるクーポン (有効期限は12 月 5 日まで) を提供させていただきます。www.3dRudderBusiness.com のサイトで UE4SPECIAL3DRUDDER のコードをご利用ください。