Unity.VR.05之3D凝视进度条的实现
来源:互联网 发布:nosql和sql有什么不同 编辑:程序博客网 时间:2024/04/29 11:06
【学习项目为Unity官方的VR Smaples,可以在Asset Store下载】
【参考官方学习教程Unity.learn.Virtual Reality】
VR Smaples中的凝视环可以加强玩家的交互体验并防止玩家的误操作,通过UGUI中的Image和Slider的组件就可以轻松实现。但在VR游戏之中,我们有时候会需要一些3D网格对象制作的滑动进度条,这个时候应该怎么做呢?VR Smaples中的SelectionSlider脚本给出了答案。
private void HandleDown () { if (m_GazeOver) m_FillBarRoutine = StartCoroutine(FillBar()); } private void HandleUp () { if(m_FillBarRoutine != null) StopCoroutine (m_FillBarRoutine); m_Timer = 0f; SetSliderValue(0f); }
HandleDown()方法:按下键,如果凝视该对象的话,则开启协程FillBar();
HandleUp()方法:放开键,如果协程FillBar()还在执行,则终止该协程,将填充进度记时和滑动条填充值清零;
相应的HandleOver()及HandleOut()则根据凝视与否做出了播放声音和停止填充的动作。
private void OnEnable () { m_VRInput.OnDown += HandleDown; m_VRInput.OnUp += HandleUp; m_InteractiveItem.OnOver += HandleOver; m_InteractiveItem.OnOut += HandleOut; }
通过输入的脚本VRInput来订阅按下键和放开键的相关方法;
通过交互对象关联的脚本InteractiveItem来订阅凝视和停止凝视的相关方法。
private IEnumerator FillBar () { m_Timer = 0f; float fillTime = m_SelectionRadial != null ? m_SelectionRadial.SelectionDuration : m_Duration; while (m_Timer < fillTime) { m_Timer += Time.deltaTime; SetSliderValue(m_Timer / fillTime); yield return null; if (m_GazeOver) continue; m_Timer = 0f; SetSliderValue (0f); yield break; } m_BarFilled = true; if (OnBarFilled != null) OnBarFilled (); m_Audio.clip = m_OnFilledClip; m_Audio.Play(); if (m_DisableOnBarFill) enabled = false; }
上面则是填充进度条的FillBar协程,通过一个限定时间的while循环,在2秒内执行进度条填充的动作;
m_Timer/fillTime 记录的是进度条的填充进度,当值为1时,跳出while循环,且进度条填充完成。
进度条填充的具体动作则是由SetSliderValue()方法来显示的。
private void SetSliderValue (float sliderValue) { // If there is a slider component set it's value to the given slider value. if (m_Slider) m_Slider.value = sliderValue; // If there is a renderer set the shader's property to the given slider value. if(m_Renderer) m_Renderer.sharedMaterial.SetFloat (k_SliderMaterialPropertyName, sliderValue); }
m_Slieder如果引用了UI对象的Slider组件的话,则可以通过Slider中的value控件直接赋值,完成进度条的填充;
private const string k_SliderMaterialPropertyName = "_SliderValue";
col = lerp(colfill, col, step(_SliderValue, i.uv.x)); //所用材质中的Shader
m_Renderer如果引用了网格对象的Mesh Renderer组件的话,则通过Mesh Renderer的材质控件的SetFloat方法,找到使用材质的Shader脚本中的变量_SliderValue进行赋值,这样就完成了一个网格对象的凝视进度条。
0 0
- Unity.VR.05之3D凝视进度条的实现
- Unity 立体3D VR的实现
- Unity中Oculus VR的UI凝视交互
- Unity使用Cardboard、MojingSDK等VR插件的3DUI(UGUI)凝视效果的实现(V客学院知识分享)
- Unity.VR.02凝视点(准心)及其交互
- unity实现3d摇杆 结合leapmotion控制实现VR场景移动
- Unity下Gear VR界面的实现
- 【反射】Unity 3D 用于平面反射的动态克隆反射(支持VR设备)
- 【VR开发】htc vive+unity 3D 简单保龄球游戏
- (四)Hololens Unity 开发之 凝视系统
- (四)Hololens Unity 开发之 凝视系统
- unity实现3D饼图
- Unity 3D 存档实现
- Unity 3d 实现倒计时
- unity之进度条
- unity学习之进度条
- 使用HTC和Steam VR进行unity VR的开发第二步 (实现功能)
- 暴风魔镜VR项目实战(凝视)
- 欢迎使用CSDN-markdown编辑器
- 第5次实验报告
- undefined is not an object (evaluating 'dataSource.rowIdentities')
- 单链表的实现及其操作
- 题目1441:人见人爱 A ^ B
- Unity.VR.05之3D凝视进度条的实现
- 刷新ListView
- Linux基础学习笔记之操作系统(Operating System)
- SEO 页面优化
- SQLServer出现连接异常
- Android中的各种访问权限Permission含义
- spark厦大----基本的统计工具(1)
- HANA基本概念
- 多层json文件解析list取值。