最近在做VR游戏开发时候,遇到了一个问题,使用OpenLevel打开一张比较大的地图时,UE4会出现无响应,VR画面自动返回WaittingRoom。找了好多资料,最终在某乎上找到了一位大神的解决方案。
感谢大神同意授权转载:https://zhuanlan.zhihu.com/p/53802660
解决步骤如下
1.下载OpenVr的插件,注意选择好UE4的版本(哎,下载连接已经404了,大家就当作个参考吧)
https://github.com/mordentral/VRExpansionPlugin
https://bitbucket.org/mordentral/vrexpansionplugin/downloads/?tab=branches
2.到你工程里(和content同级目录) ,新建Plugins文件夹
3.把你下载下来的文件复制到Plugins文件夹里
4.打开工程,会提示你需要重新build插件,选择是(英文),等待完成
(假如没有提示的话,直接用编辑器打开工程,就会出现提示,然后build完成后,删除原来的sln,重新generate一个,pluguins文件夹就会出现在工程里)
5.接下来需要修改C++代码,如果你是纯蓝图,可以随便新建一个C++类,然后就能进入VS工程
6.在vs中找到OpenVRExpansionFunctionLibrary类
7.在OpenVRExpansionFunctionLibrary.h添加
UFUNCTION(BlueprintCallable, Category = "VRExpansionFunctions|SteamVR|WaitRoomSet", meta = (bIgnoreSelf = "true"))
static bool BringCompositorToFront();
UFUNCTION(BlueprintCallable, Category = "VRExpansionFunctions|SteamVR|WaitRoomSet", meta = (bIgnoreSelf = "true"))
static bool BringCompositorToBack();
8.在OpenVRExpansionFunctionLibrary.cpp添加
bool UOpenVRExpansionFunctionLibrary::BringCompositorToFront()
{
#if !STEAMVR_SUPPORTED_PLATFORM
UE_LOG(OpenVRExpansionFunctionLibraryLog, Warning, TEXT("Not SteamVR Supported Platform!!"));
return false;
#else
vr::HmdError HmdErr;
vr::IVRCompositor * VRCompositor = (vr::IVRCompositor*)vr::VR_GetGenericInterface(vr::IVRCompositor_Version, &HmdErr);
if (!VRCompositor)
{
UE_LOG(OpenVRExpansionFunctionLibraryLog, Warning, TEXT("VR Compositor InterfaceErrorCode %i"), (int32)HmdErr);
return false;
}
VRCompositor->CompositorBringToFront();
return true;
#endif
}
bool UOpenVRExpansionFunctionLibrary::BringCompositorToBack()
{
#if !STEAMVR_SUPPORTED_PLATFORM
UE_LOG(OpenVRExpansionFunctionLibraryLog, Warning, TEXT("Not SteamVR Supported Platform!!"));
return false;
#else
vr::HmdError HmdErr;
vr::IVRCompositor * VRCompositor = (vr::IVRCompositor*)vr::VR_GetGenericInterface(vr::IVRCompositor_Version, &HmdErr);
if (!VRCompositor)
{
UE_LOG(OpenVRExpansionFunctionLibraryLog, Warning, TEXT("VR Compositor InterfaceErrorCode %i"), (int32)HmdErr);
return false;
}
VRCompositor->CompositorGoToBack();
return true;
#endif
}
9.编译,运行editor
10.在VR的Pawn里调用函数(back:变黑;Front:变回来)