unity pico开发 五 UI交互

devtools/2025/3/4 14:14:03/

文章目录

    • 添加画布
    • 添加交互组件
    • 取消传送射线对UI的控制
    • 解决按扳机键会传送的冲突
    • 按下按键呼出菜单,并让菜单出现在头的前方

添加画布

创建一个新画布,添加一个Button,将画布改为world space,然后缩放改为0.001,调整到合适的位置

添加交互组件

1 为画布添加Tracked Device Graphic Raycaster
在这里插入图片描述
2 找到eventSystem,删除自带的输入模块
在这里插入图片描述
然后添加XR UI Input Modeule
在这里插入图片描述

此时即可进行交互,triiger键是鼠标左键,注意画布本身不受interactionToolkit的layer影响,任何射线都可以控制他

取消传送射线对UI的控制

取消勾选这个
在这里插入图片描述

解决按扳机键会传送的冲突

由于我设置的传送按键是扳机键,在点击UI时会同时触发传送
解决思路是,当抓取射线在UI上时,禁用传送射线,用抓取射线进行UI交互
编写脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR.Interaction.Toolkit;public class ActivateTeleportationRay : MonoBehaviour
{public GameObject leftTeletportation;public GameObject rightTeletportation;public InputActionProperty leftActivate;public InputActionProperty rightActivate;public InputActionProperty leftCancel;public InputActionProperty rightCancel;public XRRayInteractor leftRay;public XRRayInteractor rightRay;private void Update(){leftRay.TryGetHitInfo(out Vector3 leftPos,out Vector3 leftNormal,out int leftNumber,out bool leftValid);//抓取射线指向了交互物体(UI或可抓取物体),没有按下抓取键,已经扣动了扳机,才激活传送射线leftTeletportation.SetActive(!leftValid&&leftCancel.action.ReadValue<float>() == 0&&leftActivate.action.ReadValue<float>() > 0.1f);rightRay.TryGetHitInfo(out Vector3 rightPos, out Vector3 rightNormal, out int rightNumber, out bool rightValid);rightTeletportation.SetActive(!rightValid&&rightCancel.action.ReadValue<float>() == 0&&rightActivate.action.ReadValue<float>() > 0.1f);}
}

在这里插入图片描述

按下按键呼出菜单,并让菜单出现在头的前方

编写如下脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;public class GameMenuManager : MonoBehaviour
{public GameObject menu;public InputActionProperty showButton;public Transform head;public float spawnDistance = 2;void Update(){if (showButton.action.WasPressedThisFrame()){menu.SetActive(!menu.activeSelf);menu.transform.position = head.position + new Vector3(head.forward.x,0,head.forward.z).normalized*spawnDistance;}menu.transform.LookAt(new Vector3(head.position.x, menu.transform.position.y, head.position.z));menu.transform.forward *= -1;}
}

新建一个物体“游戏菜单”,挂载脚本
将菜单的画布设置为游戏菜单的子物体
在这里插入图片描述
设置脚本的参数
在这里插入图片描述


http://www.ppmy.cn/devtools/164471.html

相关文章

Firefox缩小标签页高度以及自定义调整

转自&#xff1a;https://www.cnblogs.com/dirgo/p/17672716.html 有修改 新版的火狐标签页和地址栏太高了&#xff0c;比chrome和Edge都要高不少&#xff0c;有点浪费屏幕空间&#xff0c;不知道官方为什么这样设计。网上搜索&#xff0c;发现有一个紧凑模式&#xff0c;开了以…

图形化界面MySQL(MySQL)(超级详细)

目录 1.官网地址 1.1在Linux直接点击NO thanks…? 1.2任何远端登录&#xff0c;再把jj数据库给授权 1.3建立新用户 优点和好处 示例代码&#xff08;MySQL Workbench&#xff09; 示例代码&#xff08;phpMyAdmin&#xff09; 总结 图形化界面 MySQL 工具大全及其功能…

《Zookeeper 分布式过程协同技术详解》读书笔记-2

目录 zk的一些内部原理和应用请求&#xff0c;事务和标识读写操作事务标识&#xff08;zxid&#xff09; 群首选举Zab协议&#xff08;ZooKeeper Atomic Broadcast protocol&#xff09;文件系统和监听通知机制分布式配置中心, 简单Demojava code 集群管理code 分布式锁 zk的一…

以太坊基金会换帅,资本市场砸盘

Vitalik力挺Aya升任EF主席&#xff0c;理想主义冬日发芽&#xff1f; 作者&#xff1a;Wenser&#xff1b;编辑&#xff1a;秦晓峰 出品 | Odaily星球日报&#xff08;ID&#xff1a;o-daily&#xff09; 2 月 27 日&#xff0c;Bybit 15 亿资金被盗事件的最新调查结果将以太坊…

【STM32F103ZET6——库函数】4.串口通讯

目录 配置串口引脚 引脚图 中断优先级分组 使能时钟 配置中断优先级 配置串口 重写中断服务函数 清空中断标志位 获取中断标志位 接收函数 打印数据 例程 例程说明 main.h main.c usart.h usart.c 配置串口引脚 引脚图 配置引脚号 配置引脚速度 配置引脚的…

通过Python编程语言实现机器学习小项目教程案例

通过Python编程语言实现机器学习小项目教程案例 文章目录 通过Python编程语言实现机器学习小项目教程案例1. 项目背景与目标2. 开发环境准备2.1 所需工具2.2 环境搭建2.3 库版本验证3. 数据集介绍与加载3.1 数据集特性3.2 数据加载4. 数据探索与可视化4.1 数据概览4.2 可视化分…

碰一碰矩阵发视频源码:从 NFC 触发到 AI 矩阵剪辑

一、行业背景与技术趋势 随着移动支付和短视频的爆发式增长&#xff0c;"碰一碰" 交互&#xff08;如支付宝碰一碰支付&#xff09;已延伸至内容创作领域。本文将解析如何通过 NFC/NB-IoT 技术触发视频生成&#xff0c;并结合矩阵运算实现智能剪辑&#xff0c;构建虚…

【JMeter】JMeter之MQTT压测

文章目录 MQTT概念Jmeter压测MQTTMQTT服务器下载Jmeter MQTT插件测试MQTT测试思路和解决方法 MQTT概念 MQTT是什么 MQTT是用于物联网&#xff08;IoT&#xff09;的OASIS标准消息传递协议。它被设计为一种非常轻量级的发布/订阅消息传输&#xff0c;非常适合使用较少的代码占用…