Skip to main content
 首页 » 资源教程 » Unity3D教程

教你如何开发VR游戏系列教程五:UI 交互

2016年09月06日 19:32:179610

上一篇介绍了ugui/NGUI/以及普通3D模型的UI设计。这一讲主要介绍怎么样利用这些UI做交互。

大家在VR游戏看到的UI以及UI交互,主要有哪几种?

1、头控悬停(视选)

2、蓝牙手柄

3、利用AR技术

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第1张

1、触摸控制

在UGUI中,按钮的的事件容易处理,直接这里设置对应的方法。

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第2张

那么有时候有的同学需要使用Image怎么办?这里就以Image的选择为例。

首先创建Canvas和Image,并选择一个Sprite。

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第3张

然后给Image添加脚本Event Trigger.

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第4张

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第5张

再添加新的Event Type。这里我选择使用鼠标的Pointer Click.

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第6张

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第7张

最后新建一个脚本,Control.cs,如下:


using UnityEngine;
using System.Collections;
    
public class Control : MonoBehaviour {
    
        // Use this for initialization
        void Start () {
           
       }
           
        // Update is called once per frame
        void Update () {
           
       }
    
    public void PointClicked() {
        Debug.Log( "---> PointClicked");
    }
}




将脚本绑在VRCameras下,再设置Image的Event Type.

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第8张

测试结果:

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第9张

完成。

2、视选控制

3D模型,主要就是射线+碰撞。主要代码如下,将该代码绑定到VRCameras下:

using UnityEngine;
using System.Collections;
      
public class UIControl3D : MonoBehaviour {
    public Camera myCamera;
    private float time = 0;
      
    public MeshRenderer target_on;
    public MeshRenderer target_off;
    public ParticleSystem myExplosion;
      
    // Use this for initialization
    void Start () {
             
       }
             
        // Update is called once per frame
        void Update () {
        CheckTargeted();
       }
    
    
    void CheckTargeted()
    {
        // 分屏,宽度在1/2屏幕居中
        Ray ray = myCamera.ScreenPointToRay( new Vector3( Screen.width / 4, Screen.height / 2));
        RaycastHit hits;
        // 发出射线
        if ( Physics.Raycast(ray, out hits, 5000))
        {
            Debug.Log(hits.collider.name);
     
            if (hits.collider.name == "Cube")
            {
                time += 1 * Time.deltaTime;
     
                target_on.enabled = true;
                target_off.enabled = false;
     
                if (time >= 1.5f)
                {
                    this.myExplosion.Play();
                    time += Time.deltaTime;
                }
                if (time >= 2)
                {
                    time = 0;
                    this.myExplosion.Stop();
                }
            }
        }
        else
        // 重置场景
            time = 0;
            target_on.enabled = false;
            target_off.enabled = true;
        }
    }

}


最后效果如下:


教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第10张

教你如何开发VR游戏系列教程五:UI 交互 Unity3D教程 第11张



评论列表暂无评论
发表评论