Unity.VR.04MainMenu场景的交互

来源:互联网 发布:火星15洲际导弹 知乎 编辑:程序博客网 时间:2024/05/18 01:00
【学习项目为Unity官方的VR Smaples,可以在Asset Store下载】
【参考官方学习教程Unity.learn.Virtual Reality】

在VR Smaples中的主场景中,主要是一些空间UI元素,用来让玩家选择要进入的游戏。在VR游戏之中,我们要考虑到玩家的阅读视距,所以这种空间UI一般要放在离摄像机距离较近的地方,让玩家能够轻松阅览。

1.菜单的布置
VR Samples选择的是一种环形空间,在这种空间里面,将玩家置于中心点,那么看向各个方向的视距都会保持一致,这样放置空间UI的时候能够很轻松的达成整齐一致。
如果是一个方形空间,我们在其中放置一个平面的时候,使用一个矩形的平面就可以了;
而在一个环形空间中,放置一个矩形平面,会和周围的空间产生非常不协调的感觉,为了能够让空间UI能够贴合环形空间的曲面,我们也必须选择曲率和环面相同的曲面。

VR Samples中已经制作好了和空间背景曲率相同的UI素材,我们可以创建一些空对象,通过Mesh Filter组件来添加这些曲面网格,再Mesh Renderer组件添加相应的材质。
调整各个UI元素的Transform组件,把它们放到合适的位置,这样就完成了MainMenu场景的UI布置。

2.菜单选项的弹出
那么如何和场景中这些游戏选择项进行交互呢?当我们将准心移到相应的游戏选择项时,通过VRInteractiveItem脚本,我们可以通过这个对象的Colider组件获取到这个对象,发现可交互对象,这时候凝视环就会出现。
为了重点突出这个被凝视的选择项,我们可以为其添加一种放大显示的效果:
private void Start ()  {  m_StartPosition = m_Transform.position;  m_PoppedPosition = m_Transform.position - m_Transform.forward * m_PopDistance;  }private void Update ()  {  m_TargetPosition = m_Item.IsOver ? m_PoppedPosition : m_StartPosition;  m_Transform.position = Vector3.MoveTowards(m_Transform.position, m_TargetPosition, m_PopSpeed * Time.deltaTime);  }
通过m_Transform.forward减少UI对象和摄像机的距离,就可以使UI对象产生视觉放大的效果;
通过m_Item.IsOver(是否被凝视)来选择是否执行放大效果。

3.菜单选项动画播放
为了让玩家能够更直观的了解游戏的内容,VR Samples主菜单场景中,这些游戏选择项都一段简短的动画,当玩家凝视到某个游戏选择项时,它的动画也会马上开始播放,当视野移开的时候,该选择项的动画就会在当前帧停止。
m_ScreenMesh.material.mainTexture = m_AnimTextures[m_CurrentTextureIndex];             m_CurrentTextureIndex = (m_CurrentTextureIndex + 1) % m_AnimTextures.Length;
声明一个数组,引用动画的所有帧,当凝视到游戏选择项时,动画开始一帧一帧的顺序播放。

4.滑动的凝视进度条
为了增强玩家的交互体验,VR Smaples中增加了一个滑动的凝视进度条,当凝视到某个游戏选择项是,该滑动条会滑动到该选择项的下方;当按住选择键开始填充凝视环时,凝视进度条也会同步进行填充。

 void Update ()  {  m_TargetPosition = m_StartPosition;for (int i = 0; i < m_Items.Length; i++){if (!m_Items[i].IsOver)  continue;m_TargetRotation = m_Items[i].transform.rotation;m_TargetPosition = m_PoppedPosition;break;}  m_ChildTransform.localPosition = Vector3.MoveTowards (m_ChildTransform.localPosition, m_TargetPosition,  m_PopSpeed * Time.deltaTime);  m_ParentTransform.rotation = Quaternion.Slerp(m_ParentTransform.rotation, m_TargetRotation, m_MoveSpeed * Time.deltaTime);}
凝视到某个游戏选择项时,目标Rotation为该游戏选择项的Rotation,滑动条通过四元素的球形插值方法进行选择。
同时,也通过PopedPosition让滑动条弹出,和游戏选择项的弹出效果保持一致。
为了让凝视进度条在凝视环填充时也能同步进行填充,我们通过在各个游戏选择项都添加SelectionSlider脚本来实现。
凝视环使用UGUI中的Slider来实现这种填充,而凝视进度条是通过调用进度条ShaderUV脚本中的_SliderValue来完成的。

在虚拟游戏之中,更直观的交互能够给玩家带来更直接的操控感,上面介绍的这些凝视环、凝视进度条、选择项弹出等交互形式能够让玩家清晰地意识到自己在做什么,进而体验到一种掌控一切的感觉。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 清理手机不小心把照片删了怎么办 金牛不回微信我也不理他他会怎么办 华为手机微信文件自动删除怎么办 微信清理数据后不能登录了怎么办 k歌占内存又不想删除歌曲怎么办 把所有商品放在一起做链接怎么办 微信解冻短信验证总显示失败怎么办 淘金币能抵钱商家拿了淘金币怎么办 真实订单被系统判定虚假交易怎么办 淘宝买家号疑似虚假交易违规怎么办 货品交易一方收了定金违约了怎么办 饿了么店铺收到差评怎么办 淘宝顾客退款没成功给差评怎么办 身份证绑定了淘宝注册支付宝怎么办 把钱转错到支付宝账号被扣了怎么办 网上买东西收到信息被删掉了怎么办 表格在手机上显示不出来怎么办? 电子表格中复制后没有虚线框怎么办 word中页眉页脚横线短了怎么办 亿图图示画的图不显示怎么办 掌柜宝用了几天无法登录了怎么办 手机千牛消息不小心删除了怎么办 淘宝账号被冻结提示无法恢复怎么办 商家未发货我误点了确认收货怎么办 淘宝买货商家不发货也不退款怎么办 商家没发货点成收货了怎么办 淘宝新店上架产品未通过审核怎么办 安卓手机电池虚电怎么办_查查吧 拼多多拼单期间商家下架商品怎么办 微信绑别人的卡需要人脸认证怎么办 支付宝把钱转到了停用的账号怎么办 我注册征信账号忘记了要怎么办 客户说考虑考虑我该怎么办招商类 浴巾用久了黑黑的洗不干净怎么办 wifi密码被别人改了怎么办啊 苹果手机更新后账号密码忘了怎么办 专项预审批额度额度时效了怎么办 id密码和id码丢了怎么办 手机卡丢了id密码忘了怎么办 不想叫爱派登录我的微信怎么办 pr中素材与新建序列不匹配怎么办