SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)

这篇具有很好参考价值的文章主要介绍了SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上章介绍了用手柄与UGUI交互,但在实际的项目开发过程中与UGUI交互,几乎都是使用手柄射线点击进行交互。
本章主要介绍利用SteamVR_LaserPointer进行UGUI的射线交互,但这种方式也是需要挂载Collider,并且SteamVR_LaserPointer功能也不是很全,所以这种方式只能进行简单GUI的交互,如Button、Toggle、DropDown,像Slider、ScrollRect等需要拖动的GUI无法用这种方式来实现,后面的章节中会使用自定义UGUI机制来实现完整的UGUI交互系统。

一、前期准备

新建场景,删除默认相机,将Player拖拽进入场景内
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
新建Plane,修改为Floor,上一个黑色材质球,Transform信息如下:
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)

二、添加UI及组件

结构如下,添加画布、面板、按钮、选项框、下拉框
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
1、Canvas/画布信息
Render Mode要设置为World Space/世界模式
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
2、Button信息
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
3、Toggle信息
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
4、DropDown信息
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
5、DropDown元素信息
SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
挂载Collider,即可使用射线和UGUI进行交互。

三、编写SteamVR_UIPointer脚本及挂载

using UnityEngine;
using Valve.VR.Extras;
using UnityEngine.EventSystems;

public class SteamVR_UIPointer : MonoBehaviour
{
    private SteamVR_LaserPointer laserPointer;

    [Header("显示激光"), SerializeField]
    private bool enablePointer = true;

    private void Awake()
    {
        laserPointer = GetComponent<SteamVR_LaserPointer>();
    }

    private void Start()
    {
        if (!enablePointer)
        {
            laserPointer.enabled = false;
            return;
        }
        else
        {
            laserPointer.PointerIn += LaserPointer_PointerIn;
            laserPointer.PointerClick += LaserPointer_PointerClick;
            laserPointer.PointerOut += LaserPointer_PointerOut;
        }
    }

    private void LaserPointer_PointerIn(object sender, PointerEventArgs e)
    {
        IPointerEnterHandler pointerEnterHandler = e.target.GetComponent<IPointerEnterHandler>();
        if (pointerEnterHandler != null)
        {
            pointerEnterHandler.OnPointerEnter(new PointerEventData(EventSystem.current));
        }
    }

    private void LaserPointer_PointerClick(object sender, PointerEventArgs e)
    {
        IPointerClickHandler pointerClickHandler = e.target.GetComponent<IPointerClickHandler>();
        if (pointerClickHandler != null)
        {
            pointerClickHandler.OnPointerClick(new PointerEventData(EventSystem.current));
        }
    }

    private void LaserPointer_PointerOut(object sender, PointerEventArgs e)
    {
        IPointerExitHandler pointerExitHandler = e.target.GetComponent<IPointerExitHandler>();
        if (pointerExitHandler != null)
        {
            pointerExitHandler.OnPointerExit(new PointerEventData(EventSystem.current));
        }
    }
}

思路很简单,SteamVR_LaserPointer脚本自带三个事件,分别为进入、点击、离开物体,我们通过该脚本,监听这三个事件,将IPointer接口对应的EventSystem与这三个事件对应的Target映射上即可。
该脚本需要挂载到Player下面的RightHand上,并且RightHand上还需要挂载SteamVR_LaserPointer组件。SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)
通过以上操作,进入游戏体验,游戏运行后右手手柄上发出了一条射线,射线移动到UGUI扣动扳机键,即可与UGUI进行交互。文章来源地址https://www.toymoban.com/news/detail-423940.html

到了这里,关于SteamVR 2.x UGUI-使用SteamVR_LaserPointer进行射线交互(6)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity所以说是玩具, UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

    PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。 PhysicsRaycaster通过发射一条射线来检测UI元素。当射线与UI元素相交时,PhysicsRaycaster会将事件传递给相应的UI元素。 Event

    2024年02月22日
    浏览(43)
  • Unity UGUI的Physi会随机改变csRaycaster (物理射线检测)组件的介绍及使用

    这里只介绍liteflow的简单基础使用以及作者对liteflow进行可视化扩展的相关阐述 背景:对于拥有复杂业务逻辑的系统承载着核心业务逻辑,这些核心业务逻辑涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。项目几经易手,维护的成本就

    2024年02月20日
    浏览(69)
  • Unity UGUI的PhysicsRayc可变化、可扩展aster (物理射线检测)组件的介绍及使用

    最近工作中需要用到MongoDB的事务操作,因此参考了一些资料封装了一个小的组件,提供基础的CRUD Repository基类 和 UnitOfWork工作单元模式。今天,就来简单介绍一下这个小组件。 MongoDB在4.2版本开始全面支持了多文档事务,至今已过了四年了,虽然我们可能没有在项目中用Mon

    2024年02月20日
    浏览(51)
  • Unity UGUI的PhysicsRaycaster (物算法能力可视化理射线检测)组件的介绍及使用

    Outline(描边)组件是Unity UGUI中的一种特效组件,用于给UI元素添加描边效果。通过设置描边的颜色、宽度和模糊程度,可以使UI元素在视觉上更加突出。 Outline(描边)组件通过在UI元素周围绘制多个相同的UI元素,并设置不同的颜色和大小,从而实现描边的效果。描边的宽度和模糊

    2024年02月07日
    浏览(45)
  • Unity UGUI的Physics2DRaycaster (2D物理射线检测)组件的介绍及使用

    Physics2DRaycaster是Unity中的一个UGUI组件,用于在2D场景中进行物理射线检测。它可以检测鼠标或触摸事件在UI元素上的碰撞,并将事件传递给相应的UI元素。 Physics2DRaycaster通过发射一条射线来检测UI元素的碰撞。当射线与UI元素相交时,Physics2DRaycaster会将事件传递给相应的UI元素,

    2024年02月15日
    浏览(50)
  • Unity UGUI使用Text组件位图字体进行自适应大小

    1.首先我们需要把位图字体导入到unity中,然后利用插件转化一下 我使用的是BMFont 2.然后我们就可以看到生成了四个文件,其中我们主要注意的是.fontsettings文件, 我们主要修改的就是 Character Rect里面的各个参数,至于具体是什么 ,大家有兴趣的可以去搜索, 好了 我们直接上代码 把

    2024年02月05日
    浏览(55)
  • 用于雷达横截面计算的射击和弹跳射线方法,使用在 GPU 上运行的 BVH算法进行加速_C++

    雷达横截面(RCS)是一个重要的参数,用于描述目标在雷达探测中的反射特性。在现代防御系统中,RCS的计算和优化是至关重要的。本文将介绍一种用于计算雷达横截面的射击和弹跳射线方法,并使用在GPU上运行的BVH(Bounding Volume Hierarchy)算法进行加速。 射击和弹跳射线方

    2024年02月13日
    浏览(37)
  • 【游戏开发解答】Unity中对UGUI的Image进行倾斜变形(UGUI | 精灵图 | OnPopulateMesh | 顶点偏移 | 变形)

    本文最终效果 一、前言 嗨,大家好,我是新发。 前同事问了我一个问题,如何将 UGUI 的 Image 进行变形,变成斜斜的, 最直接的就是出图的时候直接就画成斜的,我们不讨论这种情况,这里我们单纯的从技术实现上去思考能不能在 Unity 中通过 UGUI 的 Image 对图片进行倾斜变形

    2024年02月04日
    浏览(56)
  • [Unity]VRTK_v4使用指南(配置)和Pico 4开发笔记(SteamVR)

    1这些插件的关系 先随便讲一下这些插件的关系和使用,我只使用过PICO4,所以一起都是基于pico4设备来说的 1.1.1  PICO SDK+XRI 首先在pico自带的安卓平台上面开发,需要使用pico的sdk作为输入输出,然后使用XRI包,这个包里面帮我们写好了很多函数,比如传送和抓取,所以开发很

    2024年02月08日
    浏览(57)
  • unity 2D射线的使用方法

    Ray2D ray;     void Update()     {         ray = new Ray2D(transform.position, Vector2.right);         RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction,10);         //Debug.DrawRay(ray.origin,ray.direction,Color.blue);         if (info.collider != null)         {             if (info.transform.gameO

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包