HTC Vive开发学习——VRTK(1)

unity HTC vive开发笔记二 今天来介绍 HTC vive开发之操作GUI 也就是实现手柄对物体的点击 Step 安装好我们需要的两个插件之后 阅读详情

本系列是基于Unity和HTC Vive开发虚拟现实应用的学习笔记。Unity环境下Vive开发必用的插件是SteamVR Plugin,除此之外,计划参考一些开源项目和免费的Asset Store插件,暂时涉及的包括:VRTK和Hover UI。

VRTK包括基于SteamVR Plugin实现的各种组件,除了提供一个Vive开发的辅助工具,更重要的是,它演示了如何使用SteamVR Plugin在Unity环境下开发Vive应用,具有很高的学习价值。我们的学习过程首先从VRTK的Demo开始。

(一)002_Controller_Events

该Demo提供了一个与Vive Controller(以下简称:手柄)交互的基础脚本VRTK_ControllerEvents,以及一个演示脚本(VRTK_ControllerEvents_ListenerExample)。演示了如何编写与控制器交互的脚本程序。

1. VRTK_ControllerEvents脚本

该脚本基于.NET事件模式,对于手柄的几乎全部交互操作,封装了一个事件发布者类脚本,并挂载在[CameraRig]对象下使用。首先,我通过该脚本再一次系统地学习了如何开发.NET事件模式程序。概念上,事件等同于一个多播委托,代码上则包含一个固定的模式,我将它归纳为:

(1)事件消息类型定义:事件发布者需要进行更改并通知所有订阅者的数据,即数据源类型。通常要继承EventArgs,但新的.NET框架可以不必(VRTK的代码属于后者)。

(2)事件委托定义:起到了定义该事件委托格式的作用,几个约束包括,返回值一定是void、第一个参数一定为object类型、第二个参数为(1)步骤中定义的消息类型。事实上,这步代码真正的作用就是给该事件绑定(1)中定义的用户消息类型。

(3)定义事件:通过event关键字,给(2)中的事件委托起一个名称,实质上这个步骤起到的是命名作用。

(4)发布者方法:发布者最后需要决定的,即是在什么时候发布消息、以及如何发布消息。对于该案例脚本,在MonoBehaviour的Update函数中进行更新是合理的策略,该脚本提供了一个EmitAlias统一各种手柄交互事件的发布形式。

(5)订阅者:订阅者不需要知道事件的实现细节,它们只需要对该事件类的事件成员(通常设为public)进行操作即可,包括添加和删除自己定义的委托方法。

其次,VRTK是基于SteamVR Plugin实现的,必然要用到其中的接口。该脚本实现的核心在于SteamVR_Controller.Device(以下简称Device类型)类型。该类型代表了一个Vive设备,目前Vive还只包括两个手柄和一个头盔,从SteamVR的代码上看,Vive是有增加追踪设备的计划的。这里,VRTK_ControllerEvents脚本被挂载到[CameraRig]下的一个[Controller](left/right)子物体下,那么Device类型成员就被赋值为该手柄。Device类的接口为我们提供了通过手柄来交互的方式。手柄都包括哪些交互元素呢?在SteamVR Plugin中又提供了哪些接口呢?


通过阅读Device类的代码,我们可以将手柄交互元素和接口总结为以下几个方面:

(1)位置和速度:手柄运动的线速度和角速度,接口:velocity和angularVelocity。位置,接口:transform。

(2)按键操作:各种GetPressXX/GetTouchXX

(3)按键内容:对于触摸板(TouchPad),可以获取Axis、Angle等信息;对于扳机,可以获取勾动扳机的幅度,比如可以用来判断误操作。接口:GetAxis等。

2. VRTK_ControllerEvents_ListenerExample脚本

这个是订阅者脚本,这里给事件绑定的响应是一系列的控制台打印操作。在后续的开发中,我们可以从这个Demo的执行效果来观察,Vive手柄各种交互操作的输出结果是什么,并以此来设计具体应用中的交互逻辑。

(二)003_Controller_SimplePointer

这个案例中,按Grip键应该能弹出一个射线,碰到物体会出现一个指针。但貌似几个脚本都没有检测Grip按键,因此效果看不出来。通过仔细阅读VRTK_ControllerEvents脚本,我发现错误在于下面这行代码:

if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Grip))

Device接口有两种,GetPressXX或者GetTouchXX,从语义上也比较好理解Press即是按下而Touch是触摸。后者仅仅对支持触摸方式的交互元素有效(触摸板和扳机),而对于Grip按键,显然只支持Press操作,因此这行代码无法检测Grip按键(事实上,ApplicationMenu按键的处理也存在这个问题。Trigger按键的Press操作并没有处理,可以根据后续需求按照VRTK_ControllerEvents脚本的实现方式,添加对应的事件实现交互操作。)为了解决这个问题,我又仔细看了一下VRTK_ControllerEvents这个脚本,它在VRTK中的地位十分重要,是后面所有基本功能的基础。因此我给代码加了一些必要注释,方便后面回顾。

namespace VRTK
{
    using UnityEngine;
    using System.Collections;

    //定义事件消息格式
    public struct ControllerInteractionEventArgs
    {
        public uint controllerIndex; //控制器索引
        public float buttonPressure; //按键幅度
        public Vector2 touchpadAxis; //触摸板Axis
        public float touchpadAngle;  //触摸板Angle
    }

    //定义事件委托
    public delegate void ControllerInteractionEventHandler(object sender, ControllerInteractionEventArgs e);

    public class VRTK_ControllerEvents : MonoBehaviour
    {
        public enum ButtonAlias //给按钮起一些别名
        {
            Trigger,
            Grip,
            Touchpad_Touch,
            Touchpad_Press,
            Application_Menu
        }

        public ButtonAlias pointerToggleButton = ButtonAlias.Grip;
        public ButtonAlias grabToggleButton = ButtonAlias.Trigger;
        public ButtonAlias useToggleButton = ButtonAlias.Trigger;
        public ButtonAli
Unity开发之SteamVR---VRTK简介 另外,对于其它的交互事件,也会提供相应的unity事件处理,比如VRTK_BasicTeleport_UnityEvents(瞬移事件处理)、VRTK_InteractGrab_UnityEvents(抓取事件处理)、VRTK_InteractTouch_UnityEvents(触摸事件处理),对于各事件发生的不同阶段,都会有对应的处理接口,类似于uGUI中Button的OnClick事件处理形式。此外,它表明如果用户踏入不在对象上的游戏区域的一部分,则用户将落到最近的对象。该对象成为控制器的扩展。 阅读详情

相关推荐

【Unity】虚拟现实 VRTK插件使用教程(一)插件基本配置

文章目录如何下载 如何下载 在Project中输入“VRTK”。 选择从Asset Store中搜索。 选择 VRTK - SteamVR Unity Toolkit。 导入包或点击下载(不同版本情况不同)。 更多内容请查看总目录【Unity】Unity学习笔记目录整理 ...

一个普普通通的游戏开发者 1万+

HTC Vive开发学习——VRTK + SteamVR Plugin + Hover UI Kit配置

我们基于HTCVive这款VR设备来开发虚拟现实应用。VRTK和Hover UI Kit是查到的两个比较不错的VR开源项目,前者提供了实现VR游戏环境中一些基本交互功能的组件(主要是脚本),后者则提供了一种VR环境下非常友好的UI系统。这里我们讨论如何配置这一套开发环境,并演示一些范例。1.VRTK和SteamVR Plugin配置这个插件的配置方法可参考的资料非常多,除了Github和官网,一些...

fcauto2012的博客 2403

HTC VIVE开发教程(五)

前面几节我们了解了SteamVR的基本原理,现在可以进行实战开发了。但在进行VR开发前,我还要先介绍一套强大的VR开发工具——VRTK在进行VIVE开发时,我们经常要用手柄进行一些操作,比如监听按键响应,通过手柄触摸板进行移动,抓取物体等等。这些交互功能实现起来其实不复杂,但是如果我们自己一个个去写又比较麻烦,为了避免重复造轮子,github上便有了vrtk这套SteamVR开发的工具集。获取vrt

子者不语的专栏 7579

HTC Vive开发学习——VRTK(2)

上一节主要剖析了VRTK_ControllerEvents脚本,这一节我们继续通过Demo来学习VRTK。(二)003_Controller_SimplePointer上一节关于这个Demo的学习主要还是深入剖析VRTK_ControllerEvents脚本。这一节我们正式开始学习这个脚本,它的继承包括两个层次,父类:VRTK_WorldPointer,祖类:VRTK_DestinationMar...

fcauto2012的博客 829

[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)

使用VRTK包中的VRTK_Knob脚本 该脚本的作用是: Attaching the script to a game object willallow the user to interact with it as if it were a radial knob. The directioncan be freely set. 也就是说把该脚本挂在一个物体上,就可以用手柄旋转这个物体,

WoW的博客 4661

HTC Vive Cosmos开发——手柄按钮事件

1.环境配置 htc vive cosmos的环境配置

qq_14942529的博客 5075

HTC Vive开发学习——VRTK(3)更新到新版本SDK!

上两节中,我们主要对SteamVR_Unity_Toolkit(简称旧版VRTK)中的一些基础控制器脚本进行了学习,包括VRTK_ControllerEvents(以下简写会经常省略VRTK_前缀)、SimplePointer和BasicTeleport三个主要脚本。但是最近查资料的时候发现其实VRTK早已更新了功能更强大的版本。在新的VRTK中,不仅更多的VR环境被支持,而且相比旧版本还扩展了更...

fcauto2012的博客 1640

HTC Vive SDK:多人VR应用开发教程_2024-07-26_09-50-20.Tex

Unity引擎提供了强大的网络功能,支持多人游戏和VR应用的开发。UNet:Unity的旧网络系统,提供基本的网络功能,如网络连接、数据传输和同步。Transport:用于自定义网络传输协议,可以实现更高效的数据传输。Networking:新的网络系统,提供了更高级的网络功能,如网络同步、网络身份验证和网络优化。

777

Untiy HTC Vive VRTK 开发记录

此篇记录在开发过程中所使用到的VR功能,不针对VRTK或SteamVR的插件进行解释,或导入等等基础内容的说明,如正在开发VR项目或许可以借鉴本篇中解释的相关功能~

qq_578147153的博客 1793

HTC-VIVE基础开发文档(Unity3D)

HTC-VIVE基础开发文档(Unity3D)HTC-VIVE基础开发文档(Unity3D)

AHRS互补滤波(Mahony)算法及开源代码

AHRS(Attitude and heading ref AHRS(Attitude and heading reference system,也就是航姿参考系统。在互补滤波算法中传感器主要采用了IMU(陀螺仪、加速度计)和磁力计。 AHRS的基本思想是,在载体没有平移运动的情况下,通过加速度感知重力分量,可以计算出载体的俯仰(Pitch)和横滚(Pitch);磁力计可以感知磁北方向,因此可以计算载体的磁北航向;而陀螺仪测量输出载体的旋转角速度,通过积分可以计算得到横滚、俯仰、航向增量,但由于陀螺输出值含

weixin_42918498的博客 3万+

ArcGIS标注太乱?手把手教你用‘要素分类标注’搞定河流分级显示

本文详细介绍了如何在ArcGIS Pro中使用要素分类标注功能实现河流分级显示,解决标注混乱问题。通过数据预处理、分类标注规则定义和高级参数调优,帮助用户打造层次分明、专业清晰的水系地图,提升地图信息传达效率。

weixin_30326741的博客 474

【推荐100个unity插件之27】推荐5种办法实现unity人物布料系统 衣服裙子飘动 头发飘动 胸部抖动 骨骼模拟 配件摆动 尾巴摆动 —— 主要是Magica Cloth 2插件

要实现Unity中的人物布料系统并使其具备动态效果,可以探索多种技术方法。这些方法不仅可以使衣服、裙子、头发等元素自然飘动,还可以实现胸部抖动、骨骼模拟、配件摆动和尾巴摆动等细致效果。本文将深入探讨五种实现这些动态效果的技术方案,从基础的物理模拟到高级的动画控制,帮助你打造逼真的人物表现。本文主要探究Magica Cloth 2的使用,因为我想探究最好的实现方法,而不是探究最多的实现方法。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 6299

【OpenClaw从入门到精通】第60篇:多智能体协同实战——用“龙虾”搭建你的数字员工团队(2026企业版)

2026年AI Agent企业落地的核心趋势,正从“单Agent单兵作战”转向“多智能体协同组网”。本文以全球开发者先锋大会“百虾大战”真实案例为蓝本,深度拆解OpenClaw多智能体协同的技术内核——三层解耦架构(模型层-技能层-网关层),系统搭建包含项目经理、架构师、执行者、质量把关者的4大核心Agent团队。通过三种主流协作架构对比、全链路配置代码实操、故障自愈实战演练,结合电商新品上架虚拟场景全流程演示,解决企业多Agent部署中的权限隔离、任务协同、运维自治三大核心痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 768

电化学-NanoStat-开源系统的使用说明

本文主要介绍了NanoStat开源系统的使用方法,从硬件打板、设备组装、软件安装3个层次进行了详细说明。整个流程根据作者提供的视频能够很好的完成,不需要太多的技术,对刚入门的新手是一个不错的练手项目。其次软件还有很大的优化空间,能够进一步提高系统的精度,对之后类似恒电位仪系统的开发也有很大的借鉴意义。

分享技术笔记,希望对大家能够有一定的帮助,同时也通过归纳总结提升自己的个人能力。 2001

执行任务赚积分

接下来N行,每行两个空格分隔的整数(SLA和V),SLA表示任务的最晚处理时间,V表 示任务对应的积分。每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。第2个时间单位内,处理任务4,获得5个积分。输入描述:第一行为一个数N,表示有N个任务,1

面试高手的博客 4694

【5】GD32H7xx CAN发送及FIFO接收

GD32H7xx CAN收发调试记录,包含源码

madao1234的博客 1813

【逐函数讲解ORB_SLAM3源码】获取普通帧率、关键帧、IMU数据

获得imu的旋转 mRwc * mImuCalib.mTcb.rotationMatrix(); Sophus::SE3 mTwc 创建ORB_SLAM3系统 Create SLAM system. It initializes all system threads and gets ready to process frames. ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::IMU_RGBD, true, 0, file_nam

小秋 AI SLAM 入门实战教程 1245

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Unity多线程
下一篇: HTC Vive开发学习——VRTK(2)
fcauto2012
博客等级 码龄11年 59粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值