用Unity开发HTC VIVE——移动漫游篇
这篇文章主要写的是通过手柄控制移动在场景中漫游。
在通过手柄控制移动时,我主要写了两个脚本一个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——移动漫游篇的更多相关文章
- 用Unity开发HTC VIVE——手柄控制篇
写这篇文章的原因主要是因为现在虚拟现实非常的火爆但目前主流的虚拟现实设备(HTC VIVE)的教程却少的可怜,这个我深有体会.所以,我想将我平时开发中遇到的问题以及解决方法记录下来,分享给大家,若其中 ...
- 用 Unity 和 HTC Vive 实现高级 VR 机制(1)
原文:Advanced VR Mechanics With Unity and the HTC Vive Part 1 作者:Eric Van de Kerckhove 译者:kmyhy VR 从来没 ...
- Unity的HTC VIVE SDK研究(手柄按键功能的研究,比较详细)
http://blog.csdn.net/ystistheking/article/details/51553237 想交流的朋友我们可以微博互粉,我的微博黑石铸造厂厂长 ,缺粉丝啊 .....求粉求 ...
- Unreal开发HTC Vive程序,开启VR编辑模式
新建项目模板有个VirtualReality 调试的时候,Play按钮下拉有个VR Preview 打开VR模式,在我现在用的4.15.0版本,VR编辑模式还是预览功能,可以在“编辑器偏好设置”-“试 ...
- HTC vive VR设备软硬件安装+运行unity开发的VR程序
总结在HTC vive VR开发过程中的HTC vive的安装调试 1.首先确保电脑的配置满足要求: 进入官网,测试电脑是否满足要求 链接:https://www.vive.com/us/produc ...
- Unity 5.4大赞:HTC Vive经典The lab渲染器开源
HTC Vive提供了一个不错的免费VR demo,最近1周仔细体验了一番. 仔细看了其安装文件,竟然是Unity 5.4beta版本(通过查log,知道Valve公司用的是最新的5.4.0b11版本 ...
- Unity正式发布首个“实验性”VR编辑器,支持HTC Vive和Oculus Rift
Unity今天正式推出"实验性"VR编辑器.据悉,EditorVR是Unity游戏引擎中的一个组件,可让开发者在虚拟现实环境中开发游戏.为何要称之为"实验性"? ...
- unity htc vive使用
本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲 ...
- Unity 3D游戏开发学习路线(方法篇)
Unity 3D本来是由德国的一些苹果粉丝开发的一款游戏引擎,一直只能用于Mac平台,所以一直不被业外人士所知晓.但是后来也推出了2.5版,同时发布了PC版本,并将其发布方向拓展到手持移动设备.Uni ...
随机推荐
- 透过现象看现象(SQL501N错误处理)
某日一直运行比较正常的报表系统,突然报存储过程执行失败,查看DB2 错误返回码为sql501n,查看此错误原因如下: [db2inst1@limt ~]$ db2 ? sql501n SQL0501N ...
- 关于transition回调函数的几种写法
平时工作中经常遇到需要transition动画结束后触发某个功能的问题,但是在映像中好像只见过animate的回调函数, 而transition的很多属性无法在animate中使用,经过一些总结归纳, ...
- BZOJ2190: [SDOI2008]仪仗队
Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是 ...
- Bouncy Castle内存溢出
现象: 堆内存溢出,java.lang.OutOfMemoryError: Java heap space 用jmap查看,显示 num #instances #bytes ...
- $.ajax等相关用法
下面是jquery一些方法的相关用法: $.ajax: $.ajax({ type: "GET", url: "url", data: {username:$( ...
- 记录load data infile 的用法
load data local infile 'd:/1.txt' into table tcm.wm_dis_category fields terminated by';' lines termi ...
- query 的list()和iterator()区别
区别: 1.返回的类型不一样,list返回List,iterate返回iterator. 2.查询策略不同.(获取数据的方式不一样,list会直接查询数据库,iterate会先到数据库中获取id,然后 ...
- zk label控件内容换行
Label控件本身无法换行,不过div却可以,只要设置了div的宽度,那么就想如果在Label控件外套个div会怎样,结果可喜可乐: <div width="80px"> ...
- NGUI之Slider,最简单的方法做进度条。
既然标题是最简单的,那么很多东西就不需要我们自己做了,使用的是NGUI的示例,只针对初学者,接下来让我们来做一个最简单游戏设置里的声音控制. 1.导入NGUI: 2.找到NGUI的Menu示例Demo ...
- jquery_简单介绍
jquery是一个优秀的javascript的库. jquery对象是通过jquery包装DOM对象产生的对象 配置jquery 在<head> <script src=&quo ...