Unity 3D基于steamvr unity插件包进行开发,怎么判断手柄与其他物体的接触

扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 381|回复: 0
让Unity支持基于OpenVR接口的Vive和Oculus开发——通过SteamVR
15排名<font color="#FF昨日变化137主题帖子积分
蛮牛币1008
在线时间164 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
本帖最后由 manew_JR 于
15:31 编辑
用.4中开发用于SteamVR(同时支持HTCVive和Oculus Rift头戴VR显示)的VR应用是很容易的。
图片1.png (27.59 KB, 下载次数: 0)
15:19 上传
§ Getting Started Tutorial: §
– SteamVR Plugin: 按照上面的教程操作,可以运行简单的应用并测试其设置。这需要下载SteamVR Plugin.package到你的既有项目或新项目。然后你可以容易的增加内容和角色或第三人称控制器到CameraRag预制体,在其中CameraRag预制体可以被放置并调整位置用于允许通过控制器调整用户视点的移动。
图片2.png (360.06 KB, 下载次数: 0)
15:19 上传
当SteamVR插件被增加到Unity项目中,会出现很多推荐设定…
图片3.png (207.15 KB, 下载次数: 0)
15:19 上传
SteamVR Example SceneSteamVR Plugin.unitypackage包含一个示例场景,你可以立刻打开用于测试。
图片4.png (686.07 KB, 下载次数: 0)
15:19 上传
图片5.png (447.16 KB, 下载次数: 0)
15:19 上传
让现有应用支持VR
图片6.png (626.61 KB, 下载次数: 0)
15:19 上传
现有的Unity/Oculus应用,例如我的可以被修改——通过将第三人称控制器/角色下的摄像机改为OpenVR/SteamVR插件 [CameraRig]
图片7.png (659.87 KB, 下载次数: 0)
15:19 上传
在导入SteamVR Plugin.unitypackage后,你可以参考SteamVR文件夹下的“quickstart.pdf”文档来简单的添加SteamVR_Camera脚本到你的摄像机对象。其他东西都在运行时建立。通常你会添加SteamVR_Camera脚本到你应用程序现在的主摄像机,并参照指南中所描述的那样去扩展它。你可以调整“Avatar_Camera (head)”和“Avatar_Camera (eyes)”到VR中任何你想放置你的视点的地方。当然,应该在第三人称控制器/角色的前面
图片8.png (674.3 KB, 下载次数: 0)
15:19 上传
Issues目前,我仅在Oculus Rift上测试过,因为我目前还没有HTC Vive。欢迎你反馈相关信息。Steam、SteamVR和Oculus Home都是在启动Unity开发的VR应用时自动启动的(如果应用没有运行)早期测试时,最基本的是:当独立可执行的版本编译后,编辑器的VR回放模式令摄像机非常难于放置。而且当视域内的3D对象(比如ISS内核中的)很多时性能波动很大。视野内的对象越少图像越稳定。
》》《《& & 蛮牛译林军福利多多哦!
扫描下方二维码关注官方微信~每日都有精选干货与你分享呦~
155547iluo7umxezrb2ekr.png (57.7 KB, 下载次数: 0)
15:27 上传
本文由蛮牛译员 潜行者 倾情翻译,未经允许不得转载!
每日推荐:
经过游戏蛮牛认证的蛮牛小翻译posts - 53,&
comments - 1,&
trackbacks - 0
研究了几天htc vive的接口,总算是把基本的按键功能研究出来了,这里分享一下,一来当做笔记,二来也希望对大家有所帮助。
如何导入Steam_VR那个包什么的我就不说了,网上有几个前辈已经教了,蛮牛论坛啥的上面都有,这里只把比较详细的按键功能分享一下,不知啥高端的东西,也算一段时间劳动成果啦,所以转载的帮我留个名写个转,谢谢啦。
个人感觉手柄上开始比较难搞明白的就是那个圆盘键,这个键是一个以中心为(0,0)点的直角坐标系,四个端长度都是1,可接收触摸和按压两种事件,大体就是下图这个意思(手绘水平略渣,见谅见谅),触摸touch或按压press会通过GetAxis方法返回一个坐标系中的点,可以判断你按在哪里,触发不同的事件,可以根据角度或各种方法来切分按键为n个按钮(就像切蛋糕一样)
这里用的是C#脚本 ,直接上代码了,我个人写注释比较话唠,适合新手看:
[csharp]&&
using&UnityE&&
using&System.C&&
public&class&ButtonTouchAction&:&MonoBehaviour&{&&
&&&&SteamVR_TrackedObject&trackdeO&&
&&&&void&Awake()&{&&
&&&&&&&&trackdeObjec&=&GetComponent&SteamVR_TrackedObject&();&&
&&&&void&Start&()&{&&&&&
&&&&void&FixedUpdate()&&
&&&&&&&&var&device&=&SteamVR_Controller.Input((int)trackdeObjec.index);&&
&&&&&&&&&&&
&&&&&&&&if&(device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))&{&&
&&&&&&&&&&&&Debug.Log("按了&&trigger&&&扳机键&");&&
&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&var&deviceIndex2&=&SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);&&
&&&&&&&&&&&&SteamVR_Controller.Input(deviceIndex2).TriggerHapticPulse(500);&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Trigger))&&
&&&&&&&&{&&&Debug.Log("按下了&&trigger&&&扳机键&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger))&{&&
&&&&&&&&&&&&Debug.Log("松开了&&trigger&&&扳机键&");&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&var&deviceIndex&=&SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Leftmost);&&
&&&&&&&&&&&&SteamVR_Controller.Input(deviceIndex).TriggerHapticPulse(3000);&&
&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&var&deviceIndex1&=&SteamVR_Controller.GetDeviceIndex(SteamVR_Controller.DeviceRelation.Rightmost);&&
&&&&&&&&&&&&SteamVR_Controller.Input(deviceIndex1).TriggerHapticPulse(3000);&&
&&&&&&&&}&&
&&&&&&&&if(device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&trigger&&&扳机键&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPress(SteamVR_Controller.ButtonMask.Trigger))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按了&&trigger&&&扳机键&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press松开了&&trigger&&&扳机键&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.System))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&system&&&系统按钮/Steam&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.System))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&System&&&系统按钮/Steam&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.ApplicationMenu))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&ApplicationMenu&&&菜单键&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.ApplicationMenu))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&ApplicationMenu&&&菜单键&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Grip))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Grip&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Grip))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Grip&&&&&");&&
&&&&&&&&}&&
&&&&&&&&&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis0))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis0&&&方向&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis0))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis0&&&方向&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis1))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis1&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis1))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis1&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis2))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis2&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis2))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis2&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis3))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis3&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis3))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis3&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis4))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis4&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis4))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis4&&&&&");&&
&&&&&&&&}&&
&pre&name="code"&class="csharp"&&&&&&&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis0))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis0&&&方向&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis0))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis0&&&方向&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis1))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis1&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis1))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis1&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis2))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis2&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis2))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis2&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis3))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis3&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis3))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis3&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Axis4))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("按下了&&Axis4&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Axis4))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Axis4&&&&&");&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetTouchDown(SteamVR_Controller.ButtonMask.Touchpad))&&
&&&&&&&&{&&&&&
&&&&&&&&&&&&Debug.Log("按下了&&Touchpad&&&&&");&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&Vector2&cc&=&device.GetAxis();&&
&&&&&&&&&&&&Debug.Log(cc);&&
&&&&&&&&&&&&
&&&&&&&&&&&&float&jiaodu&=&VectorAngle(new&Vector2(1,&0),&cc);&&
&&&&&&&&&&&&Debug.Log(jiaodu);&&
&&&&&&&&&&&&
&&&&&&&&&&&&if&(jiaodu&&&45&&&&jiaodu&&&135)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&Debug.Log("下");&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&
&&&&&&&&&&&&if&(jiaodu&&&-45&&&&jiaodu&&&-135)&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&Debug.Log("上");&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&
&&&&&&&&&&&&if&((jiaodu&&&180&&&&jiaodu&&&135)&||&(jiaodu&&&-135&&&&jiaodu&&&-180))&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&Debug.Log("左");&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&
&&&&&&&&&&&&if&((jiaodu&&&0&&&&jiaodu&&&45)&||&(jiaodu&&&-45&&&&jiaodu&&&0))&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&Debug.Log("右");&&
&&&&&&&&&&&&}&&
&&&&&&&&}&&
&&&&&&&&if&(device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))&&
&&&&&&&&{&&
&&&&&&&&&&&&Debug.Log("用press按下了&&Touchpad&&&&&");&&
&&&&&&&&}&&
&&&&&&&&void&Update&()&{&&
&&&&float&VectorAngle(Vector2&from,&Vector2&to)&&
&&&&&&&&float&&&
&&&&&&&&Vector3&cross&=&Vector3.Cross(from,&to);&&
&&&&&&&&angle&=&Vector2.Angle(from,&to);&&
&&&&&&&&return&cross.z&&&0&?&-angle&:&&&
阅读(...) 评论()1553人阅读
大家都知道现在基于Unity开发Vive的应用程序都需要用到SteamVR这个插件,接下来的系列会重点分析该插件中和开发相关的功能。首先介绍的是Vive手柄控制器开发的介绍,基本包含了手柄功能开发的所有信息。如有不全欢迎补充讨论。使用时需要注意的点我会用绿色标出了,对整个脚本执行过程不感兴趣的可以着重看一下绿色部分,开发时注意就好了。
关于控制器的相关信息都包含在SteamVR_Controller这个脚本之中。注意:SteamVR_Controller是非Monobehavior的脚本,并没有挂在场景下,其运行是通过SteamVR_Render脚本对于其中Update()函数的调用从而一直循环获取手柄相关信息。而SteamVR_Render脚本是在程序运行时自动加载至场景的。先来看看脚本的全貌吧。
ButtonMask类:手柄各按键的名称。
Device类:最重要的类,封装了跟踪设备的全部信息。
Update()函数:被SteamVR_Render脚本调用,更新各跟踪设备的信息。
Input()函数:根据Index初始化Device[]数组,并实例化所有16个Device。
DeviceRelation和GetDeviceIndex()结合获取特定的设备Index,如leftmost、rightmost。在SteamVR_TestController脚本中有使用到该函数获取用户的左右手手柄的Index。用该方法应该可以识别出用户所拿的手柄是哪一个。
下面着重分析Device类:
l& GetPress:按下按键一直触发l& GetPressDown:按下按键只触发一次l& GetPressUp:按下按键只触发一次
针对按键的三个函数,每种函数有两个重载,参数为ButtonMask或EVRButtonId类,第二种形式会将EVRButtonId转换为ButtonMask后调用第一种得到结果。
l& GetTouch l& GetTouchDown l& GetTouchUp
针对Touchpad的三个函数,一样的两种形式,同上不解释。
l& GetAxis()
获取Touchpad圆盘坐标或Trigger的行程&#20540;(0-1),函数默认参数是手柄上的Touchpad。共有5个AxisId参数可选,0是TouchPad,1是Trigger,2,3,4应该是没有用的,且此函数只接受EVRButtonId类参数而不接受ButtonMask。
l& TriggerHapticPulse
手柄震动控制函数,参数名称解释的是时间,默认500,但实际上控制的是震动的强度。默认AxisId是EVRButtonId_touchpad,选择其他EVRButtonId没用(等价参数axis0可以),其会调用OpenVR中的同名函数。参数超过4000会无效,导致震动不触发。可以通过协程的while(true)&#43;waitforsecond控制震动间隔,通过stop协程控制震动结束。
l& GetHairTrigger l& GetHairTriggerDown定义为有false转至true的过程,判断先前状态和当前状态。l& GetHairTriggerUp 定义为有true转至false的过程,判断先前状态和当前状态。
这三个函数获取HairTrigger的状态,其&#20540;对应rAxis1.x的&#20540;。But什么是HairTrigger?形象点说就是像头发般轻轻的触发。HairTrigger是检测当你握住扳手超过一个固定&#20540;(0.1,可调)时即触发的状态。相当于利用Trigger的变化量来做一个功能的触发,很棒不是吗。轻轻碰一下Trigger使得行程大于0.1即可触发一个功能。
&整个脚本的执行顺序如下:
l& Update();
l& Input()初始化16个设备的信息存储空间,并返回某个设备;
l& Device.Update():做两件事
1.&&&& GetControllerStateWithPose()调用OpenVR中的函数获取手柄状态和姿态。结果存在这两个变量State(VRControllerState_t)和Pose(TrackedDevicePose_t)中,由GetState()和GetPose()获取并由此返回一系列的可查询参数及各种Get函数。
各可查询参数说明如下(相当于对TrackedDevicePose_t中的参数翻译了下)
valid:GetControllerStateWithPose()函数调用是否成功;
connected:判断设备是否连接;
hasTracking:判断设备是否跟踪正常;
&根据ETrackingResult的结果得到下面三个参数:
outOfRange:判断设备是否超出范围;
calibrating:判断设备是否正在校正;
uninitialized:判断设备是否未初始化;
&transform:获取的结果是包含12个元素的一维数组,通过SteamVR_Utils.RigidTransform函数将12个元素重组为3X4矩阵并针对Unity的坐标系进行修正,同时添加了对position和rotation方便的引用。
velocity和angularVelocity:这两个速度也针对Unity的坐标系进行修正,lighthouse跟踪的空间轴方向与Unity存在偏差。
2. UpdateHairTrigger()。检测自定义的一种操作:轻按Trigger。
TBC:下面几个方面没有深入的研究,有兴趣的童鞋可以研究下,但知道上面的内容后应该已经可以随意访问控制器相关的信息了。
关于DeviceRelation和GetDeviceIndex()没有太多解释,可以深入挖一挖如何使用。
ButtonMusk及其他地方有用到很多按位进行的操作,可以补充一下相关知识。
Unity环境下空间坐标轴的修正原理没有研究:Unity使用的是左手坐标系,lighthouse的结果应该是右手坐标系,所以才会有速度的z分量相反和角速度x、y分量相反的结果。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5242次
排名:千里之外
评论:13条Unity SteamVR插件集成 - 瀛洲海客 - 博客园
SteamVR_Camera
VR摄像机,主要功能是将Unity摄像机的画面进行变化,形成Vive中的成像画面
使用方法:
l 在任一个摄像机上增加脚本
l 点击Expand按钮
完成以上操作后,原本的摄像机会变成如下结构
l Origin:位置
l Head:头部
l Eye:眼睛
l Ears:耳朵
至此,游戏中Vive中可以看到游戏画面,360度旋转查看游戏世界,在游戏世界中移动等
SteamVR_ControllerManager和SteamVR_TrackedObject
控制器,主要用于设置和检测Vive控制器。
Vive控制器由菜单键(ApplicationMenu),触摸板(Touchpad),系统键/电源键(System),扳机键(Trigger),侧柄键(Grip),组成
1 Menu button(菜单键)
2 Trackpad(触摸板)
3 System button(系统键/电源键)
4 Status light
5 Micro-USB port
6 Tracking sensor
7 Trigger(扳机键)
8 Grip button(侧柄键)
在Origin物体上添加2个子物体代表Vive的2个手柄,增加SteamVR_TrackedObject,Index设置为None
在Origin物体上添加SteamVR_ControllerManager,设置左右手柄
至此就完成了手柄的集成。
获取手柄状态
var device = SteamVR_Controller.Input(uint);
device.GetTouchDown(SteamVR_Controller.ButtonMask)
就可以获取到某个按键的状态
var system = OpenVR.S
system.GetControllerState(uint, ref VRControllerState_t))
获取当前所有的按键状态
public void TriggerHapticPulse(ushort durationMicroSec = 500, EVRButtonId buttonId = EVRButtonId.k_EButton_SteamVR_Touchpad)
var system = OpenVR.S
if (system != null)
var axisId = (uint)buttonId - (uint)EVRButtonId.k_EButton_Axis0;
system.TriggerHapticPulse(ControllerIndex, axisId, (char)durationMicroSec);
var device = SteamVR_Controller.Input(uint);
device. TriggerHapticPulse();
SteamVR_RenderModel
该组件用于渲染手柄的模型,并且跟踪手柄的位置
在左右手柄的物体下创建一个子物体,子物体上添加SteamVR_RenderModel脚本,Shader可以根据需求设置,比如设置为Standard
至此,游戏中可以看到手柄模型和手柄位置同步
SteamVR_PlayArea
用于显示游玩区域。
使用方法,在Origin物体上添加该脚本即可
可以看到游戏场景中多了一个显示区域
制作UI的时候需要使用世界坐标,通过不同相机的Depth复合,目前还不支持()
Unity5.4已经支持多相机复合()
注意ControlIndex的值,默认情况下都会自动设置,如果手动设置错误将导致错误的表现unity3d 开发VR时,如何使用HTC VIVE控制器圆盘进行自由行走?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:54,730贴子:
unity3d 开发VR时,如何使用HTC VIVE控制器圆盘进行自由行走?收藏
自己开发的一个小场景,现在使用htc vive可以上下左右看,自己走动时也会在场景里移动,但范围很小。请问下怎么能使用控制器进行行走呢?
EMC Unity 一款成功满足简捷,经济,现代,灵活全部4项要求的统一存储系统.请点击进入,下载Unity白皮书,了解更多EMC Unity的卓越技术.
移动整个htc房间
VRTK - SteamVR Unity Toolkit 里有案例自己找
可以用手柄抛物线瞬移啊
我是这样控制play area的,创建个空物体,放在和rig同级别下,这个空物体的rot要跟随head的rot值,然后你的手柄控制移动这个空物体,并且为这个空物体的self坐标系, 之后在让play aera的world pos跟随空物体的world pos,这样就达成手柄控制play aera移动并且是以head坐标轴的方向。
这篇文章你看下,刚好符合你需求
晕死,别这么移动,最好瞬移
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 unity steamvr插件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信