Single/Multiplayer, Touch & Vive blueprint only Template

Hi everyone. I’ll update the git on monday with the following updates:

  • Unreal 4.22.2
  • SteamVR compatible
  • HTC Vive camera access
  • Thoroughly tested with Oculus Quest
  • Highlight selected object compatible with Oculus Quest
  • A lot of other small things

Here are more infos:

Features compatibility:
Oculus Rift / S

  • Avatar: Oculus Avatars or Custom Avatar
  • Multiplayer: Oculus Home, or Steam / LAN (Custom Avatars only)
  • VOIP: Yes

Oculus Go / Quest

  • Avatar: Oculus Avatars or Custom Avatar
  • Multiplayer: Oculus Home (Go only, Quest developers need access to Quest API)
  • VOIP: No (Oculus Avatars), Yes (Custom Avatars)

HTC Vive

  • Avatar: Custom Avatar
  • Multiplayer: Steam / LAN
  • VOIP: Yes

DO I NEED TO MAKE MODIFICATIONS TO THE ENGINE?

I want to develop for Oculus Quest and/or Go
change
/Engine\Plugins\Online\OnlineSubsystemOculus\Source\Private\OculusIdentityCallbackProxy.cpp Line 26
from
DelegateHandle = Online::GetIdentityInterface()->AddOnLoginCompleteDelegate_Handle(
to DelegateHandle = OculusIdentityInterface->AddOnLoginCompleteDelegate_Handle(

**Reference: **https://github.com/Oculus-VR/UnrealEngine/pull/26
I want to use Oculus Avatars on the Quest, but I don’t have access to Quest Platform API change
\Engine\Plugins\Runtime\Oculus\OculusVR\Source\OculusHMD\OculusMobile_APL.xml
Line 223
from:
com.oculus.svclib.OVREntitlementChecker.doAutomatedCheck(this);
to:
<!-- com.oculus.svclib.OVREntitlementChecker.doAutomatedCheck(this); →
I want to nativize assets without errors when compiling change
\Engine\Source\Runtime\Engine\Classes\GameFramework\PlayerController.h line 1053 private to public, because ‘PlayDynamicForceFeedback’ is a private member of ‘APlayerController’, for reasons unknown

Reference: PlayDynamicForceFeedback node in 4.20 fails to cook - Blueprint - Unreal Engine Forums

What are the best Project Settings for VR?

  • You will find the best settings already set in ProjectSettings

  • Oculus Go / Quest: 4x Mobile MSAA is hardcoded, no matter what

  • Oculus Go works in OpenGL ES2 and ES 3.1

  • Use Android SDK 21, 32-bits Android libraries (armeabi-v7a)

  • Advanced APK settings:

  • Oculus Quest works in OpenGL ES2 and ES 3.1, and Vulkan

  • Disable FFR and Mobile Multi-View if using Vulkan

  • Quest supports arm64, but Oculus Avatars & Mobile Audio plugin are 32-bits
    [LIST]

  • Select armeabi-v7a, Android SDK 23

  • Performances:

  • ES 3.1 + FFR + Mobile MultiView > Vulkan

[LIST]

  • ES3.1 is recommended

Advanced APK settings:
[/LIST]
[/LIST]

MULTIPLAYER MODE
IMPORTANT

  • Select ProjectSettings/NavigationSystem/Allow Client Side Navigation
  • Don’t’t forget to put

[/Script/Engine.GameSession]
bRequiresPushToTalk=false
in DefaultGame.ini

CHANGE IN DEFAULTENGINE.INI:

Oculus Network

[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName=“GameNetDriver”,DriverClassName="/Script/OnlineSubsystemOculus.OculusNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
[OnlineSubsystem]
DefaultPlatformService=Oculus
bHasVoiceEnabled=true
PollingIntervalInMs=20
VoiceNotificationDelta=0.2
AllowPeerConnections=True
AllowPeerVoice=True
[OnlineSubsystemOculus]
bEnabled=true
RiftAppId=YOUR RIFT APP ID
GearVRAppId=YOUR GO/QUEST APP ID

[/Script/OnlineSubsystemOculus.OculusNetDriver]
NetConnectionClassName=OnlineSubsystemOculus.OculusNetConnection

Steam Network

[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName=“GameNetDriver”,DriverClassName="/Script/OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
[OnlineSubsystem]
DefaultPlatformService=Steam
bHasVoiceEnabled=true
PollingIntervalInMs=20
VoiceNotificationDelta=0.2
AllowPeerConnections=True
AllowPeerVoice=True
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
bVACEnabled=0
GameServerQueryPort=27015
bRelaunchInSteam=false
GameVersion=1.0.0.0
bVACEnabled=1
bAllowP2PPacketRelay=true
P2PConnectionTimeout=90

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="/Script/OnlineSubsystemSteam.SteamNetConnection"

LAN
[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName=“GameNetDriver”,DriverClassName="/Script/OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
[OnlineSubsystem]
DefaultPlatformService=Null
bHasVoiceEnabled=true
PollingIntervalInMs=20
VoiceNotificationDelta=0.2
AllowPeerConnections=True
AllowPeerVoice=True

The Oculus Rift will use the RiftAppId found in Developer Dashboard FOR RIFT
The Oculus Go/QUEST will use GearVRAppID found in the Developer Dashboard FOR MOBILE