美文网首页VR相关VR
VR开发--Cardboard项目二:UI界面制作

VR开发--Cardboard项目二:UI界面制作

作者: 元宇宙协会 | 来源:发表于2016-12-28 10:47 被阅读243次

    千里之行,始于足下,只有掌握UGUI才能更好的运用.

    效果图

    项目二:制作VR的UI界面(包括血条制作,介绍界面,包裹界面等)

    1-UI展示位置

    我们的UI界面一般贴在我们的屏幕上.但是VR中,因为有了空间的概念,所以需要将我们UI改成世界坐标,通过代码来控制它.

    第一步:做成VR视野


    Paste_Image.png

    第二步:查看内部头位置

    Paste_Image.png

    第三步:制作画布搞UI

    Paste_Image.png

    做完这一步,可以往里面填充UI元素

    2-代码控制

    Paste_Image.png
    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    [RequireComponent(typeof(Collider))]
    public class VR_Test : MonoBehaviour {
    
        // 开始位置
        private Vector3 startingPosition;
        public Text textV;
        void Start()
        {
            //获得当前位置
            startingPosition = transform.localPosition;
            //设置为false关闭线
            SetGazedAt(false);
        }
        private void Update()
        {
            textV.text = "当前的帧率是:" + 1 / Time.deltaTime;
            // 如果是安卓手机就让屏幕常亮
            if (Application.platform == RuntimePlatform.Android)
            {
                Screen.sleepTimeout = SleepTimeout.NeverSleep;
            }     
        }
    
        void LateUpdate()
        {
            // 更新SDK状态
            Cardboard.SDK.UpdateState();
            // 如果按下返回按钮
            if (Cardboard.SDK.BackButtonPressed)
            {
                Application.Quit(); // 退出程序
            }
        }
    
        // 设置物体的颜色根据bool值
        public void SetGazedAt(bool gazedAt)
        {
            GetComponent<Renderer>().material.color = gazedAt ? Color.green : Color.red;
        }
    
        public void Reset()
        {
            transform.localPosition = startingPosition;
        }
        // 切换VR模式
        public void ToggleVRMode()
        {
            Cardboard.SDK.VRModeEnabled = !Cardboard.SDK.VRModeEnabled;
        }
        // 将方块位置设置为随机位置
        // 这个方法的调用者:Cardboard.SDK.Trigger && isLookedAt调用
        public void TeleportRandomly()
        {
            // 返回一个半径为1的球体在表面上的一个随机点
            Vector3 direction = Random.onUnitSphere;
            // 限制Value在min与max之间,
            direction.y = Mathf.Clamp(direction.y, 0.5f, 1f);
            // 返回一个随机数,在0,0 - 1.0之间
            float distance = 2 * Random.value + 1.5f;
            // 位置在半径为1.5`3.5的球面上的随机值
            transform.localPosition = direction * distance;
        }
    }
    

    3-最终效果

    我们的UI始终在屏幕上,而且不管视野转向哪里,都会保持一致.


    UI效果图.gif

    相关文章

      网友评论

      • 建仁陈:潮哥发现一个问题啊,EventSystem上不添加Gaze Input Module是不触发事件的~
      • 3145a856d5ed:这个UI位置固定在视线内,不能使用注视交互,那要怎么进行这种UI的交互呢?求指教
        雨落随风:@zhoume 谷歌纸盒子好像可以使用NFC通信,就一个磁铁触发,但是这个UI既然这么放置,肯定就不是用于人机操控交互的嘛,一般用于显示信息撒
        3145a856d5ed:那就是说只能使用手指触控屏幕进行交互,从盒子中拿出手机?
        元宇宙协会:注释交互不行,你可以使用射线检测!

      本文标题:VR开发--Cardboard项目二:UI界面制作

      本文链接:https://www.haomeiwen.com/subject/bzkyvttx.html