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
- Unity.VR.04MainMenu场景的交互
- Unity.VR.01简单交互
- Unity中Oculus VR的UI凝视交互
- HTCVive VR开发场景事件交互指南
- HTCVive VR开发场景事件交互指南
- 如何在VR场景中位移与行走Unity VRTK - SteamVR Unity Toolkit针对VR开发的工具包
- Unity VR开发--场景跳转崩溃
- Unity Editor VR告诉你,建立VR场景很简单
- Unity VR游戏开发干货教程:VR中的交互方式
- Unity VR游戏开发干货教程:VR中的交互方式
- unity中结合oculus制作VR场景控制相机的移动的三种方式
- VR之Unity 开发Pico测试之UI和Object的交互
- MainMenu的Merge使用
- MainMenu的用法
- steam vr 手柄的交互
- MainMenu
- Unity对于VR的支持
- Unity.VR.03之360度场景背景搭建
- confluence配置开发,开发API
- interfaces
- JAVA中的堆内存和栈内存
- Objective-C如何自己实现一个基于数组下标的属性访问模式
- 数据类型
- Unity.VR.04MainMenu场景的交互
- 设计模式 代理模式(Proxy)
- 关于对瀑布流布局的思考
- C/C++ 判断文件夹是否存在以及创建、删除文件夹 windows以及linux通用
- Spring
- PL/SQL Developer(解压版)连接64位的Oracle11g
- leetcode上的回溯法总结
- C#实现冒泡排序之对泛型排序
- Java学习笔记_08