这篇文章主要写的是通过手柄控制移动在场景中漫游。
在通过手柄控制移动时,我主要写了两个脚本一个ChildTransform.cs、Move.cs;
1、 ChildTransform这个脚本主要是为了获取头部Y轴方向的转动。以及头部在x、z轴方向的移动。将这个信息赋值给这个脚本绑定的对象身上。
2、 Move这个脚本主要是为了控制玩家的移动的,移动的方向是依据绑定ChildTransform这个脚本的transform信息。
这样就能实现,头盔转动控制移动的方向,手柄中touchPad的上、下、左、右控制移动的向前、向左、向右、向后移动。
操作步骤:
1、 首先我们需要先创建一个空对象,命名为moveDic。
2、 然后将脚本ChildTransform绑定在moveDic上。
3、 将Camera(head)赋值给ChildTransform的Same变量。
这个就能将Camera(head)的方向信息赋值给moveDic。
脚本
Movie.cs 有3个公共变量:
1、 Player:将 [Camera Rig]赋值给它。
2、 Dic:将moveDic赋值给它。

3、 Speed:主要是控制移动的速度。

脚本ChildTransform.cs:

using UnityEngine;
using System.Collections;

public class ChildTransform : MonoBehaviour
{

    public Transform same;

	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void FixedUpdate () {

        transform.localEulerAngles = new Vector3(0,same.localEulerAngles.y,0);

        transform.localPosition = new Vector3(same.localPosition.x, 0, same.localPosition.z);
	}
}

脚本Move.cs:

using UnityEngine;
using System.Collections;

public class Move : BaseClass
{
    /// <summary>
    /// 手柄位置
    /// </summary>
    SteamVR_TrackedObject tracked;

    /// <summary>
    /// 玩家
    /// </summary>
    public Transform player;

    /// <summary>
    /// 方向
    /// </summary>
    public Transform dic;

    /// <summary>
    /// 速度
    /// </summary>
    public float speed;

    void Awake()
    {
        //获取手柄控制
        tracked = GetComponent<SteamVR_TrackedObject>();

    }

	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void FixedUpdate () {
        var deviceright = SteamVR_Controller.Input((int)tracked.index);

        //按下圆盘键
        if (deviceright.GetPress(SteamVR_Controller.ButtonMask.Touchpad))
        {

            Vector2 cc = deviceright.GetAxis();

            float angle = VectorAngle(new Vector2(1, 0), cc);

            //下
            if (angle > 45 && angle < 135)
            {

                player.Translate(-dic.forward * Time.deltaTime * speed);
            }
            //上
            else if (angle < -45 && angle > -135)
            {
                //Debug.Log("上");
                player.Translate(dic.forward * Time.deltaTime * speed);
            }
            //左
            else if ((angle < 180 && angle > 135) || (angle < -135 && angle > -180))
            {
                //Debug.Log("左");
                player.Translate(-dic.right * Time.deltaTime * speed);
            }
            //右
            else if ((angle > 0 && angle < 45) || (angle > -45 && angle < 0))
            {
                //Debug.Log("右");
                player.Translate(dic.right * Time.deltaTime * speed);
            }

        }
	}

    /// <summary>
    /// 根据在圆盘才按下的位置,返回一个角度值
    /// </summary>
    /// <param name="from"></param>
    /// <param name="to"></param>
    /// <returns></returns>
    float VectorAngle(Vector2 from, Vector2 to)
    {
        float angle;
        Vector3 cross = Vector3.Cross(from, to);
        angle = Vector2.Angle(from, to);
        return cross.z > 0 ? -angle : angle;
    }

}

Move脚本主要是根据

deviceright.GetAxis()获取在TouchPad中按下的位置信息,然后与(0,1)点求夹角。然后根据这个角度来判断在按下是TouchPad的上、下、左、右。
其实TouchPad就相当于一个半径为1的圆(单位圆)。而<span style="font-family: Arial, Helvetica, sans-serif;">GetAxis(),就是单位圆中点的坐标。</span>
转载自:http://www.52vr.com/article-390-1.html

用Unity开发HTC VIVE——移动漫游篇的更多相关文章

  1. 用Unity开发HTC VIVE——手柄控制篇

    写这篇文章的原因主要是因为现在虚拟现实非常的火爆但目前主流的虚拟现实设备(HTC VIVE)的教程却少的可怜,这个我深有体会.所以,我想将我平时开发中遇到的问题以及解决方法记录下来,分享给大家,若其中 ...

  2. 用 Unity 和 HTC Vive 实现高级 VR 机制(1)

    原文:Advanced VR Mechanics With Unity and the HTC Vive Part 1 作者:Eric Van de Kerckhove 译者:kmyhy VR 从来没 ...

  3. Unity的HTC VIVE SDK研究(手柄按键功能的研究,比较详细)

    http://blog.csdn.net/ystistheking/article/details/51553237 想交流的朋友我们可以微博互粉,我的微博黑石铸造厂厂长 ,缺粉丝啊 .....求粉求 ...

  4. Unreal开发HTC Vive程序,开启VR编辑模式

    新建项目模板有个VirtualReality 调试的时候,Play按钮下拉有个VR Preview 打开VR模式,在我现在用的4.15.0版本,VR编辑模式还是预览功能,可以在“编辑器偏好设置”-“试 ...

  5. HTC vive VR设备软硬件安装+运行unity开发的VR程序

    总结在HTC vive VR开发过程中的HTC vive的安装调试 1.首先确保电脑的配置满足要求: 进入官网,测试电脑是否满足要求 链接:https://www.vive.com/us/produc ...

  6. Unity 5.4大赞:HTC Vive经典The lab渲染器开源

    HTC Vive提供了一个不错的免费VR demo,最近1周仔细体验了一番. 仔细看了其安装文件,竟然是Unity 5.4beta版本(通过查log,知道Valve公司用的是最新的5.4.0b11版本 ...

  7. Unity正式发布首个“实验性”VR编辑器,支持HTC Vive和Oculus Rift

    Unity今天正式推出"实验性"VR编辑器.据悉,EditorVR是Unity游戏引擎中的一个组件,可让开发者在虚拟现实环境中开发游戏.为何要称之为"实验性"? ...

  8. unity htc vive使用

    本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲 ...

  9. Unity 3D游戏开发学习路线(方法篇)

    Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.Uni ...

随机推荐

  1. 【BZOJ】3916: [Baltic2014]friends

    http://www.lydsy.com/JudgeOnline/problem.php?id=3916 #include <bits/stdc++.h> using namespace ...

  2. 【poj2828】Buy Tickets

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  3. Android -- 简单广播接收与发送(1)

    1. 效果图

  4. CentOS安装开发组相关的包

    yum groupinstall "Development Tools"   yum groupremove "Development Tools"

  5. thinkphp多模板布局设置!!

    首先开启模板布局要在配置文件添加: 'LAYOUT_ON'=>true, 'LAYOUT_NAME'=>'layout', 如果需要设置多个布局模板,就要先关闭上面的LAYOUT_ON,也 ...

  6. Google Analytics统计代码GA.JS中文教程

    2010-12-06 11:07:08|  分类: java编程 |  标签:google  analytics  ga  js  代码  |举报|字号 订阅     Google Analytics ...

  7. $_POST 变量以及$GLOBALS['HTTP_RAW_POST_DATA']

    $_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值. $_POST 变量用于收集来自 method="post" 的表单中的值.从带有 POST 方 ...

  8. ob_clean()

    我在本地写的系统,部署到虚拟机上的时候,验证码出现问题不显示.加上这个函数之后,验证码出现了.具体的该学习去了.

  9. C# 文件和文件夹操作

    一.文件操作 1.File类的常用静态方法: void AppendAllText(string path, string contents),将文本contents附加到文件path中 bool E ...

  10. 对Oracle10g rac ons服务的一些理解

    1.什么是ONS ONS(Oracle Notification Service)是Oracle Clusterware 实现FAN Event Push模型的基础.     在传统模型中,客户端需要 ...