在提交给Oculus商店之前,我一直在为我的应用进行最后一次测试。我尝试了各种尝试都无济于事。我需要做的是在不可见测试时通过帧。
有效地,当用户单击oculus touch控制器上的菜单按钮时,应用程序需要进入暂停模式。
我需要停止从Unity提交所有框架。例如,我尝试过的事情,关闭相机,音频,ovrplayercontroller等,但是在裂谷上按下菜单按钮时会提交帧,因此看起来好像冻结了该应用程序。
我尝试过在foreach循环中禁用相机,从而禁用玩家的游戏对象,各种ovr控制器。
我有一个附带脚本的游戏对象,用于尝试根据HMD丢失跟踪检测何时触发测试。
这是我目前所在的位置(再次回到基础知识),任何帮助将不胜感激。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HMDCheck : MonoBehaviour
{
public GameObject OVRCameraRig;
private void Update()
{
if (!OVRManager.isHmdPresent)
{
OVRCameraRig.SetActive(false);
Time.timeScale = 0f;
}
else
{
OVRCameraRig.SetActive(true);
Time.timeScale = 1f;
}
}
}
他们的文档还说测试执行此操作:
TestSubmitFramesWhenNotVisible
测试当通用菜单打开时您的应用是否停止提交帧。
注意:
我对测试的最新命令行响应是以下输出:
不可见时启动TestSubmitFrames 在测试开始之前,等待应用程序运行5秒钟...
开始测试...
要求空缺...
可见时已提交的纹理交换链的数量68
不可见时提交的纹理交换链的数量4
错误:应用程序不可见时,提交了一个纹理交换链(称为ovr_CommitTextureSwapChain)
请参考VRC指南: https://developer.oculus.com/distribute/latest/concepts/vrc-pc-input-1/
清理中... 测试失败
答案 0 :(得分:0)
我有几乎相同的代码,但这可以正确检测通用菜单并冻结输出,但仍无法通过测试。我认为,如果禁用启动屏幕,它可能会通过,但是由于我有Unity的免费版本,所以不知道。
编辑:我看到了您的答案Diego,但无法发表评论。您的动作解决了您原来的问题吗?您拥有Unity的什么许可证?
Camera cam;
bool bPause = false;
void Update()
{
//install 'Oculus Integration' for this to work
bool bPauseNow = !(OVRManager.hasInputFocus && OVRManager.hasVrFocus);
//pause state change
if (Camera.main != null) cam = Camera.main;
if (bPause != bPauseNow)
{
bPause = bPauseNow;
if (bPauseNow)
{
Time.timeScale = 0.0f; //stops FixedUpdate
//Update keeps running, but
// rendering must also be paused to pass vrc
cam.enabled = false;
}
else
{
Time.timeScale = 1.0f;
//
cam.enabled = true;
}
}
//...
}
答案 1 :(得分:0)
为了解决这个问题,我创建了一个带有公共游戏对象的脚本。然后,我将播放器拖到Unity内部的插槽中,但将相机独自留在了场景上。这是屏幕截图和代码。最初,我添加了相机以关闭发送的帧,但是Oculus拒绝了它,因为按下菜单按钮后它在后台冻结了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HMDCheck : MonoBehaviour
{
public GameObject target, scripts, LocalAvatar;
private void Update()
{
if (!OVRManager.hasVrFocus || !OVRManager.isHmdPresent || !OVRManager.hasInputFocus)
{
//target.SetActive(false);
scripts.SetActive(false);
LocalAvatar.SetActive(false);
Time.timeScale = 0f;
AudioListener.pause = true;
}
else
{
//target.SetActive(true);
scripts.SetActive(true);
LocalAvatar.SetActive(true);
Time.timeScale = 1f;
AudioListener.pause = false;
}
}
}
答案 2 :(得分:0)
我正在使用“ Oculus XR插件”,并且遇到了这个问题, 但是我发现“ VRC验证程序”的结果不太准确, 然后我将应用提交了审核并通过了测试。