pico+unity3d 射线交互教程

前期配置:环境配置参考教程一,手部模型参考教程二,场景基于上一篇搭建。

最终效果:手部射线(初始不可见)对准 UI 显示,按下手柄 Trigger 键与可交互 UI(如 Button、Toggle、Slider 等)互动。

制作 World Space 模式的 UI

创建 Canvas 物体,将其 Canvas 组件的 Render Mode(屏幕空间) 改为 World Space(世界空间),调整大小和位置,添加 UI 元素(如 Button、Toggle、Slider)。
在这里插入图片描述

添加 Tracked Device Graphic Raycaster 脚本

删除 Canvas 原有的 Graphic Raycaster 组件,添加 Tracked Device Graphic Raycaster 脚本,使 UI 能响应射线选中高亮,勾选 ignore reverse 选项可限制从正面点击。
在这里插入图片描述

添加 XR UI Input Module 脚本

创建ui画布的时候,会自动创建EventSystem 物体
在 EventSystem 物体添加 XR UI Input Module 脚本,移除原有的 Standalone Input Module 脚本,用于管理 XR 中 UI 的输入。
在这里插入图片描述

添加 UI 射线相关脚本

负责 UI 射线的物体和挂载的脚本
基于 XR Origin,在 Left Controller 和 Right Controller 下创建 UI Ray Interactor 物体,添加 XR Ray Interactor(Line Type 为 Straight Line)、Line Renderer、XR Interactor Line Visual 脚本、Sorting Group 组件。
在这里插入图片描述
在这里插入图片描述

为什么控制 UI 射线的物体不用添加 XR Controller

  • UI Ray Interactor 物体沿用父物体 Left Controller 或 RightHand Controller 的 XR Controller 处理输入,无需额外添加 XR Controller。
    ** Sorting Group 组件**
  • Sorting Group 这个组件给了我们自定义的功能,可以设置层级。是否需要添加这个组件就看大家的需求了

过滤 UI 射线的目标:

将 Left Controller 和 Right Controller 物体上 XR Ray Interactor 脚本的 Raycast Mask 从 Everything 改为 UI,避免射线在非 UI 物体上激活。
在这里插入图片描述

使射线射到 UI 上时才显示射线颜色
修改 XR Interactor Line Visual 脚本的 Invalid Color Gradient 透明度为 0,实现射线仅在射中 UI 时显示。
在这里插入图片描述

改变射线发射的位置
在手部模型下创建子物体作为射线起始点,调整位置和方向,将其拖入 XR Ray Interactor 脚本的 Ray Origin Transform。

在这里插入图片描述

通过按下手柄菜单键控制 UI 的显示与隐藏

  • 在 XRI Default Input Actions 中配置菜单键 Action,在 XRI LeftHand 中添加名为 Menu 的 Action,设置为 Button 类型,绑定 LeftHand 的 MenuButton。

  • 在这里插入图片描述

  • 编写 UIController 脚本,获取配置的 Action 并在按下时切换 Canvas 的显示状态,将脚本挂载到 LeftHand Controller 物体并关联 Action 和 Canvas。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;public class UIController : MonoBehaviour
{public InputActionReference menu;public Canvas canvas;private void Start(){if(menu != null){menu.action.Enable();menu.action.performed += ToggleMenu;}}private void ToggleMenu(InputAction.CallbackContext context){canvas.enabled = !canvas.enabled;}
}

注意:使用 Dropdown 时 UI 射线可能看不到,可在 UI Ray Interactor 下的 Sorting Group 中添加层解决。


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

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

相关文章

数学建模(7)——Logistic模型

一、马尔萨斯人口模型 import numpy as np import matplotlib.pyplot as plt# 初始人口 N0 100 # 人口增长率 r 0.02 # 时间段(年) t np.linspace(0, 200, 200)# 马尔萨斯人口模型 N N0 * np.exp(r * t)# 绘图 plt.plot(t, N, labelPopulation) plt.…

【源码阅读】Sony的go breaker熔断器源码探究

文章目录 背景源码分析总结 背景 在微服务时代,服务和服务之间调用、跨部门调用都是很常见的事,但这些调用都存在很多不确定因素,如核心服务A依赖的部门B服务挂掉了,那么A本身的功能将会受到直接的影响,而这些都会影响…

CSS 两种盒模型 box-sizing content-box 和 border-box

文章目录 Intro谨记box-sizing 两个不同赋值的效果区别?宽高的数值计算标准盒模型 box-sizing: content-box; box-sizing 属性的全局设置 Intro 先问一句:box-sizing 和它的两个属性值是做什么用的?以前我并不知道它的存在,也做…

使用 Redis 实现验证码、token 的存储,用自定义拦截器完成用户认证、并使用双重拦截器解决 token 刷新的问题

基于session实现登录流程 1.发送验证码 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信…

【数据挖掘】词云分析

目录 1. 词云分析 2. Python 中的 WordCloud 库 1. 词云分析 词云(Word Cloud)是数据可视化的一种形式,主要用于展示文本数据中单词的频率和重要性。它具有以下几种主要用途和意义: 1. 文本分析 • 识别关键主题:通…

AGI 之 【Hugging Face】 的【从零训练Transformer模型】之一 [ 如何寻找大型数据集 ] / [ 构建词元分析器 ] 的简单整理

AGI 之 【Hugging Face】 的【从零训练Transformer模型】之一 [ 如何寻找大型数据集 ] / [ 构建词元分析器 ] 的简单整理 目录 AGI 之 【Hugging Face】 的【从零训练Transformer模型】之一 [ 如何寻找大型数据集 ] / [ 构建词元分析器 ] 的简单整理 一、简单介绍 二、Transf…

数据结构day6

一、思维导图 二、模拟面试 typedef定义函数指针的方式typedef int(*p)(int,int);对void*指针的理解,相关应用万能指针,可以定义形参用来接收任意类型的指针变量,也可以定义函数用来返回任意类型的指针变量例如malloc函数在堆区申请内存&…

组队学习——支持向量机

本次学习支持向量机部分数据如下所示 IDmasswidthheightcolor_scorefruit_namekind 其中ID:1-59是对应训练集和验证集的数据,60-67是对应测试集的数据,其中水果类别一共有四类包括apple、lemon、orange、mandarin。要求根据1-59的数据集的自…

NPS配置域名访问本地应用

架构简易说明: 阿里云云服务器一台:NPS服务端 本地Linux服务器一台:NPS客户端,支持互联网 域名一个:解析到云服务器 1.在nps后台配置TCP隧道信息 其中,服务端口为云服务器的端口 ,不要与已存…

Linux ls命令详解

学习 Linux ,本质上是学习在命令行下熟悉使用 Linux 的各类命令; 1. Linux 命令通用格式 命令格式:命令 【-选项】【参数】(个别命令不遵循该格式) 短线(-)是区分选项和参数的标志,选项用来调整命令的功能…

陶德:边种田边写代码,3年300万行,一个人写出了“国产大满贯QT”

这是《开发者说》的第12期,本期我们邀请的开发者是陶德,从小在国企矿山里长大,计算机成绩是文科班里最差的一个,毕业两年找不到工作,睡过公园,讨过剩饭,用打魔兽世界的方式磨炼技术,…

PYTHON学习笔记(四、pyhton数据结构--列表)

(1)list列表 列表的含义是指:(1)一系列的按特定顺序排列的元素组成。(2)python中内置的可变序列。(3)在python中使用[]定义列表,元素与元素之间使用英文的逗…

数据结构 day4

目录 思维导图: 学习内容: 1. 链表的引入 1.1 顺序表的优缺点 1.1.1 优点 1.1.2 不足 1.1.3 缺点 1.2 链表的概念 1.2.1 链式存储的线性表叫做链表 1.2.2 链表的基础概念 1.3 链表的分类 2. 单向链表 2.1 节点结构体类型 2.2 创建链表 2.…

【手撕数据结构】拿捏单链表

目录 单链表介绍链表的初始化打印链表增加节点尾插头插再给定位置之后插入在给定位置之前插入 删除节点尾删头删删除给定位置的节点删除给定位置之后的节点 查找节点 单链表介绍 单链表也叫做无头单向非循环链表,链表也是一种线性结构。他在逻辑结构上一定连续&…

展望未来:利用【Python】结合【机器学习】强化数据处理能力

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 一、引言二、数据清洗与预处理三、特征工程四、数据可视化五、模型训练与评估六、模型部署与优化七、总结 在数据驱动的时代,数据处理与机器学习技术的结合已成为推动业务增长和创新的关键…

Redis 7.x 系列【25】集群部署

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 配置文件2.1 cluster-enabled2.2 cluster-config-file2.3 cluster-node-tim…

HAL库源码移植与使用之RTC时钟

实时时钟(Real Time Clock,RTC),本质是一个计数器,计数频率常为秒,专门用来记录时间。 普通定时器无法掉电运行!但RTC可由VBAT备用电源供电,断电不断时 这里讲F1系列的RTC 可以产生三个中断信号&#xff…

TYPE-C接口PD取电快充协议芯片ECP5701:支持PD 2.0和PD 3.0(5V,9V,12V,15V,20V)

随着智能设备的普及,快充技术成为了越来越多用户的刚需。而TYPE-C接口作为新一代的USB接口,具有正反插、传输速度快、充电体验好等优点,已经成为了快充技术的主要接口形式。而TYPE-C接口的PD(Power Delivery)取电快充协…

poi库简单使用(java如何实现动态替换模板Word内容)

目录 Blue留言: Blue的推荐: 什么是poi库? 实现动态替换 第一步:依赖 第二步:实现word模板中替换文字 模板word: 通过以下代码:(自己建一个类,随意取名&#xf…

[排序]hoare快速排序

今天我们继续来讲排序部分,顾名思义,快速排序是一种特别高效的排序方法,在C语言中qsort函数,底层便是用快排所实现的,快排适用于各个项目中,特别的实用,下面我们就由浅入深的全面刨析快速排序。…