SteamVR2.0 UGUI交互问题 三

上一篇文章说这时就会如何使用SteamVR 2.0的交互UGUI 。

很抱歉,仍然为解决,已经有了思路,验证中。不过看UGUI的源码好头大。

 

大概3、4个月之前,我就已经有这个问题了。不过没有方向。

最近半个月才找到方向,公司瞎忙没时间学。自己一个人看不下去,我太难了。

通过各种方式,我来找解决2.0  与UGUI 的交互方案。

UI加碰撞器❓ 

不可取!按钮还凑合,滚动条、滚动视图没法交互。

且 UI加碰撞器后,每次创建ui,都要调整一边,甚至ui大小变换后,也要调整一次 ,绝对不是这样的做法。

 

以下插件统统不支持2.0以后的版本

 

VRTK ❓

很抱歉来自官方解释,不能用

SteamVR2.0 UGUI交互问题 三_第1张图片

商店其他的插件

插件使用低版本的SteamVR 用不了,坑了我了几百块(付费插件)阿西吧,不过给了很大方向。

SteamVR2.0 UGUI交互问题 三_第2张图片

 

VIVE Input Utility

SteamVR2.0 UGUI交互问题 三_第3张图片

 

同样使用了低版本的SteamVR 用不了,(偷偷评论一下)

SteamVR2.0 UGUI交互问题 三_第4张图片

 

 

分析问题:

为什么vr 无法交互ugui,

输入方式不同:  手柄,鼠标键盘。

检测方式不同:手柄射线检测,Camera.ScreenToViewportPoint(mousePosition)

 

 

网上搜索了一些 ugui的底层博客,学了下。

当我们创建任意一个UI元素时,unity都会自动创建一个 Canvs,与EventSystem 游戏对象

SteamVR2.0 UGUI交互问题 三_第5张图片

 

同时挂载了,UGUI的脚本。

Canvas 对象   

Canvas  

Canvas Scaler 

GraphicRaycaster

 

SteamVR2.0 UGUI交互问题 三_第6张图片

 

 

EventSystem 对象

EventSytem 

StandaloneInputModule

BaseInput(这个需要运行时才会被挂载)   

SteamVR2.0 UGUI交互问题 三_第7张图片

 

每一个都有其各自的作用。

简易介绍。

EventSystem 更新输入、射线检测模块。

GraphicRaycast  检测图形,是否在ui元素上。

StandaloneInputModule   PC、安卓、输入设备管理   分发接口事件IPointerEnterHandler等。

其实还有一个 TouchInputModule ,用来管理安卓的输入。  不过现在已经被整合到一起了。

SteamVR2.0 UGUI交互问题 三_第8张图片

 

上边介绍了很多。

既然UGUI的功能了解。 VR 交互与PC交互有不同、共同点。修改源代码就可以。

通过阅读商店找的插件以及UGUI内核源码。

Unity在做UGUI时,已经为开发者预留了接口 类,用来拓展自己的功能。

继承射线检测、输入检测自定义就可以。

BaseInput也得改。

继续挖坑,下篇文章介绍UGUI 底层的知识

 

链接

https://github.com/ExtendRealityLtd/VRTK.Documentation

VR GUI Input Module for Unity (HTC Vive) - wacki http://wacki.me/blog/2016/06/vr-gui-input-module-for-unity-htc-vive/

https://www.jianshu.com/p/b21278807514

wacki/Unity-VRInputModule https://github.com/wacki/Unity-VRInputModule

 

时间:2020年6月1日10点13分

VR可以交互UI了,虽然代码不完善

 

 

你可能感兴趣的:(Unity3D)