
- Move intuitively around the scene, hover over it and easily adopt any observation point
- Continue working at their desk instead of going to a specific VR set-up, easily switching between Editor and VR Mode
- Not be limited by room scale
- Only need the hand controller to select, customize, and move objects
3dRudder Integration with VR Mode
To integrate the 3dRudder with the VR Mode, we needed to add some specific code for handling VR Mode to our existing UE4 plugin .

We followed the wiki for Creating an Editor Module to create a plugin for the Editor.
The first step was to create the 3dRudder Editor Module:
1. Add the editor module in the 3dRudder.uplugin:
{ "Name": "_3DRudderEditor", "Type": "Editor", "LoadingPhase": "PostEngineInit", "WhitelistPlatforms": [ "Win64", "Win32" ] }
2. Add the Unreal Editor (UnrealEd) as a dependency to the _3dRudderEditor.build.cs:
PublicDependencyModuleNames.AddRange( new string[] { "Core", "CoreUObject", // Provides Actors and Structs "UnrealEd", });
3. Create F3DRudderEditorModule class inheriting from:
a. IModuleInterface, which lets us register, start, and stop the module.
b. FTickableEditorObject, which allows us to be ticked each frame, and get the input axes value of the 3dRudder and update the viewport camera.
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); } } }
In the UpdateViewportCamera, we get the FEditorViewportClient object to call the MoveViewport function. We found this function in the source code of UE4 where it’s being used with the gamepad/joystick to move the camera in the editor.
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. We also created a U3DRudderSettings class to show and save in the Editor preferences some specific parameters :
a. boolean to activate/deactivate the camera motion
b. vector3 to change the velocity/speed of motion on X,Y,Z axes
c. float to change the velocity/speed of rotation on Z (yaw)
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; };
To access those settings, you need to go to Edit -> Editor Preferences -> 3dRudder -> Viewport

When you update those values, they get saved in Config/DefaultEditor.ini. This way you can have different motion speeds for each project.
[/Script/_3DRudderEditor.3DRudderSettings] Translation=(X=1.000000,Y=2.000000,Z=3.000000) RotationYaw=5.000000 bActive=True
We built the plugin on Visual Studio 2015 inside an empty project C++.

The full code is available on GitHub at:
https://github.com/3DRudder/3DRudderSDK_Unreal_Engine
The final step was to submit the package to the Marketplace team and make sure it worked smoothly with the latest versions of Unreal Engine (4.15, 4.16, 4.17 and soon 4.18). The 3dRudder plugin can be found here on the UE4 Marketplace.
Issues We Encountered
Overall, the integration went very smoothly. The only issue we encountered was moving the viewport camera, as we didn’t find the correct documentation or sample code. Instead, we looked at the VR Mode source code for how the camera was moved with a gamepad.
Installing the Plugin
Finally, we created a video demonstrating how to install our plugin and what it feels like to use the 3dRudder with UE4.
It first shows how to install the 3dRudder plugin with the Editor and VR Mode, and then the use of the 3dRudder to move around the scene in the standard Editor at 0:45 and in VR Mode at 2:57.
Special Unreal Engine Offer
As we feel the 3dRudder really enhances the overall UE4 VR Editor experience, we are happy to give Unreal Engine developers a coupon that lets you buy the 3dRudder from the 3dRudder professional website for $99 or 99€ (instead of $179 or 179€), valid for the next 2 weeks. Use the code UE4SPECIAL3DRUDDER at www.3dRudderBusiness.com.