当前位置: 首页 > article >正文

Unity-VR中使用手柄点击UI

拓展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.kler.cn/a/598453.html

相关文章:

  • Deepseek浪潮下,汽车芯片开启“大变局”,谁将领跑?
  • 【算法】十大排序算法(含时间复杂度、核心思想)
  • 从入门到精通【MySQL】 CRUD
  • 使用LLaMA Factory微调导出模型,并用ollama运行,用open webui使用该模型
  • HTB 笔记 | XSS 篡改攻击学习指南
  • Entity Framework框架
  • SpringCloud-consul
  • 【拒绝算法PUA】LeetCode 2116. 判断一个括号字符串是否有效
  • 如何通过less在vue2中达到切换皮肤的目的
  • 【Unity3D】摄像机适配场景以及Canvas适配
  • 认知篇#5:什么是激活函数?激活函数有什么用?几个简单激活函数的简介(1)
  • C++调用ffmpeg解复用、解码案例
  • STM32基础教程——定时器
  • 【nodejs】爬虫路漫漫,关于nodejs的基操
  • CentOS与Rocky 命令区别
  • 【MySQL笔记】数据类型
  • 2024年数维杯数学建模B题生物质和煤共热解问题的研究解题全过程论文及程序
  • MySQL 处理重复数据:保留一条与两条的实现方案
  • 力扣 797. 所有可能的路径 解析JS、Java、python、Go、c++
  • 使用 CMake 来编译和运行C/C++ 项目流程