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

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

运行

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

相关文章:

  • c语言 逆序存放并输出的题【基础】
  • hackmyvm-connection
  • 32、如何解决vector中删除元素导致的迭代器失效问题?
  • 【编译原理】一二章
  • 手机换IP有什么用?最新换IP方法
  • 【秣厉科技】LabVIEW工具包——OpenCV 教程(11):人脸检测与识别
  • Android第五次面试总结(网络补充)
  • Thinkphp指纹识别
  • Kubernets命名空间
  • QT6通过DeepSeek API上传附件实现
  • 【文件操作】IO流
  • MPLS基础---通俗易懂
  • 通过启用Ranger插件的Hive审计日志同步到Doris做分析
  • Android studio无法查看源码
  • 小酌SM2的背景、数字签名
  • 慕慕手记项目日记 首页数据的渲染,使用js 2025-3-16
  • 【Linux内核系列】:动静态库详解
  • 企业数据治理解决方案(46页PPT)(文末有下载方式)
  • CMAC算法原理
  • springboot 打包 failed with MalformedInputException: Input length = 1
  • 去年上海全市博物馆接待观众约4087万人次,同比增31.9%
  • “南昌航空一号”成功发射,赣江鄱阳湖有了专属卫星守护
  • 浙江美术馆馆长人民日报撰文:打开更辽阔的审美场域
  • 解放日报:“感觉全世界人都在上海买买买”
  • 哪条线路客流最大?哪个站点早高峰人最多?上海地铁一季度客流报告出炉
  • 北邮今年本科招生将首次突破四千人,新增低空技术与工程专业