HTCVive使用
1.设备的安装与配置 https://wenku.baidu.com/view/fa172fd7482fb4daa48d4b44.html?from=search
2.接入SDK、实现简单示例场景、更换手柄模型、实现手柄投掷功能
导入SteamVR Plugin.unitypackage
实现头盔观看功能
更换手柄模型
要点
把物体拖到model同级目录,坐标归零
在运行状态下调整模型的大小坐标和旋转值
复制组件value,然后取消运行,粘贴value到物体上
实现手柄投掷功能
按下trigger键在手柄上生成一个物体,松开trigger键投掷出去
3.手柄脚本讲解
手柄上各按键的输入
扳机键:trigger
菜单键(三横)menu:
侧边键(两个一样):grip
圆盘(可点可触摸):touchpad
using UnityEngine;
using System.Collections;
using Valve.VR;
using UnityEngine.iOS;
using System.Runtime.CompilerServices; public delegate void VRHandle(); public class VRInput : MonoBehaviour
{ SteamVR_TrackedObject trackedObject;//获取手柄对象
SteamVR_Controller.Device device;//定义手柄信息对象 public VRHandle onTrigger;
public VRHandle onTriggerDown;
public VRHandle onTriggerUp; void Start()
{
// 首先要获取响应按键的设备
trackedObject = GetComponent<SteamVR_TrackedObject>();
device = SteamVR_Controller.Input((int)trackedObject.index);
} Vector2 startPoint;
Vector2 endPoint;
//获取触摸偏移 ,旋转左手零件库,小部件什么的。
public float GetTouchPadDeltaPos(SteamVR_Controller.Device device)
{
if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis0))
{
endPoint = startPoint = device.GetAxis(EVRButtonId.k_EButton_SteamVR_Touchpad);
} //按下后滑动
if (device.GetTouch(SteamVR_Controller.ButtonMask.Axis0))
{ if ((device.GetAxis(EVRButtonId.k_EButton_SteamVR_Touchpad) - endPoint).sqrMagnitude > 0.01f)
{ startPoint = endPoint; endPoint = device.GetAxis(EVRButtonId.k_EButton_SteamVR_Touchpad); //Vector2 deltaVector = endPoint - startPoint;
//float deltaPosY = endPoint.y - startPoint.y; float deltaPosX = endPoint.x - startPoint.x; //使用delta
//device.TriggerHapticPulse (1000); // 用这个可以震动手柄
//target.Rotate (0, 0, deltaPosX * 100);
return deltaPosX;
}
}
return 0f;
} void Update()
{ // Press 和 Touch 除了圆盘,其他基本通用 Touch可以直接响应圆盘
// GetPressDown 和 GetTouchDown
// GetPress 和 GetTouch ___ 类似键盘的GetKey
// GetPressUp 和 GetTouchUp
//以下不全写了,没必要,就主要以GetTouch 试一下所有按钮 //按下圆盘 if (device.GetPress(SteamVR_Controller.ButtonMask.Touchpad))
{
//打印触摸的位置
print(device.GetAxis(EVRButtonId.k_EButton_SteamVR_Touchpad));
} // Trigger键
if (device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("我是手柄上的trigger键,保持按下状态");
if (onTrigger!=null) {
onTrigger ();
} } if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log("我是手柄上的trigger键,按下状态");
if (onTriggerDown!=null) {
onTriggerDown ();
} }
if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger))
{ Debug.Log("我是手柄上的trigger键,松开状态");
if (onTriggerUp!=null) {
onTriggerUp ();
}
} //触摸圆盘
if (device.GetTouch(SteamVR_Controller.ButtonMask.Touchpad))
{
Debug.Log("我是左手柄上的触摸屏,手指保持触摸状态");
} // 菜单键 (三横线)
if (device.GetTouch(SteamVR_Controller.ButtonMask.ApplicationMenu))
{
Debug.Log("我是手柄菜单键,保持按下状态");
} //手心键(随便取个名^^) 左右两边可以按但其实是一个键!
if (device.GetTouch(SteamVR_Controller.ButtonMask.Grip))
{
Debug.Log("我是左手柄左右侧按键,保持按下状态");
} // 这些键位都有了!! 好像还有个System键把!!能用吗? 经过短时间测试,不要用,没效果不说,容易导致其他的都不灵还要重新连接手柄!
//查看定义可以知道: public const ulong System= (1ul << (int)EVRButtonId.k_EButton_System); // reserved reserved了,reserved什么意思?保留! 不是留留给你的 ^ ^!
if (device.GetTouch(SteamVR_Controller.ButtonMask.System))
{
print("你看不见我!");
} //以下三个获取 追踪设备的姿态(矩阵等信息),按键的状态等等,请自行研究,欢迎回帖补充
device.GetPose();
device.GetState();
device.GetPrevState(); //还没完!继续
// vive 有个Trigger键,有一定键程,那么你按下这个trigger到什么程度会触发呢?
//经过测试,大概是 75%的样子!!(why?为什么要研究这个,有意义么? Of Course!)
// 因为 device.GetHairTrigger(), hairTrigger:一触即发的意思!就是说Trigger键你可以轻轻一碰就能触发!
if (device.GetHairTriggerDown())
{
print("看到我时,食指不要动,看你按到了多少?");
}
// 你肯定按了0.1,也就是10%的键程,我怎么知道?
//print("因为你按了:" + device.hairTriggerDelta);
// 那么,修改了hairTriggerDelta,是不是就修改了 一触即发的键程? √ //修改一触即发键程为一半,再按按试试看!
if (Input.GetKeyDown(KeyCode.A))
{
device.hairTriggerDelta = 0.5f;
} // 最后!
//Axis,轴
//经测试,Axis0对应的是圆盘SteamVR_Controller.ButtonMask.Touchpad ,都可以用
//Axis1,对应的是trigger键位!
// 在SteamVR_Controller.ButtonMask类里面定义了还有2,3,4Axis呢,它们对于啥呢?
//它们不对应啥,猜想一:这个是SteamVR!,又不是只给火腿肠vive专用,还有其他VR设备呢,如果其他设备手柄轴用的多呢?
// 二:Axis2,3,4能对应菜单键和手心键吗?no no no , 感受一下轴和按钮的区别就明白了,轴一般是范围值,button是yes or no; if (device.GetTouch(SteamVR_Controller.ButtonMask.Axis0))
{
Debug.Log("触摸盘");
}
if (device.GetTouch(SteamVR_Controller.ButtonMask.Axis1))
{
Debug.Log("trigger键");
}
if (device.GetTouch(SteamVR_Controller.ButtonMask.Axis2))
{ }
if (device.GetTouch(SteamVR_Controller.ButtonMask.Axis3))
{ }
if (device.GetTouch(SteamVR_Controller.ButtonMask.Axis4))
{ } } //把圆盘划成4个象限区域按钮,强行用圆盘变出一些按钮以防按钮不够用!
public enum TouchPadButton
{
Default,
UpLeft,
UpRight,
DowmLeft,
DownRight
} public TouchPadButton GetTouchButton()
{
TouchPadButton touchButton = TouchPadButton.Default;
var device = SteamVR_Controller.Input((int)trackedObject.index); if (device.GetPressDown(SteamVR_Controller.ButtonMask.Axis0))
{ Vector2 pad = device.GetAxis(EVRButtonId.k_EButton_SteamVR_Touchpad);
if (pad.x >= && pad.y >= )
{
touchButton = TouchPadButton.UpRight;
} if (pad.x >= && pad.y <= )
{
touchButton = TouchPadButton.DownRight;
} if (pad.x <= && pad.y >= )
{
touchButton = TouchPadButton.UpLeft;
} if (pad.x <= && pad.y <= )
{
touchButton = TouchPadButton.DowmLeft;
} }
return touchButton;
}
}
4.手柄圆盘键的自定义划分
将一个触摸板按照4象限划分成4个按键
通过坐标轴值来划分
将一个触摸板按照4象限旋转45度划分成4个按键
通过斜率值或角度来划分
5.UI交互
1.插件:Vive Input Utility.unitypackage 导入
2.文档
3DUI.docx
6.瞬移
1.插件:Vive - teleport.unitypackage 导入
2.使用文档
瞬移.docx
HTCVive使用的更多相关文章
- HTCVIVE定位器更新之后,定位器指示灯不亮,重置基站固件操作指南。
HTCVIVE定位器更新之后,定位器指示灯不亮,固件修复指南 建议您重置基站固件,操作如下:请您使用手机来拍照运行中基站的“激光发射器”面板,并且数一下是否有17颗LED灯,如果没有17颗,则基本可以 ...
- 惠普披甲过VR寒冬,花费巨资开发VR游戏
2016被称为VR元年,各大公司都在积极推动该领域的研究,其中HTC.0culus.索尼的成绩是最高的,不仅推出了自家研发的头显,而且销量还很可观.惠普在VR领域自然也有所投入,但是并没有比 ...
- 如何透过HTC Vive拍摄Mixed Reality (混合现实)影片
https://www.vive.com/cn/forum/1706?extra=page%3D1 也许你是一位开发者,想为自己的HTC Vive游戏制作酷炫的宣传片:或者你是游戏主播,想为观众带来高 ...
- VR定制 AR定制 就找北京动软VR开发团队(VR案例 AR案例)
我们长期承接丰交互软件.游戏项目外包: VR/AR内容应用定制.VR.AR游戏项目外包(有主流测试硬件设备) VR全景应用.视频外包 请提供贵公司的信息,我们将提供高大上的VR案例欢迎联系我们给您提供 ...
- HoloLens外包团队:HoloLens有一个严重缺陷,但微软并不想改
微软的HoloLens自公布以来,几乎获得了一边倒的赞美声.它使用了增强现实(AR)技术,在现实世界中叠加一层虚拟影像,能让人仿佛置身魔法世界.但从最新的Hololens硬件体验上看,它可能有一个致使 ...
- 承接Hololens游戏外包
近日,微软宣布第三批微软Hololens开发者版开始发货,包括:头显.头显手提包和一个遥控器.前两批开发者版本分别在今年3月30日和5月9日开始发货的. 第三批AR头显Hololens开发者版发货 虽 ...
- 承接Hololens内容定制外包
近日,微软宣布第三批微软Hololens开发者版开始发货,包括:头显.头显手提包和一个遥控器.前两批开发者版本分别在今年3月30日和5月9日开始发货的. 第三批AR头显Hololens开发者版发货 虽 ...
- 承接Unreal4外包虚幻外包,北京正规公司
VR产业链的现状 去年Facebook 20亿美元收购虚拟现实技术Oculus VR,提高了大家对VR设备.而国内,红杉资本投资蚁视,更是引爆了资本市场对VR/AR 的关注.其中有四块是我们较为常见且 ...
- VR软件定制外包团队:国内设备开发公司已超90家
昨日是UNITE 2015 BEIJING大会的第二天,相比于新手训练营和VR Day活动,昨天的大会更加注重分享和展示.Unity 创始人David Helgason在也大会上进行了Unity 5 ...
随机推荐
- 通过jquery 获取用户当前所在的城市名称和IP地址
下面这段JS代码是通过jquery 结合新浪IP地址库和QQip地址库接口获取用户当前所在的城市(省份)名称. 用户当前IP地址等数据.其中当前IP是通过 QQip地址库接口获取,其他数据都是通过 新 ...
- Unity网格合并_材质合并
[转]Unity网格合并_材质合并 原帖请戳:Unity网格合并_材质合并 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网 ...
- 2018-2019-2 20175213实验三《敏捷开发与XP实践》实验报告
一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:吕正宏 学号:20175213 指导教师:娄嘉鹏 实验日期:2019年4月29日 实验时间:13:45 - 21:00 实验序号:实验 ...
- effector - 必应词典
effector - 必应词典 美[ɪ'fektə(r)]英[ɪ'fektə(r)] n.效应物 网络效应器:效果器:受动器 变形复数:effectors:
- MQTT服务器本地搭建
1.1 初认识MQTT协议. 2.1 下载压缩包 前往EMQ下载地址:http://emqtt.com/downloads ,下载您的系统的版本,一般选择稳定版. 2.2 解压并运行 C:\Users ...
- webpack浅析---出口篇
webpack有四个核心概念: 入口(entry) 输出(output) loader 插件(plugins) 输出: 在哪里输出创建的bundles,以及如何命名这些文件, 默认./dist fil ...
- vue 需求 data中的数据之间的调用
我遇到过这种情况 就是在我的data中 会有数据调用data中的其他数据 如图 我的alertInfoType需要拿到screeningCondition中type的值 用过vue的都知道 我是不 ...
- 6J - 盐水的故事
挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假设最后一滴不到D毫升,则 ...
- boost asio 学习(三)post与dispatch
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=4 本章节为io_ ...
- Android工具
2018-09-27 安卓签名工具 AndroidKiller 比如包打好了,想替换一个图片,就用zip打开,替换图片,重新签名.