如何在HTC Vive中创建UI界面

1 篇文章 0 订阅
1 篇文章 0 订阅

无论是游戏,还是虚拟现实等,都不可能缺少UI界面的制作,对于界面我们可以分为两种UI界面,一种是能够跟随VR头盔移动的UI,另一种为不跟随头盔移动的UI,也就是将UI看作三给空间中的游戏对象。下面将带领大家通过UGUI来制作界面.

UGUI的Canvas画布的RenderMode具有三种模式:
这里写图片描述

  • Screen Space – overlay
    此模式不需要UI摄像机,UI将永远出现在所有摄像机的最前面,如果我想在UI前面显显示一个模型或游戏对象就不行了,VR的界面不能采用些种方式。

  • Screen Space- Camera
    此模式是我决定采取的,它需要提供一个Camera用于渲染UI界面,这种方法和NGUI的原理有些像,这种形式我可以在UI界面与摄像机中间放置一些游戏对象,可以通过设定渲染摄像机,使UI跟随头盔进行移动。

  • World Space
    这个就是完全3D的UI,整个Canvas画布被认定为是一个3D空间中的游戏对象,与创建的Cube或其它预设游戏对象一样,此模式用于创建不跟随头盔移动的UI界面。

UI界面的制作

跟随头盔移动的UI界面

若要实现此模式,需要将Canvas的Render Mode选择为ScreenSpace-Camera。

这里写图片描述

设置后,摄像机的效果如下图:

这里写图片描述

当我们移动头盔时,由于UI是由头盔的摄像头渲染的,所以会跟随头盔移动。

不跟随头盔移动的UI界面

若要实现此模式,需要将Canvas的Render Mode选择为World Space。
我们只需要将Canvas中的调整为合适大小,和其它游戏对象一样,调整合适位置即可。

UI的交互方式

UI的交互方式,需要通过射线与碰撞器的结合来实现,整个实现的思路类似于NGUI元素的碰撞检测。
通过手柄发出射线,当射线碰撞到UI元素后,添加上相同大小的碰撞器,再结合手柄的Trigger键来决定相应的操作。

 SteamVR_Controller.Device device;
 Linerender line;
 void Start(){
   SteamVR_TrackedObject trackObj=this.GetComponent<SteamVR_TrackedObject>();
   device=SteamVR_Controller.Input((int)trackObj.index);
   line=this.AddComponent<Linerender>();
 }
 //通过Linerender绘制射线
 void Update(){
    //创建Ray
    Ray ray=new Ray(this.transform.position,this.transform.forward.normalized*1000);
    //设定线顶点数
    line.SetVertextCount(2);
    //按下扳机键发出射线,在通过射线所碰撞的UI名称来区分按钮(每个按钮都需要添加Collider)
    if(device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger){
        RaycastHit hitInfo;
        if(Physic.Raycast(ray,out hitInfo)){
           //在此处处理

        }
    }
 }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值