Unity +HTC VIVE 如何设置nba2k17手柄按键设置圆键移动摄像机视角

您的位置:
→ Htc Vive虚拟手柄使用技巧汇总
Htc Vive虚拟手柄使用技巧汇总
Htc Vive用虚拟手柄的玩家会遇到各式各样的问题,下面跟大家整理一下虚拟手柄的使用技巧汇总给各位分享。小贴士:1.用虚拟手柄驱动,一定要注意启动顺序,先启动两个手柄,并放在基站可以定位的地方,然后再启动steamvr,最后启动游戏。2.使用阅读原文中的校准工具时,关掉第三手柄模式,才能看到实时预览。3.用虚拟手柄驱动的朋友,不用虚拟手柄的时候可以把steamvrsettings里面的允许多驱动给改成false,要用的时候再换成true。4.使用阅读原文中的校准工具,可以直接在左下角看到预览,打开obs和相机,在这里面调整至完全重叠,可以提高效率。5.用绿幕的时候注意人不要离绿幕太近,光线一定要充足,不然人会范绿,抠图的时候会很难看。特别是用大面积绿幕的朋友,一定要让光源直接打在人身上,而不是先打在绿幕上在反射。所以我一般除了上面打光以外,还会做一些摄像机灯光。6.如果觉得obs截取的画质差,可能是因为窗口太小。如果把窗口直接拉大unity会重新适配分辨率的,也就是说假设你是4k的屏幕,4分屏调到全屏,每个分屏才有1080p。如果没有4k屏幕可以直接把屏幕脱出显示范围,像素一样会渲染的,obs也可以捕捉到。这个方面我确实不知道更好的方法,我人也比较懒,如果有更好的方法请分享给我。7.如果你发现你的画面有延迟,往往是硬件缺陷,但也可以通过降低分辨率和比特率来降低延迟,但效果不明显。8.其实如果你不打算拍影视级别大作,那么480p就够了。而且用告诉摄像头,往往比用摄像机加采集卡容易,问题也比较少。然后你把mr视频放一半第视角放一半,最后还是有一个高清视频。这样你拍mr视频的成本只要几百块钱,而其他可行方法动辄上万。9。用广角镜头对准场景会更简单,道理我不用多解释吧。但是画面可素性比较底,换句话就是不适合拍mr电影。
阅读此文的人还阅读了...
美国美国 跑跑车网友 发表于:
是这个吗 cameraAlign
美国美国 跑跑车网友 发表于:
校准工具 在哪里1777人阅读
HTC vive(4)
VR(虚拟现实)(5)
unity3d(47)
vive的sdk SteamVR在升级,会有些改动。最新的SteamVR1.2.1在Unity5.4.4下狂报错。
下面的内容是在以下环境完成的
unity5.4.4
SteamVR1.2.0(http://download.csdn.net/detail/wuyt)
ViveInputUtility1.5.1beta(http://download.csdn.net/detail/wuyt)
啊,为什么开始做vive的开发了,这个问题别问哦。好了,说正事。
认识下vive的手柄
手柄两个一对,分左右,开发的时候也是分左右的。每个上面有一个pad和4个按钮。简单说明下:
开关、系统菜单按钮:只有这个按钮不可以编程(默认),用来打开手柄,其实没用关的功能。在游戏中按下该按钮是调出系统默认的菜单,用来关闭,切换游戏用的。menu按钮:默认用来打开游戏菜单。grip按钮:用的最少的按钮,每个手柄上虽然有两个,但是是相同的。trigger按钮:扳机按钮,用的最多,可以有力度。pad:触摸屏+鼠标的功能,可触摸,可点击。
需要两个插件:
SteamVR Plugin和
Vive Input Utility
商城地址如下,都是免费的,下载后导入
https://www./cn/#!/content/32647
https://www./cn/#!/content/64219
程序开发之综述
首先,引用HTC.UnityPlugin.Vive
using HTC.UnityPlugin.V
每个按钮包括pad都有GetPress、GetPressDown、GetPressUp三种方法,用HandRole枚举来确定左右手柄,用ControllerButton枚举来确定是哪个按钮。
对于按钮,GetPressDown是按下时触发,GetPressUp是放开时触发,以上两个是个事件,GetPress是按住时一直返回ture,算是一个状态。
对于pad,有两种:
当ControllerButton.Pad时,和按钮相同。
当ControllerButton.PadTouch时,GetPressDown是接触时触发,GetPressUp是离开时触发,GetPress是接触时一直返回的状态。
using System.C
using System.Collections.G
using UnityE
using HTC.UnityPlugin.V
public class viveLearn : MonoBehaviour {
// Update is called once per frame
void Update () {
if (ViveInput.GetPress (HandRole.RightHand, ControllerButton.Menu)) {
Debug.Log (&menu press&);
if (ViveInput.GetPressUp (HandRole.RightHand, ControllerButton.Menu)) {
Debug.Log (&menu press up&);
if (ViveInput.GetPressDown (HandRole.RightHand, ControllerButton.Menu)) {
Debug.Log (&menu press down&);
除了上面的方法,还可以通过回掉的方式实现
using System.C
using System.Collections.G
using UnityE
using HTC.UnityPlugin.V
public class viveLearn : MonoBehaviour {
private void Awake(){
ViveInput.AddPress (HandRole.LeftHand, ControllerButton.Menu, OnMenuPress);
private void OnDestory(){
ViveInput.RemovePress (HandRole.LeftHand, ControllerButton.Menu, OnMenuPress);
private void OnMenuPress(){
Debug.Log (&menu press&);
Trigger按钮开发
Trigger有模拟值,从0到1,没按的时候是0,全部按下是1。可以通过GetTriggerValue方法获得。
ViveInput.GetTriggerValue (HandRole.LeftHand, false);
Trigger按钮,对应有三种,Trigger,HairTrigger,FullTrigger。
当TriggerValue在0.1到0.2时,对应HairTrigger,当TriggerValue超过0.5时对应Trigger,当TriggerValue=1时,对应FullTrigger。
可以简单理解为,轻按=HairTriiger,中度按=Trigger,全部按下=FullTrigger。
pad做那么大,当然除了可以按,还可以返回位置信息。用GetPadAxis方法即可。
ViveInput.GetPadAxis (HandRole.LeftHand, false);触碰位置信息如下图
此外,对应pad,又有接触、按下的两组方法。其中,Axis是坐标位置,Delta是最后一帧移动位置,Vector是移动的向量。
ViveInput.GetPadTouchAxis (HandRole.LeftHand, false);
ViveInput.GetPadTouchDelta (HandRole.LeftHand, false);
ViveInput.GetPadTouchVector (HandRole.LeftHand, false);
ViveInput.GetPadPressAxis (HandRole.LeftHand, false);
ViveInput.GetPadPressDelta (HandRole.LeftHand, false);
ViveInput.GetPadPressVector (HandRole.LeftHand, false);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:626672次
积分:6904
积分:6904
排名:第3611名
原创:140篇
评论:189条
(2)(1)(3)(8)(6)(2)(3)(2)(3)(4)(1)(3)(7)(11)(7)(3)(2)(1)(3)(2)(1)(1)(1)(1)(2)(4)(3)(2)(4)(2)(3)(3)(3)(3)(1)(7)(13)(2)(6)(8)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'Unity +HTC VIVE 虚拟现实开发— 手柄震动 - CSDN博客
Unity +HTC VIVE 虚拟现实开发— 手柄震动
废话少说,直接上代码。
using UnityE
using System.C
public class shoubingzhendong : MonoBehaviour {
SteamVR_TrackedO
// Use this for initialization
void Start () {
tracked = GetComponent&SteamVR_TrackedObject&();
// Update is called once per frame
void Update () {
var device = SteamVR_Controller.Input((int)tracked.index);
//手柄扳机键按下
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) {
device.TriggerHapticPulse(500);
只要将此脚本放置在手柄上,然后按下扳机键(Trigger)即可震动。
本文已收录于以下专栏:
相关文章推荐
前言: 最近入坑了Unity,坚信好记性不如烂笔头……
今天,我决定写一点关于学习HTC ViVe手柄震动的心得。步骤一:首先,你可以到Asset store 下载 SteamVR Plugin;当然...
在我们的实训项目中,本人主要负责UI的设计以及unity中UI界面的代码编写部分。
由于之前没有对Unity进行过深入的了解,于是在实训开始的初期,我首先对于unity中的UI界面部分的功能进行了了解...
Tensorflow1.0支持Windows系统
Tensorflow1.0用到的Python版本是Py3.5,安装Anaconda时,安装Anaconda3-4.2.0即可,下载地址如下:
鉴于本游戏的核心内容为,由声音召唤出的召唤兽,并对召唤兽进行培养,选择玩家进行AR场景下声控的对战行为。分析后得出主要需要以下UI界面:
1、登录界面
登录界面是玩家最先接触到的界面,需要能够直观...
习惯上用Pointer3D射线来实现vive控制器指向三维空间点,同时兼容Unity Event System。
Vive Raycaster是一个来自发送vive 按钮事件变换的一个事件射线脚本。...
原文地址:http://blog.csdn.net/poem_qianmo/article/details/
本篇文章中,我们学习了Unity Shader的基本写法框架,以及学...
Screen Space—Overlay:将UI渲染为摄像机视图顶部的2D图形(默认设置)
Screen Space—Camera:也将UI渲染在摄像机视图顶部,但UI元素可以进行透视效果旋转
在介绍完一级界面以后,这里将要介绍二级界面的一些基本功能:
二级界面主要显示在画面的中间。为了凸显本游戏是以召唤兽为中心的游戏,所以游戏界面中将始终把玩家的召唤术放在重要的左方的位置。而二级界面的相...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【HTC VIVE】Unity中Vive Controller手柄模型渲染流程和模型替换 - 简书
【HTC VIVE】Unity中Vive Controller手柄模型渲染流程和模型替换
steam VR插件在unity中怎么渲染手柄的模型?下面就从这五点给大家介绍下Unity中Vive Controller手柄模型渲染流程和模型替换,一起来看看吧。版权声明:本文为cartzhang原创文章,未经允许不得转载。作者博客http://blog.csdn.net/cartzhang目录:一手柄渲染总体流程二steam VR渲染三代码分析1.SteamVR_ContollterManagercs文件分析2.SteamVR_RenderModelcs文件分析四修改模型示例1.修改纹理2.修改加载模型3.根据硬件编码直接修改vive手柄的原始模式匹配五参考一、手柄渲染总体流程这篇来讨论和分析一下,steamVR插件在unity中怎么渲染手柄的模型。很多人可能觉得vive手柄很神秘,在steam vr导入到unity中后,没有看到任何手柄或头盔的模型,手柄确确实实被渲染到场景中了,这是怎么回事?这篇文章就来抽丝剥茧的来说明,揭开其面纱。渲染一般的流程,就是模型读取然后加载,显示,这么多。根据代码流程绘制了简单的导图。
图 手柄渲染导图说明下:当前使用的是steam 1.1.1版本插件,而当前最新的插件版本为1.2.1版本,里面代码openvr API做了不少细节的修改,这个修改有一些变化,最明显的的就是steam中event事件调用不在使用字符串来处理,这个很多代码就可能需要修改。首先来看看,在unity中检视板内的排列
图0左右手柄节点,然后是相机节点。左右手柄下有一个模型节点。在不运行的情况下,是这样的。
只有这一个rendermodel这个脚本。先给出个总的手柄渲染代码流程图。
这个图我自己分析画的,不是很专业,但是足以说明问题。下面就会逐个分析来破解这个渲染流程,然后我们再通过代码来自己来修改,把手柄其他模型来看看。首先代码分析,我们可以看到有两个关键代码文件,一个是SteamVR_ContollterManager.cs,一个是SteamVR_RenderModel.cs。他们分别在[CamearRig]和LeftiControl和RightController的Model上。如下图。
图Render我从SteamVR_ContollterManager来看看。第一,在OnEnable来注册硬件连接,也就是手柄连接上的事件。代码中写了注释可以看看,大概也说明了怎么回事。voidOnEnable(){for(inti =0; i{varobj = objects[i];if(obj !=null)obj.SetActive(false);}OnTrackedDeviceRoleChanged();for(inti =0; iif(SteamVR.connected[i])OnDeviceConnected(i,true);SteamVR_Utils.Event.Listen("input_focus", OnInputFocus);//这个用来注册硬件连接事件。事件为steam自己写的事件。SteamVR_Utils.Event.Listen("device_connected", OnDeviceConnected);//这个用来注册设备发生了互换事件。SteamVR_Utils.Event.Listen("TrackedDeviceRoleChanged", OnTrackedDeviceRoleChanged);}第二,在注册事件内,产生模型或更新模型。在privatevoidOnDeviceConnected(paramsobject[] args)这里只需要看Refresh()就可以了。第三,Refresh里面的调用了SetTrackedDeviceIndex,而当时被Index与之前不同的时候,会广播”SetDeviceIndex”,SteamVR_RenderModel中最后一个函数就是publicvoidSetDeviceIndex(intindex){this.index=(SteamVR_TrackedObject.EIndex)modelOverride ="";if(enabled){UpdateModel();}}这样代码中就controllerManager文件到了RenderModel文件。进入这个文件里,代码执行的一件事情就是创建模型或更新模式。第一,UpdateModel(),打开这个文件你会发现好几个地方都会调用这个函数。分别为OnModelSkinSettingsHaveChanged(),OnDeviceConnected(),OnEnable(),再有就是刚才的SetDeviceIndex(int index),一般在开始的话,就是从这里开始调用创建的。第二,获取模型名称。怎么获取模型名称呢,这个名称在那里呢?就是在steam安装目录里。
==图片steam模型地址。==代码为://由当前硬件设备的index,来获取设备属性,在设备属性里面有对象的模型名称。varerror =ETrackedPropertyError.TrackedProp_Svarcapacity =system.GetStringTrackedDeviceProperty((uint)index, ETrackedDeviceProperty.Prop_RenderModelName_String,null,0,referror);if(capacity &=1){Debug.LogError("Failed to get render model name for tracked object "+ index);}varbuffer =newSystem.Text.StringBuilder((int)capacity);system.GetStringTrackedDeviceProperty((uint)index,ETrackedDeviceProperty.Prop_RenderModelName_String, buffer, capacity,referror);再说一遍,就是由当前硬件设备的index,来获取设备属性,在设备属性里面有对象的模型名称,也可以说是由硬件里面有标识码,然后根据标识码找到对应的模型名称。这是也做硬件的朋友学过vive开源lighthouse后给我讲述的,就这几行代码中得到验证。第三,有模型名称了,就加载模型。获取模型名称后,获取模型有多少个组件,然后获取组件模型名称。一个手柄模型有多个模型来组成的。可以看看这里,常规的就是用这个来组合的,每个fbx文件就是其中的一个组件。
==图 模型组件==第四,异步加载完模型,加载材质纹理。第五,SetModel(),给检视板中模型添加组件MeshFilter和MeshRender。gameObject.AddComponent().mesh= model.gameObject.AddComponent().sharedMaterial= model.当然,没有组件添加组件,然后把mesh和材质赋值上去。到这里vive手柄模型渲染的过程算是全部分析完毕。最重要的还是文章开始的两张图,一张是思维导图,一张是渲染流程图。修改手柄渲染模型,方法有多中,把新的模型放到场景节点下,直接隐藏显示也是一种方法。这里说几种常用方法。代码直接修改材质,这个需要重新材质texture。这个方法有什么问题呢,就是新版1.2.1的steamvr的插件中,不再是这个样子,而改用了宏,没有使用字符串来做事件监听的方法论。void OnEnable (){//Subscribe to theevent thatiscalledbySteamVR_RenderModel,whenthe controller mesh + texture, has been loaded completely.SteamVR_Utils.Event.Listen("render_model_loaded", OnControllerLoaded);}所以,旧版本steam vr 1.1.1版本的朋友还可以继续使用。参考的代码:这个不太推荐,当然若对你有用,你也记得点赞。在rendermodel代码中修改,模型名称,
这就搞定了。看结果,我的手柄成灭火器了:
图灭火器当然还弄了类似把关二爷的青龙偃月刀,您瞧一眼,手柄变成了大刀。
图 大刀只有做好了模型,这样是不是省心省力啊。神奇吧。这个是最根本上来做的,不需要unity或其他引擎软件,直接修改了手柄硬件 匹配码,这个得从lighthouse付费开源说起了,现在VR行业中百花齐放的手柄硬件应该说绝大多数都是这类产品了。不过,我只知道,没有付费学习过,还请高手赐教。【1】【2】
VR项目研发主管
企业特聘VR专家
VR行业讲师
全国3d大赛特邀评审专家
“福建省青年岗位能手”称号
海峡两岸信息服务创新大赛暨福建省计算机软件设计大赛优秀指导老师
指导作品获得多项荣誉:
全国3D大赛一等奖1项
全国3D大赛三等奖4项
全国移动通信大赛 三等奖2项
中国大学生服务外包创新大赛三等奖1项
海峡两岸信息服务创新大赛暨福建省计算机软件设计大赛一等奖3项,二等奖4项,三等奖5项
中国大学生挑战杯课外科技竞赛福建赛区二等奖1项 三等奖1项
福建省挑战杯大学生创业计划竞赛三等奖
福建省大学生智能设计大赛二等奖
福建省互联网+创新创业大赛铜奖
全国3D大赛福建赛区特等奖4项,一等奖8项,二等奖11项,三等奖5项}

我要回帖

更多关于 手柄键位设置软件 的文章

更多推荐

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

点击添加站长微信