unity3d vr怎么改变vr的手柄样子

努力加载中,稍等...
暂无新消息
努力加载中,稍等...
已无更多消息...
这些人最近关注了你
努力加载中,稍等...
已无更多消息
努力加载中,稍等...
已无更多消息
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手柄的原始模式匹配五参考一、手柄渲染总体流程这篇来讨论和分析一下,steam VR插件在unity中怎么渲染手柄的模型。 很多人可能觉得vive 手柄很神秘,在steam vr导入到unity中后,没有看到任何手柄或头盔的模型,手柄确确实实被渲染到场景中了,这是怎么回事? 这篇文章就来抽丝剥茧的来说明,揭开其面纱。 渲染一般的流程,就是模型读取然后加载,显示,这么多。 根据代码流程绘制了简单的导图。图 手柄渲染导图 说明下: 当前使用的是steam 1.1.1版本插件,而当前最新的插件版本为1.2.1版本,里面代码openvr API做了不少细节的修改,这个修改有一些变化,最明显的的就是steam 中event事件调用不在使用字符串来处理,这个很多代码就可能需要修改。二、steam VR 渲染首先来看看,在unity中检视板内的排列图0 左右手柄节点,然后是相机节点。左右手柄下有一个模型节点。 在不运行的情况下,是这样的。只有这一个rendermodel这个脚本。 先给出个总的手柄渲染代码流程图。这个图我自己分析画的,不是很专业,但是足以说明问题。 下面就会逐个分析来破解这个渲染流程,然后我们再通过代码来自己来修改,把手柄其他模型来看看。三、代码分析首先代码分析,我们可以看到有两个关键代码文件,一个是SteamVR_ContollterManager.cs,一个是SteamVR_RenderModel.cs。他们分别在[CamearRig]和LeftiControl和RightController的 Model上。如下图。图1图 Render1.SteamVR_ContollterManager.cs文件分析我从SteamVR_ContollterManager来看看。 第一,在OnEnable来注册硬件连接,也就是手柄连接上的事件。 代码中写了注释可以看看,大概也说明了怎么回事。void OnEnable()
for (int i = <span style='font-family:&Courier New&;color:#; i
var obj = objects[i];
if (obj != null)
obj.SetActive(false);
OnTrackedDeviceRoleChanged();
for (int i = <span style='font-family:&Courier New&;color:#; i
if (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);} 第二,在注册事件内,产生模型或更新模型。 在private void OnDeviceConnected(params object[] args) 这里只需要看Refresh()就可以了。 第三,Refresh里面的调用了SetTrackedDeviceIndex,而当时被Index与之前不同的时候,会广播”SetDeviceIndex”,SteamVR_RenderModel中最后一个函数就是public void SetDeviceIndex(int index)
this.index =(SteamVR_TrackedObject.EIndex)index;
modelOverride = "";
if (enabled)
UpdateModel();
}} 这样代码中就controllerManager文件到了RenderModel文件。2.SteamVR_RenderModel.cs文件分析进入这个文件里,代码执行的一件事情就是创建模型或更新模式。 第一,UpdateModel(), 打开这个文件你会发现好几个地方都会调用这个函数。 分别为OnModelSkinSettingsHaveChanged(),OnDeviceConnected(),OnEnable(), 再有就是刚才的SetDeviceIndex(int index),一般在开始的话,就是从这里开始调用创建的。 第二,获取模型名称。 怎么获取模型名称呢,这个名称在那里呢? 就是在steam安装目录里。==图片steam 模型地址。== 代码为:// 由当前硬件设备的index,来获取设备属性,在设备属性里面有对象的模型名称。var error =ETrackedPropertyError.TrackedProp_S
var capacity =system.GetStringTrackedDeviceProperty((uint)index, ETrackedDeviceProperty.Prop_RenderModelName_String, null, <span style='font-family:&Courier New&;color:#, ref error);
if (capacity &= <span style='font-family:&Courier New&;color:#)
Debug.LogError("Failed to get render model name for tracked object " + index);
var buffer = new System.Text.StringBuilder((int)capacity);
system.GetStringTrackedDeviceProperty((uint)index,ETrackedDeviceProperty.Prop_RenderModelName_String, buffer, capacity, ref error); 再说一遍,就是由当前硬件设备的index,来获取设备属性,在设备属性里面有对象的模型名称,也可以说是由硬件里面有标识码,然后根据标识码找到对应的模型名称。这是也做硬件的朋友学过vive 开源lighthouse后给我讲述的,就这几行代码中得到验证。 第三,有模型名称了,就加载模型。 获取模型名称后,获取模型有多少个组件,然后获取组件模型名称。一个手柄模型有多个模型来组成的。 可以看看这里,常规的就是用这个来组合的,每个fbx文件就是其中的一个组件。==图 模型组件== 第四,异步加载完模型,加载材质纹理。第五,SetModel(),给检视板中模型添加组件MeshFilter和MeshRender。gameObject.AddComponent().mesh = model.mesh;
gameObject.AddComponent().sharedMaterial = model.material; 当然,没有组件添加组件,然后把mesh和材质赋值上去。 到这里vive手柄模型渲染的过程算是全部分析完毕。 最重要的还是文章开始的两张图,一张是思维导图,一张是渲染流程图。四、修改模型示例修改手柄渲染模型,方法有多中,把新的模型放到场景节点下,直接隐藏显示也是一种方法。这里说几种常用方法。1.修改纹理代码直接修改材质,这个需要重新材质texture。这个方法有什么问题呢,就是新版1.2.1的steamvr的插件中,不再是这个样子,而改用了宏,没有使用字符串来做事件监听的方法论。void OnEnable ()
//Subscribe to theevent that is called by SteamVR_RenderModel, when the controller mesh + texture, has been loaded completely.
SteamVR_Utils.Event.Listen("render_model_loaded", OnControllerLoaded);} 所以,旧版本steam vr 1.1.1版本的朋友还可以继续使用。 参考的代码: 这个不太推荐,当然若对你有用,你也记得点赞。2 修改加载模型在rendermodel代码中修改,模型名称, 这就搞定了。 看结果,我的手柄成灭火器了:图 灭火器 当然还弄了类似把关二爷的青龙偃月刀,您瞧一眼,手柄变成了大刀。图 大刀 只有做好了模型,这样是不是省心省力啊。神奇吧。3. 根据硬件编码,直接修改vive手柄的原始模式匹配。这个是最根本上来做的,不需要unity或其他引擎软件,直接修改了手柄硬件 匹配码,这个得从lighthouse付费开源说起了,现在VR行业中百花齐放的手柄硬件应该说绝大多数都是这类产品了。 不过,我只知道,没有付费学习过,还请高手赐教。五、参考【1】【2】标签:steam,VR,手柄,Unity,模型修改——————————THE———–END——— 感谢浏览,感谢点赞!!!
分类:(原创)文章
登录后参与讨论。点击
请勿发表无意义的内容请勿发表重复内容请勿发表交易类内容禁止发表广告宣传贴请使用文明用语其它
淫秽色情政治倾向人身攻击抄袭剽窃广告刷屏恶意挖坟冒充他人其它小米VR眼镜手柄怎么用 小米VR眼镜体感手柄使用指南
小米VR眼镜体感手柄怎么用?为保证应用体验的良好统一,开发者在开发应用时,需遵照以下规范来定义小米VR眼镜体感手柄的按键功能,符合按键功能规范将是应用通过审核的必要条件之一。小米VR手柄按键功能详细定义1、手柄的上半区是一个触控面板,滑动操作时规定目标物体与用户手指滑动方向一致,例如用户向上滑动触控面板,画面中内容跟随向上移动,如下图所示:2、手柄的上半区的触控面板按下为Click键,点击为确定功能,开发者需将应用中的确认及最常用功能键定义为此按键3、手柄的三角键为回退键,默认点击返回上一层菜单,在第三方应用中,允许开发者自定义该按键功能4、手柄的圆圈键点按为退出应用,会弹出退出应用的提示画面。5、手柄的圆圈键双击为进行方向校准,将手柄当前方向作为正方向。6、手柄的圆圈键长按2秒为呼出全局菜单小米VR的体感手柄的定位跟踪功能小米VR的体感手柄包含9轴的运动传感器,包含陀螺仪、加速度计、磁力计,能够实现3自由度的手柄朝向跟踪。3自由度的手柄朝向追踪可以为开发者实现诸多功能,可参考以下演示视频。比如:手柄朝向可模拟激光笔做3D指向,配合手柄按键后可做选中操作。可以用手柄朝向控制魔法棒、回旋镖、平底锅、鱼竿或者网球拍等等进行游戏。相关数据格式可参考文档小米VR Unity插件开发文档 (3.2头盔和手柄输入小节)。
看过本文的人还看过
最新图文推荐
最新专栏文章
大家感兴趣的内容
网友热评的文章Unity Editor VR告诉你,建立VR场景很简单
11月1-3日,在洛杉矶举行的Unite‘16上,Unity发布了一款Editor VR,用搭积木的方式,让每个零编程基础的人,从两三岁的儿童,到八九十岁的老人,都可以有能力构建属于自己的VR场景!什么?你在逗我吧!Unity可不是人人都会用的。你会用电脑么?你会建立Unity场景么?你会定义Unity场景中Object的位置么?你会给Object添加C#控制代码么?等等…且慢我只要你回答一句话:你会搭积木么?只要会搭积木,你就一定会用Editor VR,构建一个属于自己的VR场景!Timoni West充满自信地宣布着Editor VR的降生其实Editor V'R不仅仅是建立VR场景那么简单,下面就一一道来。不会开发,想要建立VR场景?第一步:你需要戴上HTC Vi头盔,拿上手柄,进入Editor VR的世界。你会看到一个美丽的火山木屋,走进火山木屋,你会发现自己的两只充满魔力的手,前引着如同激光的神奇射线。它们藏着非同凡响的秘密,入口就在手腕上Unity的标志处。第二步:用一只手的射线照射另一只手的Unity标志,你会发现,神奇的事情!恭喜你,找到了主页的入口!这个主页比较特别,它是一个3D立体的形貌,四个侧面,都有相应的菜单出现,你可以根据自己的需要,转动选取喜欢的选项。第三步:点击某个选项后,你会看到Project View,我想称它为“玩具盒”。为什么叫玩具盒呢?左侧是菜单栏,右侧是事先存放好的Game Object。首先,你可以用手拖拽它的长度和宽度,它具有了无限的存储可能。而且可以用手把它拖动到任何三维空间的位置,只要你喜欢,不在乎有木有桌子,它就那样任性地悬浮在空中。其次,它含有丰富多彩的Game Object,而且你可以像取一块积木一样,把它拿出来,诺,这就拿出来一个杯子又拿出来一个传真机.又拿出来一个本本。看,你不需要学习任何建模有关的东西,你需要做的只是取出,放下,这样原始人都会做的事情。是的,你不需要有任何VR的基础,就可以在桌子上摆放这些个,你喜欢的东西,摆多乱都可以。恭喜你,用了Editor VR,仅仅用了三步,你已经成为一个中级VR场景建模工程师了!当然,如果你有轻微强迫症或者洁癖,欢迎你把他们亲手精致地摆放在这个虚拟的桌子上。想要在VR中体验超级屏幕和超体验的UI?你需要这么一个Inspector,同样从菜单中可以找到。用过Unity的朋友都知道,Inspector就像是目录,可以让你看到在场景中建立的所有元素。这里的Inspector可以作为一个屏幕,显示更多虚拟空间表现不出来的信息,比如这个打字机,当你用射线照射打字机,更多信息就显示在这个Inspector上,你可以进行参数调整。当然,这个屏幕可以随意调整,大大大,想多大有多大。并且它构建一种全新的UI体验。这样的键盘,更便于在虚拟世界,用射线去按下数字。当然,如果你不习惯,完全可以把这些数字“推倒”,像敲鼓一样去敲击数字。什么,还可以在虚拟世界建立小虚拟世界?1. prefabs在这里,你可以看到自己,也变成了Unity中的Object。开发者们,有没有一种莫名的喜感呢?有了这个神器,开发者们,可以在虚拟空间,重新定义虚拟空间。虽然有点绕口,但不得不说,有一种改变世界的悲壮感。2. Chessboard这个奇妙的家伙又是什么?Wow, 这是房间里的小房间!这个更便于你进行房间内设施的移动,你只要把大大的手伸到小房间中,移动物体,相应大房间内的物体会被同时移动。平行宇宙啊!你还可以建立两个chess board,在其中一个中的操作,会在另一个中完全同步。新工具还可以拍迪士尼电影?Creation这是一个在操作空间中,用手拖动物体,构建新的物体的工具,这个操作空间在虚拟空间中,可以由你定义它的大小,只要你手臂能及,就可以创建任意大小的实体。创建好了!然后把它挂在空中吧!(此处有掌声)2.Tvori请注意空间中这个相机!移动这个相机,你会在面板中看到相机所见的情景。你可以进行虚拟世界中的录像!比如你要写字。录制好之后,回放的时候,你的手不见了,它不会被摄像机所看到!这对于制作VR中的动画,简直太赞!迪士尼动画电影拍摄起来,门槛低了太多太多!就是这样神奇!总结一下Editor VR不仅可以让一个零基础的人构建属于自己的VR场景,还可以让开发者在虚拟空间中编程、建立物体和改变物体的位置,两个新工具为动画电影的拍摄提供了新思路,并且屏幕很大。完全颠覆了我们傻傻地带着VR眼镜不知所措的印象,你可以娱乐,可以交互甚至可以创造!Editor VR,12月见!
TA的最新馆藏}

我要回帖

更多关于 unity3d vr 的文章

更多推荐

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

点击添加站长微信