Unity 使用SteamVR 实现物体的抓取
Posted (-_-!)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 使用SteamVR 实现物体的抓取相关的知识,希望对你有一定的参考价值。
1.在Project面板搜索到Player 预制体,将预制体拖到Hierarchy面板中。
2.找到你需要抓取的物体
3.在面板通过AddComponent添加Interactable脚本(表示该物体可以交互)
4.添加Throwable脚本(表示物体可以被抓取)
5.Throwable脚本会自动添加Rigidbody组件,确保物体本身有Collider组件。(不然容易开始就不见了)
------------------------------------------------截止到这里就可以抓取了------------------------------------------------
以下为更改抓取动作为扣动扳机
1.找到Player 预设
2.找到SteamVRObjects--->LeftHand/RightHand---->Hand--->GrabGripAction--->\\actions\\default\\in\\GrabPinch。
3.完成以上设置完成就可以使用左、右或左右手柄扳机键进行抓取。(左右手柄同理设置)
4.设置为其他动作更改Action动作即可
Unity+SteamVR开发——场景切换问题
一、前言
本文涉及的问题中使用的Unity版本为2018.4.26,VS版本为2017专业版,SteamVR为2.6.1版本。
二、问题
2.1、开启头盔显示器时一些2D界面无法控制
1)问题描述
在使用SteamVR开发VR应用时,难免还是会有一些2D的界面,如登入界面,在登入界面运行的时候会出现晃动头盔显示器,UI界面也跟着晃动,并且此时鼠标无法点击UI上的按钮。如图1所示,时因为HTC的头盔和跟踪器自动的就控制住了场景中的摄像机
2)解决方法
只需要在场景的任何脚本的Awake或者Start方法里添加如下代码即可,这样Unity默认的底层模块就不会自动控制场景中的摄像机。
XRSettings.enabled = false;
2.2、从登入切换到VR场景时报错
有了上面的代码,在从登入切换到VR的场景中时,会出现如下错误,这个大概的意思就是SteamVR没有初始化成功。
NullReferenceException: Object reference not set to an instance of an object
Valve.VR.SteamVR_Action_Pose_Source.UpdateValue (System.Boolean skipStateAndEventUpdates) (at Assets/SteamVR/Input/SteamVR_Action_Pose.cs:575)
Valve.VR.SteamVR_Action_Pose_Source.UpdateValue () (at Assets/SteamVR/Input/SteamVR_Action_Pose.cs:553)
Valve.VR.SteamVR_Action_In_Source_Map`1[SourceElement].ForceAddSourceToUpdateList (Valve.VR.SteamVR_Input_Sources inputSource) (at Assets/SteamVR/Input/SteamVR_Action_In.cs:217)
Valve.VR.SteamVR_Action_In_Source_Map`1[SourceElement].OnAccessSource (Valve.VR.SteamVR_Input_Sources inputSource) (at Assets/SteamVR/Input/SteamVR_Action_In.cs:192)
Valve.VR.SteamVR_Action_Source_Map`1[SourceElement].GetSourceElementForIndexer (Valve.VR.SteamVR_Input_Sources inputSource) (at Assets/SteamVR/Input/SteamVR_Action.cs:607)
Valve.VR.SteamVR_Action_Source_Map`1[SourceElement].get_Item (Valve.VR.SteamVR_Input_Sources inputSource) (at Assets/SteamVR/Input/SteamVR_Action.cs:573)
Valve.VR.SteamVR_Action`2[SourceMap,SourceElement].get_Item (Valve.VR.SteamVR_Input_Sources inputSource) (at Assets/SteamVR/Input/SteamVR_Action.cs:42)
Valve.VR.SteamVR_Behaviour_Pose.OnEnable () (at Assets/SteamVR/Input/SteamVR_Behaviour_Pose.cs:92)
如图2所示
解决方法就是在VR的场景中的任何默认激活并过载在场景物体上的脚本的Awake方法里设置为
XRSettings.enabled = true;//从别的地方跳转到这个场景的时候设置一遍这个,防止为false的时候会造成运行错误
三、总结
1、StramVR底层会自动控制默认的Camera,需要用代码设置VR控制失活;
2、设置了之后要在进入VR场景时激活,不然会报错;
3、另外要注意失活最好放在Start方法里,激活放在Awake里面,不然还是会报错;
以上是关于Unity 使用SteamVR 实现物体的抓取的主要内容,如果未能解决你的问题,请参考以下文章