Unity3D SteamVR Plugin学习笔记(1)

  • SteamVR Plugin插件使用。

在资源商店中下载最新的steamVR插件(https://kharma.unity3d.com/en/#!/content/32647)导入项目中。

  • 可能出现错误:

问题1

Failed to load IVRRenderModels interface version IVRRenderModels_005

目前解决方法

Steam官方论坛的中有讨论到这个问题,请仔细看。https://steamcommunity.com/app/358720/discussions/0/357286663674402763/

  • SteamVR Plugin脚本分析

  • Assets/Plugins/openvr_api.cs

这直接封装了steamvr SDK的支持。
是必须的脚本。它提供的所有功能steamvr暴露。不建议你做
更改此文件。应与相关的openvr_api DLL同步。

  • Assets/SteamVR/Scripts/SteamVR.cs

系统的初始化和关闭。使用SteamVR.instance
访问。由于任何原因,如果初始化失败,则可能返回null。

  • Assets/ SteamVR / Scripts / SteamVR_Camera.cs VR摄像机,主要功能是将Unity摄像机的画面进行变化,形成Vive中的成像画面

为了对抗畸变校正引起的拉伸,以更高的分辨率渲染场景。
由于Unity中的所有相机都是顺序渲染的,所以在每个
眼睛相机之间共享一个静态渲染纹理。

SteamVR提供了一个特定的渲染目标大小,以减轻失真,
然而,渲染到更高的分辨率会在相关
费用下提供额外的多采样优势。这可以通过SteamVR_Camera.sceneResolutionScale控制。

注意:GUILayer和FlareLayer与SteamVR_Camera不兼容,因为它们在屏幕空间
而不是世界空间中渲染。

这些将自动移动SteamVR_GameView对象,该对象本身将自动
添加到SteamVR_Camera的父‘head‘对象。AudioListener也被转移到头部,以便
音频被适当的空间化。

  • Assets/ SteamVR / Scripts / SteamVR_Overlay.cs - 此组件用于协助在VR中呈现2D内容。

使用特殊的渲染路径将指定的texture合成到虚拟曲面上的场景中,以
提高保真度。

  • Assets/ SteamVR / Scripts / SteamVR_TrackedObject.cs - 将其添加到要使用跟踪的任何对象。


HMD有一个设置为自动。对于控制器,选择要映射到的对象的索引。一般来说,
您应该将这些对象加载到相机的“origin”对象,以便它们在相同的空间中跟踪。但是,如果
不方便,您可以在TrackedObject本身中指定“origin”。

  • Assets/ SteamVR /脚本/ SteamVR_RenderModel.cs -该组件用于渲染手柄的模型,并且跟踪手柄的位置。
  • Assets/ SteamVR / Scripts / SteamVR_Utils.cs - 用于在Unity中使用SteamVR API的各种位,包括一个 简单的事件系统,用于处理向量/四元数对的RigidTransform类,矩阵转换和 其他有用的功能。
  • SteamVR_PlayArea

    用于显示玩家可游玩区域。使用方法,在Origin物体上添加该脚本即可

  • SteamVR_ControllerManager和SteamVR_TrackedObject

控制器,主要用于设置和检测Vive控制器。

Vive控制器由菜单键(ApplicationMenu),触摸板(Touchpad),系统键/电源键(System),扳机键(Trigger),侧柄键(Grip),组成

使用方法:

在Origin物体上添加2个子物体代表Vive的2个手柄,增加SteamVR_TrackedObject,Index设置为None

在Origin物体上添加SteamVR_ControllerManager,设置左右手柄

在origin上再加一个子对象主相机作为head如图,加上steam vr_tracked object

  • SteamVR_Controller  控制器的相关信息

关于控制器的相关信息都包含在SteamVR_Controller这个脚本之中。注意:SteamVR_Controller是非Monobehavior的脚本,并没有挂在场景下,其运行是通过SteamVR_Render脚本对于其中Update()函数的调用从而一直循环获取手柄相关信息。

而SteamVR_Render脚本是在程序运行时自动加载至场景。

ButtonMask类:手柄各按键的名称。

Device类:最重要的类,封装了跟踪设备的全部信息。

Update()函数:被SteamVR_Render脚本调用,更新各跟踪设备的信息。

Input()函数:根据Index初始化Device[]数组,并实例化所有16个Device。

详细SteamVR_Controller类内容可以参考博客:Unity SteamVR插件详解一:SteamVR_Controller脚本分析+Vive控制器功能开发

时间: 2024-10-07 13:07:49

Unity3D SteamVR Plugin学习笔记(1)的相关文章

Unity3D之UGUI学习笔记(一):UGUI介绍以及Canvas

UGUI是Unity3D4.6官方提供的UI系统,支持2D和3D UI的开发. Unity3D UI史 OnGUI 在Unity4.6之前,官方提供的是OnGUI函数来开发UI界面,当然问题也比较多,首先不支持可视化开发,其次UI始终位于所有3D对象的上方,无法实现在UI上添加3D模型的效果. 现在一般这套系统多用来在Unity编辑器中开发界面或者快速搭建一些调试界面时使用. NGUI 大名鼎鼎的NGUI是可以看做是开发Unity游戏必备的插件,支持可视化开发,同时也支持2D和3D UI的开发,

Unity3D之ScriptableObject学习笔记

不同与C#提供的Serializable序列化功能,ScriptableObject是Unity3D提供的一个数据存储类,我们接下来学习一下这个类的功能. 官方文档 http://docs.unity3d.com/Manual/class-ScriptableObject.html http://docs.unity3d.com/ScriptReference/ScriptableObject.html 使用情景 在Unity3D中,我们记录游戏的配置数据可以使用文件文件(XML.JSON等格式

Unity3D音乐音效学习笔记

对于Unity3D的音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下. 支持格式 在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击,开枪音效等). Unity3D支持下面几种音乐格式: AIFF:适用于较短的音乐文件可用作游戏打斗音效 WAV:适用于较短的音乐文件可用作游戏打斗音效 MP3:适用于较长的音乐文件可用作游戏背景音乐 OGG:适用于较长的音乐文件可用作游戏背景音乐 音乐组件 Unity3D中对音乐进行了封装,总体来说

Unity3D之移植学习笔记:移植到Android平台

首先,我们需要一台已经配置好可以开发Android应用的计算机,这里我使用的是Windows系统+Eclipse+ADT的开发环境,当然也可以使用Android Studio或者使用Mac系统都可以. 导出到Eclipse 设置U3D工程 首先需要设置游戏的平台为Android: 在Player Settings...面板中记得设定一下: 这个名称需要设定. 导出Android工程 设定好Android的配置之后,我们需要对Android工程进行导出,我们仍然点击Builder Setting,

Unity3D之UGUI学习笔记(二):Rect Transform与Anchor

Rect Transform 我们都知道,Unity3D中所有的GameObject都必须要携带一个Transform组件,且该组件无法移除,那么作为UI显示的GameObject则不是携带Transform而是使用Unity3D专门为UI组件设计的Rect Transform组件,如下: 另外说一下,Canvas Renderer也是UI组件必须携带的组件. 我们来看一下其为我们提供的功能: 位置 位置是以像素为单位,其具体的值则以锚点为准,表示和锚点距离,其中x轴从左到右的数值越来越大,y轴

Unity3d - RPG项目学习笔记(二十)

前期工程将装备信息导入到了工程中,且实现了在背包内鼠标移动显示物品提示信息,本次工程开始构建装备穿戴功能. 项目需求: 右键点击背包内的装备,使其穿戴在身上. 需求分析: 右键点击背包内的装备,注意,此时的装备还是背包内的一个物品,即是工程所定义的id为2001-2010的InventoryItem而已:需求可以抽象为右键点击背包内的一个物品,如果该物品是装备类,则在角色的EquipmentUI相应的位置生成一个与之图标相同的EquipmentItem,则视为“装备”了该物品. 具体实现: ①右

Unity3d - RPG项目学习笔记(二十三)

前期建立了装备信息及装配功能,现在开始着手建立技能系统. 类似于物品信息,我们首先需要设计好技能系统文本,设计好技能的分类. 设计过程中还是需要把技能作用及释放目标的分类做好,技能文本如下: 4001,致命一击,skill-02,伤害250%,SinglTarget,Attack,250,0,6,1,Swordman,1,Enemy,1.54002,格挡精通,skill-07,防御130%,Buff,Def,130,5,3,5,Swordman,3,Self,04003,战神咆哮,skill-0

Unity3d - RPG项目学习笔记(二十一)

上期工程实现了装备的穿上功能,但是还有些不完善,我们必须进行进一步完善. 需要完善的内容主要有2个: ①如果穿带前该栏有装备,那么需要将原装备退回至背包内: ②成功穿戴装备后,需要使背包内的相应装备数量-1,如果数量为0了,那么删除该格内的物品. 脚本如下: 实现功能①,只需要在Class EquipmentUI中的Dress方法中检测格子内是否有物品的条件的代码块更新为: if(item != null) { Inventory._instance.GetId(item.id); item.S

Unity3d - RPG项目学习笔记(十一)

前期工程已经构建了背包.格子.物品三者的关系.简单概括,就是背包管理格子,格子管理(生成.消除)物品,物品根据id或icon_name变更sprite.现在开始进行模拟物品的拾取功能.对Inventory脚本进行添加: Class Inventory { public GameObject InventoryItem; void Update( ) { if(Inpt.GetKeyDown(keycode.x)) { GetId(Randam.Range(1001,1004)); } } pub