浏览 : 2590

[其他] 【開發問題】Vive啟用兩個VRAPP怎麼辦

一般用户

等级1

路过旅人

精分逗猫机2016-8-6 16:28

使用的是UE4.11.3引擎,對Vive的使用有一些疑問
我現在想要實現的一個功能是在當前APP下通過createPro啟動另一個VR程序,兩個程序都在運行狀態,但Vive要去控制新啟動的APP
同時,在新啟動的APP關閉後,Vive要去控制之前的APP

目前的狀況是新啟動程序後,原程序會關閉,調試時發現會出現PlayWorld == NULL的錯誤,語句是在程序階段才運行的,也就是新啟動APP後,系統會通過什麼來通知關閉舊的APP
那麼如何才能組織系統的行為呢?這個行為應該是Vive發出的

還一個問題就是,去查SteamVR接口發現幾個關於InputFocus的函數
CaptureInputFocus和ReleaseInputFocus,實際沒有任何反映,注釋中描述的控制勸是指HMD的控制行為麼?還是指什麼
同樣插件下還有SetDisplayVisibility()函數和IsDisplayOnDesktop()函數,也無法實現我所想的禁止在評上顯示的功能,實際上IsDisplayOnDesktop()在我的程序中一直是false的,但是顯示屏幕一直在電腦上同步著


如果哪裡有不對的地方請指出~
如果有誰知道這個問題的解決方法的話,請幫助我一下,不勝感激

检举 回应

HTC Vive2016-8-8 16:01

您好,我们也将请开发人员协助回复。

未来,我们醒着作梦。
检举 回应

一般用户

等级1

路过旅人

James2016-8-11 17:44

1.
以目前的Unreal和Unity的SDK设计,还不能避免你说的情况。也就是说,启动一个Vive程序时需要关闭之前的Vive程序才行(会向之前的Vive程序发送"Quit"消息)。这么做是因为目前OpenVR只接受一个程序的连接,而引擎方面又没有实现断开连接的方法,只能通过关闭程序来断开连接。这个问题在以后的引擎更新中会解决。

目前的解决的办法是启动App B的时候关闭App A,当要退出App B时再重新启动App A。如果这么做会丢失在App A中的一些状态,可以用文件存储App A的状态(比如之前在哪个场景,现在的分数等等,只要是对你的程序重要的状态)。

2. CaptureInputFocus目前没有用,因为OpenVR只接受一个程序的连接,没有办法在两个程序间切换输入焦点。

3. SetDisplayVisibility(bool)是用来切换Vive的显示机制的(并不是用来禁用PC屏幕上的显示),true是extended display,false是direct mode。它们的区别是extended display下Vive会被电脑识别成额外的显示器,然后把VR程序的窗口会被放到这个显示器里;direct mode下Vive就不是显示器了,而是由显卡驱动直接把画面输入到Vive里。这个设置一般是在SteamVR设置的开发者选项里改(默认值是direct mode)。同样的,IsDisplayOnDesktop也是用来判断是否是extended mode的,和你想做的功能不一样。

欢迎大家邮件联系我: james_xiong@htc.com
检举 回应