Unity-VR中使用手柄点击UI

embedded/2025/3/26 4:25:58/

拓展BaseInputModule

使用鼠标模拟VR设备操作

using UnityEngine.EventSystems;
using UnityEngine;
namespace Framework.VR
{/// <summary>///按下鼠标左键,手柄Z轴方向获取UI对象,通知对象被点击/// </summary>public class VRInputModule : BaseInputModule{[SerializeField] Camera eventCamra;//画布使用的事件相机[SerializeField] Transform hand;//手柄变换public override void Process(){if (input.GetMouseButtonDown(0))//模拟VR设备按下{eventCamra.transform.position = hand.position;eventCamra.transform.rotation = hand.rotation;PointerEventData eventData = new PointerEventData(eventSystem);eventData.position = new Vector2(eventCamra.pixelWidth, eventCamra.pixelHeight) * 0.5f;eventSystem.RaycastAll(eventData, m_RaycastResultCache);//检测eventData.pointerCurrentRaycast = FindFirstRaycast(m_RaycastResultCache);m_RaycastResultCache.Clear();ExecuteEvents.ExecuteHierarchy(eventData.pointerCurrentRaycast.gameObject,eventData, ExecuteEvents.pointerDownHandler);//通知点击}}}
}

测试脚本:点击图片,图片改变颜色

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
///图片改变颜色
/// </summary>
[RequireComponent(typeof(Image))]
public class TestClick : MonoBehaviour, IPointerDownHandler
{Image image;Color color;private void Awake(){image = GetComponent<Image>();color = image.color;}public void OnPointerDown(PointerEventData eventData){color.r = Random.Range(0f, 1f);color.g = Random.Range(0f, 1f);color.b = Random.Range(0f, 1f);image.color = color;}
}

场景设置

在这里插入图片描述

  1. 新建相机命名为EventCamera,禁用相机组件
  2. 新建Canvas设置为World Space模式,设置事件相机为上述相机
  3. 新建Image添加TestClick脚本
  4. 新建立方体命名为VR Hand
  5. EventSystem禁用Standalone Input Module组件,添加VRInputModule脚本
  6. VRInputModule脚本设置事件相机和VR Hand

运行

移动立方体遮挡图片,按下鼠标左键,图片改变颜色;
在这里插入图片描述
移动立方体远离图片,按下鼠标左键,图片颜色无变化。
在这里插入图片描述


http://www.ppmy.cn/embedded/174504.html

相关文章

在C语言基础上学Java【Java】【一】

众所周知&#xff0c;Java是C风格的语言&#xff0c;对于学过C语言的人学Java可以快速适应。 废话不多说&#xff0c;直接边看代码边学。 数据类型&#xff0c;输入和输出 import java.util.Scanner;//为了使用Scanner public class a1 {//a1是类名&#xff0c;就是文件名&am…

嵌入式硬件篇---WIFI模块

文章目录 前言一、核心工作原理1. 物理层&#xff08;PHY&#xff09;工作频段2.4GHz5GHz 调制技术直接序列扩频正交频分复用高效数据编码 2. 协议栈架构MAC层Beacon帧4次握手 3. 核心工作模式 二、典型应用场景1. 智能家居系统远程控制环境监测视频监测 2. 工业物联网设备远程…

一种很新的“工厂”打开方式---智慧工厂

随着信息技术的不断进步&#xff0c;特别是数字化、网络化、智能化技术的快速发展&#xff0c;传统的工厂管理模式已经难以满足现代企业对于生产效率、安全管理以及决策支持等方面的需求&#xff0c;智能制造已成为全球制造业发展的主流趋势。 由于工厂实时数据的多样性、复杂性…

Swagger2 使用教程

Swagger2 使用教程 Swagger&#xff08;现称为 OpenAPI Specification&#xff09;是一套用于描述、生成、消费和可视化 RESTful 风格 Web 服务的工具和规范。Swagger 2 是 OpenAPI 规范的一个重要版本&#xff0c;广泛应用于 API 的设计、文档化、测试和客户端代码生成。本文…

私域电商的进化逻辑与技术赋能:基于开源AI大模型与S2B2C商城的创新融合研究

摘要&#xff1a;本文基于私域电商"人格域品牌域直播电商"的三维架构&#xff0c;探讨开源AI大模型、AI智能名片、S2B2C商城及小程序源码等技术在私域流量运营中的创新应用。通过解析技术赋能路径与小米生态链等典型案例&#xff0c;揭示私域电商作为未来商业基础设施…

赛逸展2025创新模式,以科技创新奖赋能展位战略价值

CES Asia2025第七届亚洲消费电子技术贸易展&#xff08;赛逸展&#xff09;主办方负责人提出的创新理念&#xff0c;为展会的战略价值注入了新活力&#xff1a;“我们不是在卖展位&#xff0c;而是在分发政策红利入场券——企业每平方米的展位投入&#xff0c;都可能通过科技创…

【QA】观察者模式在QT有哪些应用?

1. 信号与槽机制 Qt的**信号与槽&#xff08;Signals & Slots&#xff09;**是观察者模式的典型实现&#xff0c;通过元对象系统&#xff08;Meta-Object System&#xff09;实现松耦合通信。 核心特点&#xff1a; 类型安全&#xff1a;编译时检查参数匹配跨线程支持&…

C#零基础入门篇(18. 文件操作指南)

## 一、文件操作基础 在C#中&#xff0c;文件操作主要通过System.IO命名空间中的类来实现&#xff0c;例如File、FileStream、FileInfo等。 ## 二、常用文件操作方法 ### &#xff08;一&#xff09;文件读取 1. **使用File.ReadAllText方法读取文件内容为字符串** …