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 中添加层解决。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——栈(顺序结构)

一、栈的定义 栈是一种数据结构,它是一种只能在一端进行插入和删除操作的特殊线性表。这一端被称为栈顶,另一端被称为栈底。栈按照后进先出(LIFO)的原则进行操作(类似与手枪装弹后射出子弹的顺序)。在计算…

【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

前端调试技巧:动态高亮渲染区域

效果: 前端界面的渲染过程、次数,会通过高亮变化来显示,通过这种效果排除一些BUG 高亮 打开方式 F12进入后点击ESC,进入rendering,选择前三个即可(如果没有rendering,点击橘色部分勾选上&…

ArrayList.subList的踩坑

需求描述&#xff1a;跳过list中的第一个元素&#xff0c;获取list中的其他元素 原始代码如下&#xff1a; List<FddxxEnterpriseVerify> companyList fddxxEnterpriseVerifyMapper.selectList(companyQueryWrapper);log.info("获取多个法大大公司数据量为&#…

深入理解Linux网络(三):TCP对象创建

深入理解Linux网络&#xff08;三&#xff09;&#xff1a;TCP对象创建 TCP对象创建inet_createsock_init_data TCP对象创建 常见的三句TCP编程&#xff1a; int main() {int sk socket(AF_INET, SOCK_STREAM, 0);connect(sk, ...)recv(sk, ...) }简单的两三⾏代码&#xff…

酷炫末世意境背景404单页HTML源码

源码介绍 酷炫末世意境背景404单页HTML源码&#xff0c;背景充满着破坏一切的意境&#xff0c;彷佛末世的到来&#xff0c;可以做网站错误页或者丢失页面&#xff0c;将下面的代码放到空白的HTML里面&#xff0c;然后上传到服务器里面&#xff0c;设置好重定向即可 效果预览 …

【面试题】Redo log和Undo log

Redo log 介绍Redo log之前我们需要了解一下&#xff0c;mysql数据操作的流程&#xff1a; 上述就是数据操作的流程图&#xff0c;可以发现sql语句并不是直接操作的磁盘而是通过操作内存&#xff0c;然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域&#xff1a; 缓…

从安装Node到TypeScript到VsCode的配置教程

从安装Node到TypeScript到VsCode的配置教程 1.下载Node安装包&#xff0c; 链接 2.双击安装包&#xff0c;选择安装路径&#xff0c;如下&#xff1a; 3.一直点击下一步&#xff0c;直至安装结束即可&#xff1a; 这个时候&#xff0c;node会默认配置好环境变量&#xff0c;并且…

如何学习Hbase:糙快猛的大数据之路( 用讲故事的方式)

引言 还记得我刚踏入大数据领域的那天&#xff0c;就像一只初生的小鹿&#xff0c;对着HBase这座大山瑟瑟发抖。 但是&#xff0c;朋友们&#xff0c;让我告诉你一个秘密&#xff1a;学习就应该糙快猛&#xff01;不要追求一步到位的完美&#xff0c;在不完美中前进才是最高效…

/秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和、括号生成}

文章目录 引言复习数组中的第K大的最大元素复习实现参考实现 新作回溯模板46 全排列个人实现参考实现 子集个人实现参考实现 电话号码的字母组合复习实现 组合总和个人实现参考实现 括号生成复习实现 总结 引言 昨天的科大讯飞笔试做的稀烂&#xff0c;今天回来好好练习一下&a…

GIT命令学习 二

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

opencv,连续拍摄多张图像求平均值减少噪点

对于照度低或者相机质量差造成的密集的随机小噪点&#xff0c;可以通过拍摄多张图像求平均值的方法来减少噪点&#xff0c;获得较为清晰的画面。 import cv2 import numpy as npclass FilterCamera:def __init__(self, cap, in_frame, num):self.cap cap # 定义的相机self.n…

Scaling Vision Transformers to 22 Billion Parameters

Scaling Vision Transformers to 22 Billion Parameters 主要贡献 Vision Transformer&#xff08;ViT&#xff09;的大规模扩展&#xff1a;尽管Transformer架构在自然语言处理&#xff08;NLP&#xff09;领域取得了巨大成功&#xff0c;但在计算机视觉&#xff08;CV&#…

NVidia 的 gpu 开源 Linux Kernel Module Driver 编译 安装 使用

见面礼&#xff0c;动态查看gpu使用情况&#xff0c;每隔2秒钟自动执行一次 nvidia-smi $ watch -n 2 nvidia-smi 1&#xff0c;找一台nv kmd列表中支持的 GPU 的电脑&#xff0c;安装ubuntu22.04 列表见 github of the kmd source code。 因为 cuda sdk 12.3支持最高到 ubu…

【JavaEE】AQS原理

本文将介绍AQS的简单原理。 首先有个整体认识&#xff0c;全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架。常用的ReentrantLock、Semaphore、CountDownLatch等都有实现它。 本文参考&#xff1a; 深入理解AbstractQueuedSynchronizer只需…

Haproxy服务

目录 一.haproxy介绍 1.主要特点和功能 2.haproxy 调度算法 3.haproxy 与nginx 和lvs的区别 二.安装 haproxy 服务 1. yum安装 2.第三方rpm 安装 3.编译安装haproxy 三.配置文件详解 1.官方地址配置文件官方帮助文档 2.HAProxy 的配置文件haproxy.cfg由两大部分组成&…

HTML2048小游戏

源代码在效果图后面 效果图 源代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>2048 Game&l…

UDP客户端、服务端及简易聊天室实现 —— Java

UDP 协议&#xff08;用户数据包协议&#xff09; UDP 是无连接通信协议&#xff0c;即在数据传输时&#xff0c;数据的发送端和接收端不建立逻辑连接&#xff0c;简单来说&#xff0c;当客户端向接收端发送数据时&#xff0c;客户端不会确认接收端是否存在&#xff0c;就会发出…

使用llama-cpp-python制作api接口

文章目录 概要整体操作流程技术细节小结 概要 使用llama-cpp-python制作api接口&#xff0c;可以接入gradio当中&#xff0c;参考上一节。 llama-cpp-python的github网址 整体操作流程 下载llama-cpp-python。首先判断自己是在CPU的环境下还是GPU的环境下。以下操作均在魔搭…

鑫创SSS1700USB音频桥芯片USB转IIS芯片

鑫创SSS1700支持IIC初始外部编&#xff08;EEPROM选项),两线串行总线&#xff08;I2C总线&#xff09;用于外部MCU控制整个EEPROM空间可以通过MCU访问用于主机控制同步的USB HID外部串行EEPROM&#xff08;24C02~24C16&#xff09;接口&#xff0c;用于客户特定的USB视频、PID、…