Unity-SteamVR物体交互

谈到Unity VR开发,即使是初学者也会听过SteamVR或者HTC VIVE,这款设备是目前在国内能够方便买到且在使用上不错的一款设备。其实SteamVR是集成在Steam里的一个VR插件,而HTC是硬件设备,运行时用到SteamVR这个插件(也是HTC运行时必须的环境),对于SteamVR在前面一篇有介绍,它是基于OpenVR开发的一套开源的插件。

打开Unity在Window>Asset Store中下载SteamVR插件,导入到工程中。
[CameraRig]分析:
导入完成后,在Project面板看到SteamVR文件夹,依次找到SteamVR>Proefabs>[CameraRig],将这个拖到场景中,然后按照下面的结构创建一个测试的环境,一个地面一张桌子,一个可操作的Cube。
其他环境都好理解,这个SteamVR的[CameraRig]就是一个最简练最基础的VR预制体了。首先光标点中[CameraRig],在Inspector面板,这个预制体中有两个主要的组件1.SteamVR_ControllerManager、2.SteamVR_PlayArea。 这里SteamVR_ControllerManager,字面意思看,也能大概明白控制器管理类,往下看能看到两个属性,绑定了子物体的Control(left)和Control(right),作用是分别控制硬件设备的左手和右手;SteamVR_PlayArea,是用户的活动区域,只有指定了活动区域,用户才可以在指定区域中活动。[CameraRig]的3个子物体,前两个是左手右手,最后那个就是头部了,是带有相机的,模拟头部视角。重点说明,需要被SteamVR所认识的物体,都挂载了SteamVR_TrackedObject,这里可以看出,SteamVR把可以操作的物体都看作是对象。
案例:
通过以上的了解,下面做个简单的测试。
1.首先脚本带上,新建一个类,命名为ImportedObject:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ImportedObject : MonoBehaviour {private SteamVR_TrackedObject trackedOjbect;
private SteamVR_Controller.Device device;
private GameObject interactBox;
// Use this for initialization
void Start () {// 获取手柄的引用trackedOjbect = GetComponent ();device = SteamVR_Controller.Input ((int)trackedOjbect.index);
}// Update is called once per frame
void Update () {if (device == null)return;if (device.GetAxis ().x != 0 || device.GetAxis ().y != 0) {Debug.Log (device.GetAxis ().x+" | "+device.GetAxis ().y);}/// 获取Trigger 是否按下if (device.GetPressDown (SteamVR_Controller.ButtonMask.Trigger)) {Debug.Log ("Trigger Down");if (interactBox != null) {interactBox.transform.parent = transform;Rigidbody rig = interactBox.GetComponent ();rig.useGravity = false;rig.isKinematic = true;}}/// 获取Trigger 是否松开if (device.GetPressUp (SteamVR_Controller.ButtonMask.Trigger)) {Debug.Log ("Trigger Up");if (interactBox != null) {interactBox.transform.parent = null;Rigidbody rig = interactBox.GetComponent ();rig.useGravity = true;rig.isKinematic = false;}}}////// 碰撞体进入时触发////// Other.private void OnTriggerEnter(Collider other){Debug.Log ("Enter ");interactBox = other.transform.gameObject;}////// 碰撞体离开时触发////// Other.private void OnTriggerExit(Collider other){Debug.Log ("Exit ");interactBox = null;}private void OnTriggerStay(Collider other){if (device != null) {/// 手柄震动 单位是毫秒级device.TriggerHapticPulse (700);}}
}
脚本中,首先获取手柄引用,运行时,每个TrTrackedObject都有唯一且不重复的ID,通过id即可获取到该Obj的Device,SteamVR为手柄定义了基本的按键操作,SteamVR_Controller.ButtonMask.Trigger(Trigger扳机键、Touchpad触摸板、System系统按钮、Grip侧边按钮、ApplicationMenu菜单按钮,Axis0/1/2/3/4触摸板方向按钮)。物体的触发函数OnTriggerEnter进入、OnTriggerExit移出、OnTriggerStay停留,是Unity再触发时自动会调用的,只要对其函数进行实现即可。
2.分别给两个手柄挂在这个脚本,效果如图:

3.Unity检测碰撞,必须有一个物体挂载Rigidbody。


以上完成后,点击运行就可以对面前的物体进行操作了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29001.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity VR游戏开发干货教程:VR中的用户界面

在设计VR应用的用户界面时要考虑很多因素,而这些因素对于传统应用或游戏的界面设计可能都不是事儿。下面我们会看看作为一个VR开发者在设计用户界面时可能会遇到的一些问题,以及跟硬件相关的一些东西。UI分辨率和画质目前DK2的分辨率是1920*1080(单目是9…

【SR Works】使用HTC Vive Pro结合SteamVR在Unity中制作MR内容

HTC Vive Pro有两个前置RGB摄像头,官方出了一套SR Works SDK来借助这两个摄像头实现MR功能。 本篇的目标是,成功运行官方的MR示例,并结合SteamVR和SR Works SDK在Unity中实现MR项目的开发准备 1.下载SRWorks插件 下载地址: Late…

公司普通启动VR/AR软件开发虚拟场景游戏

随着元宇宙技术的不断革新,VR作为一种新兴技术,正在迅速普及。VR软件开发技术将用户沉浸到虚拟世界中,让人们可以身临其境地体验一些事物,如元宇宙游戏、商圈、展会、旅游等。而VR虚拟场景的开发,则是实现这一目标的重…

《SteamVR2.2.0交互系统(Interaction System)》(Yanlz+Unity+XR+VR+AR+MR+Valve+Teleport+Skeleton+立钻哥哥++ok++)

《SteamVR2.2.0快速入门》 《SteamVR2.2.0快速入门》 版本 作者 参与者 完成日期 备注 SteamVR2.2.0_Interaction_V01_1.0 严立钻 2019.04.11 ##《SteamVR2.2.0快速入门》发布说明: “SteamVR2.2.0快速入门”:是对“Stea…

怎么才能把短视频中文配音变成英文配音?

中文视频的类型 首先,将中文视频翻译成改为英文的视频,这是一个比较复杂的过程, 这里面还涉及到几种情况,下面简单罗列下: 第一种:带中文解说和中文字幕的视频; 第二种:只有中文解说…

Go Web下gin框架的模板渲染

〇、前言 Gin框架是一个用于构建Web应用程序的轻量级Web框架,使用Go语言开发。它具有高性能、低内存占用和快速路由匹配的特点,旨在提供简单、快速的方式来开发可扩展的Web应用程序。 Gin框架的设计目标是保持简单和易于使用,同时提供足够的…

【VINS-Fusion】学习笔记

配置文件-config\euroc\euroc_stereo_imu_config.yaml %YAML:1.0#common parameters #support: 1 imu 1 cam; 1 imu 2 cam: 2 cam; #1个mui,双目相机 imu: 1 num_of_cam: 2 imu_topic: "/imu0" image0_topic: "/cam0/image_raw" im…

Qt6教程之三(3) QtWedget自定义控件

在之前的博客中,我们使用的控件都是Qt官方提供的,对于控件的特性也只能被动地接受,为了打破这种束缚,可以按照自己的想法来定义控件。 不过自定义控件必须遵守Qt官方的一套自定义控件规则,在规则之下我们就可以定义属…

基于TextRank+Seq2Seq+Pyqt5文章摘要标题关键词辅助生成系统(含全部python工程源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境TextRank环境TensorFlow环境PyQt5及Qt Designer运行环境 模块实现1. 数据预处理2. 抽取摘要3. 模型搭建与编译4. 模型训练与保存5. 图形化界面的开发6. 应用封装 系统测试1. 训练困惑度2. 测试效果3. 模型应用 工…

基于langchain-chatglm本地知识库得部署

项目的技术组成 LLM模型 大型语言模型(LLM,是large language model)是一种人工智能模型,旨在理解和生成人类语言。它们通过在大量文本数据上进行训练,能够执行多种任务,包括文本总结、翻译、情感分析等。L…

电信卡流量套餐超40G后,该如何解除网速限制?

在和朋友开视频的时候,朋友那边忽然网络中断了,过了会他给我发了一张图片过来,图片如下: 朋友的手机是电信的, 然后我们就在网上查各种解除限制的信息,首先我们按照短信上的提示发送SWFJ到10001&#xff0c…

流量控制与RateLimiter

一背景 如何提高系统的稳定性,简单来说除了加机器外就是服务降级、限流。加机器就是常说的分布式,从整个架构的稳定性角度看,一般SOA每个接口的所能提供的单位时间服务能力是有上限。假如超过服务能力,一般会造成整个接口服务停顿…

异常流量检测

项目目标是为了检测网络异常流量,防止网络攻击行为,本人参与了初期的工作,进行了文献阅读-数据处理-模型构建-参数优化工作。 网络攻击行为主要分为Dos、U2R、Probe等,其对应的流量异常特征为集合异常、点异常、上下文异常。 点异…

网络流量监控分析工具ntopng的安装与使用

我写这篇文章的起因:网上介绍ntopng这款工具的博客不算很多,而且安装方法基本没一个行得通(可能是版本更新太快了),我在安装过程中遇到了一些问题,想跟大家分享下;其次,在讲使用方法…

流量异常检测

https://mp.weixin.qq.com/s/9h-hOt630W6k077Rupc9CA 流量异常检测主要有以下三个难点: 流量的大小会随着用户行为发生变化。对于大部分百度云上的业务,白天的访问流量较高,深夜的访问流量较低。这使得流量水位值存在上下文相关性&#xff0…

Android应用流量统计——NetworkStatsManager使用

在没有Root的情况下,Android应用流量统计在6.0之前一直没有太好的办法,官方虽然提供了TrafficStats,但其主要功能是设备启动以来流量的统计信息,和时间信息无法很好的配合。最近再看TrafficStats类时,发现说明中提到&a…

仿设置流量使用——细讲android获取流量使用情况,以及解决调用流量接口不准问题(非TrafficStats,而是NetworkStatsHistory)

不积跬步无以至千里 流量使用情况,好多软件都会带这个功能,比如360的流量监控,好多之类的,手机管家都会带上这个流量计算的功能,连系统应用设置里面也会带一个流量使用情况的查看功能,为什么呢?因为流量的使用关乎到用户使用流量的计费,当流量使用了很多,会给用…

vnstat流量统计(2.8版本)

vnstat流量统计(2.8版本) vnStat 是一个基于控制台的 Linux 和 BSD 网络流量监视器,它为所选接口保留网络流量日志。它使用内核提供的网络接口统计信息作为信息源。这意味着 vnStat 实际上不会嗅探任何流量,并且无论网络流量率如…

中职流量包分析attack/capture(1)

我希望网络安全的世界大家可以贡献自己的一部分,而不是拿来自私自利 作者拿到的流量包和题目是有出入的,但是因为出的题大同小异所以能分析出来 attack 1. 分 析 attack.pcapng 数 据 包 文 件 ,通 过 分 析数据 包 attack.pcapng 找出恶意…

抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos

解决软件抓包时无网络和代理检测🚀 需要准备的工具: 安卓手机 vmos pro 需要抓包的软件 第一步:下载好相应版的本的vmos room 第二步:文件中转站->我要导入->导入对应真机需要抓包APP 第三步:测试软件在vmos…