【Oculus Interaction SDK】(七)使用射线进行交互(物体 & UI)
前言
这篇文章是【Oculus Interaction SDK】系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言。如果文章的内容已经不适用于新版本了,也可以直接联系我,我会持续更新文章内容。
当前适用版本:
- Unity 版本:2021.3.7f1c1
- Oculus Interaction SDK 版本:47.0
文章最近更新日期:2023.02.13
为控制器和手添加射线交互功能
为控制器添加射线交互
在 Project 窗口搜索 ControllerRayInteractor,使其成为 ControllerInteractors 的子物体

将射线与控制器绑定,并把 ControllerRayInteractor 添加到交互列表(此步开始右手与左手操作类似,不做演示)


效果如下

为手势追踪添加射线交互
在 Project 窗口搜索 ControllerRayInteractor,使其成为 ControllerInteractors 的子物体

将射线与对应的手绑定,并把 HandRayInteractor 添加到交互列表(此步开始右手与左手操作类似,不做演示)


效果如下

制作可与射线交互的物体
我们现在要做一个可以响应射线操作的物体
新建一个 Cube 命名为 Ray Cube,并为其添加 Collider Surface 和 Ray Interactable 组件

为了更方便地观察射线的效果,来为 Ray Cube 添加一个 Interactable Unity Event Wrapper 组件,并添加几组事件

现在就可以清楚地看到射线触发的效果了

制作可与射线交互的 UI
新建一个空物体 Ray UI,为其添加一个 Canvas 作为子物体,Canvas 的 Render Mode 修改为 World Space
随便放几个控件上去,摆放好位置

在 Ray UI 下创建空的子物体 UI Collider 和 UI PlaneSurface

给 UI Collider 添加 Box Collider 组件,调整碰撞器边界使其与 UI 大小保持一致

继续添加 Collider Surface 组件,并在 Collider 处引用自身的 Box Collider

为 UI PlaneSurface 添加 Plane Surface 组件

找到 EventSystem 移除 Standalone Input Module 组件,添加 Pointable Canvas Module 组件

最后回到 Canvas,添加 Ray Interactable 组件和 Pointable Canvas 组件并完成引用

大功告成!

参考资料
https://www.youtube.com/watch?v=bkn-daQzALQ&t=22s
https://www.youtube.com/watch?v=q2auix_Vqd8&t=315s
【Oculus Interaction SDK】(七)使用射线进行交互(物体 & UI)的更多相关文章
- 【Oculus Interaction SDK】(六)实体按钮 && 按压交互
前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...
- 【Oculus Interaction SDK】(一)设置 VR 相机与控制器 && 实现简单的抓取功能
前言 前段时间 Oculus 的 SDK 频繁更新,很多已有的教程都不再适用于现在的版本了.本系列文章的主要目的是记录现版本常见功能的实现方法,便于自己后续开发.当然,不排除我文章刚写完 SDK 又变 ...
- 【Oculus Interaction SDK】(五)设置不同的抓握手势
前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...
- 【Oculus Interaction SDK】(三)限制可操作物体的移动 / 旋转
前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...
- 【Oculus Interaction SDK】(二)抓取释放效果的物理优化
前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...
- cocos 射线检测 3D物体 (Sprite3D点击)
看了很多朋友问怎么用一个3D物体做一个按钮,而且网上好像还真比较难找到答案, 今天翻了一下cocos源码发现Ray 已经封装了intersects函数,那么剩下的工作其实很简单了, 从屏幕的一个poi ...
- [Xcode 实际操作]七、文件与数据-(23)UI Testing系统界面测试功能的使用
目录:[Swift]Xcode实际操作 本文将演示UI Testing系统界面测试功能的使用. 如果项目中尚未引入界面测试功能,请点击项目属性面板->[General]面板左下角的[+]图标 - ...
- Gvr SDK for Unity 分析(一)
Gvr SDK概述 通过谷歌VR SDK for unity 为Android和iOS 构建虚拟现实应用程序 unity SDK在Android上支持构建应用程序for daydream 和 card ...
- Unity5.6之前版本VRTK插件基础交互
一.VR运行环境配置: 安装steam,在steam上安装SteamVR驱动. 在Unity项目中需要导入VRTool插件包(已上传服务器),里面包含两个插件一个是SteamVR插件,一个是VRTK插 ...
- ue4 3dui交互相关
1 建立3d ui 新建一个Actor蓝图,上面加上Widget控件,widget Class选择任意ui蓝图,把这个actor蓝图放到场景任意合适位置 2 3dui交互 在合适位置(比如主角的相机上 ...
随机推荐
- C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)
命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...
- Arch Linux 的安装
Arch Linux 的安装 作者:Grey 原文地址: 博客园:Arch Linux 的安装 CSDN:Arch Linux 的安装 版本 Arch Linux:2022.07.01 VMware ...
- hwlog----hwlog_adaptor.go
// Copyright(c) 2021. Huawei Technologies Co.,Ltd. All rights reserved.// Package hwlog provides the ...
- 【云原生 · Kubernetes】搭建Harbor仓库
[云原生 · Kubernetes]Kubernetes基础环境搭建 接着上次的内容,后续来了! 4.部署Harbor仓库 在master节点执行脚本k8s_harbor_install.sh即可完成 ...
- Kubernetes_k8s持久化存储(亲测可用)
一.前言 新建具有两个节点的k8s集群,主节点(master节点/m节点)的ip地址是192.168.100.150,从节点(w1节点)的ip地址是192.168.100.151. 本文操作如何将po ...
- [ERROR] mariadbd: The table 'INNODB_BUFFER_PAGE' is full
问题描述:将information_schema导出sql文件到新库中恢复,sql中的表都是临时表,存储引擎都是memory,在导入的过程中实际大量会占用临时表. 报错信息:ERROR 1114 (H ...
- (GCC) C++代码中使用#pragma GCC optimize / #pragma G++ optimize
科学计算用优化 经过实验证明这个命令优化效果最好,把我的 1.2S 的 FFT 优化到了 0.4S使用 pragma 命令优化程序: #pragma GCC optimize("Ofast, ...
- 关于python函数传参
必须参数 最常见的传参 def say(arg): print(arg) say("Hello world") 输出: Hello world 默认参数 def say(arg, ...
- Go DevOps大厂运维平台开发进阶实战营
使用 Jenkinsfile 创建流水线已报名老男孩运维课,见底下评论.enkinsfile 是一个文本文件,它包含 Jenkins 流水线的定义,并被检入源代码控制仓库.Jenkinsfile 将整 ...
- java时区相关问题(被恶心到了)
在项目开发中,遇到了mysql5.7数据库相关的时区问题.整理如下: 问题一:在使用swagger测试接口时,数据库记录的时间和输入的不一致.如下图: swagger中输入的是:"recei ...