通过 Unity 在 Hololens 中实现 UGUI-ScrollView

鉴于网上部分文章,缺少部分细节,本文旨在结合以往中英文博客,总结出在Hololens 中实现 Unity-UGUI, 尤其是ScrollView的方法,以及避开某些坑的注意事项。

前提:由于MRTK兵不成熟,因此本文依然采用 HoloToolkit-Unity-2017.4.3.0-Refresh.unitypackage 作为SDK(即MRTK 4.3.0)。

 

在纯净崭新工程中:

1.场景中创建UI==> ScrollView,此时应有Canvas及其子物体ScrollView,以及EventSystem。

2.删除场景原配Camera。从包中导入InputManager,HololensCamera,Cursor,并将Cursor绑定到InputManager的固定位置上。

3.在 BuildSettings 里选中 UWP平台,并且选中Virtual Reality Support设置,此时系统将会自动向工程导入一些脚本和组件。

 

关键的坑人步骤:

将Canvas组件下的Render Mode修改为World Space,此时系统弹出选择:是否采用UIRaycastCamera作为Canvas的对应相机——该相机是InputManager下EventSystem的子物体,对没错你的工程有两个EventSystem——你的选择会导致两个分支:

① 选择“否”——交互以手为主:

   4 保留第一步创建的EventSystem,将HololensCamera作为Canvas在World Space下的对应相机,同时在Canvas上添加BoxCollider,必须是3D碰撞体。

   5 在你的EventSystem上添加 HololensInput Module.cs 和HololensInput.cs  两个组件,这两个组件只有在VR support启用时才会导入工程,之前是没有的。

    发布后进入你的demo,当视点注视在滑动条上,你的手就能够拖拽滑动条,完成。

② 选择”是“——交互以注视点为主:

    你第一步创建的EventSystem已经没有用了。

    发布后进入你的demo,你会发现你的视点宛如一个时刻点击的鼠标左键,变成用视点拖动滑动条,交互效果奇葩,有特殊需求的可以尝试。如果没有反应,碰撞体和那两个HololensInput的组件,自己酌情添加一下,笔者实在不想在尝试了。

 

此外,Demo中的ScrollView需要调整大小来适应World Space,此时可以按照这篇文章的建议,采取一些小技巧:

     调整Canvas的Scale,尽量避免调整ScrollView的大小,因为ScrollView下的Viewport有一些不可调参数,如果强行减小ScrollView的物理尺寸,视觉效果十分感人。

     将Canvas下的 Canvas Scaler 的 Dynamic Pixels Per Unit 项目设置为 10,有助于在WorldSpace模式下看清楚字。

你可能感兴趣的:(Unity,UGUI,Hololens)