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

Unity MRTK Hololens2眼动交互

/** ==================================================================================================================** UnityVersion : 2021.3.6f1* Description : 眼部交互基类* Author: * CreateTime : 2023-10-11  09:43:20* Version : V1.0.0* * ==================================================================================================================*/using System.Collections.Generic;
using Microsoft.MixedReality.Toolkit.Input;
using UnityEngine;namespace MRTKExtend.EyeTracking
{[RequireComponent(typeof(Collider))]public abstract class BaseFocus : MonoBehaviour, IMixedRealityFocusHandler, IMixedRealityFocusChangedHandler{[SerializeField] [Tooltip("是否启用焦点?")] private bool focusEnabled = true;/// <summary>/// 是否为启用了焦点/// </summary>public virtual bool FocusEnabled{get => focusEnabled;set => focusEnabled = value;}/// <summary>/// 此对象当前是否有焦点/// </summary>public virtual bool HasFocus => FocusEnabled && Focusers.Count > 0;/// <summary>/// 当前聚焦此对象的列表/// </summary>public List<IMixedRealityPointer> Focusers { get; } = new(0);/// <summary>/// 焦点进入/// </summary>public virtual void OnFocusEnter(FocusEventData eventData){}/// <summary>/// 焦点退出/// </summary>public virtual void OnFocusExit(FocusEventData eventData){}public virtual void OnBeforeFocusChange(FocusEventData eventData){//如果是新的目标对象,将指针添加到焦点列表。if (eventData.NewFocusedObject == gameObject){eventData.Pointer.FocusTarget = this;Focusers.Add(eventData.Pointer);}//如果是旧的聚焦目标对象,从列表中删除指针。else if (eventData.OldFocusedObject == gameObject){Focusers.Remove(eventData.Pointer);//如果没有新的焦点目标,从指针中清除焦点目标。if (eventData.NewFocusedObject == null){eventData.Pointer.FocusTarget = null;}}}public virtual void OnFocusChanged(FocusEventData eventData){}}
}
/** ==================================================================================================================** UnityVersion : 2021.3.6f1* Description : 眼部交互* Author: * CreateTime : 2023-10-11  09:21:40* Version : V1.0.0* * ==================================================================================================================*/using System;
using Microsoft.MixedReality.Toolkit.Input;
using UnityEngine;namespace MRTKExtend.EyeTracking
{public abstract class BaseEyeFocus : BaseFocus{[Tooltip("可配置的持续时间,用于在用户查注释目标的时间超过此持续时间时触发事件。")] [SerializeField] [Range(0, 20)]private float timeToTriggerDwellInSec = 5;/// <summary>/// 停留时间/// </summary>private DateTime _dwellTimer;/// <summary>/// 是否持续注视/// </summary>private bool _isDwelling = false;/// <summary>/// 是否注视/// </summary>private bool _hadFocus = false;/// <summary>/// 处理光标进入目标时的突出显示目标。/// </summary>protected virtual void Update(){if (!HasFocus && _hadFocus){OnEyeFocusStop();_isDwelling = false;_hadFocus = false;}else if (HasFocus){if (!_hadFocus){OnEyeFocusStart();_dwellTimer = DateTime.UtcNow;_hadFocus = true;}else{OnEyeFocusStay();if (!_isDwelling && (DateTime.UtcNow - _dwellTimer).TotalSeconds > timeToTriggerDwellInSec){OnEyeFocusDwell();_isDwelling = true;}}}}/// <inheritdoc />public override void OnBeforeFocusChange(FocusEventData eventData){//如果注视新的目标对象,将指针添加到焦点列表。if (eventData.NewFocusedObject == gameObject &&eventData.Pointer.InputSourceParent.SourceType == InputSourceType.Eyes){eventData.Pointer.FocusTarget = this;Focusers.Add(eventData.Pointer);}//如果注视是旧的聚焦目标对象,从列表中删除指针。else if (eventData.OldFocusedObject == gameObject){Focusers.Remove(eventData.Pointer);// 如果没有新目标,从指针中清除焦点目标if (eventData.NewFocusedObject == null){eventData.Pointer.FocusTarget = null;}}}/// <summary>///一旦眼睛凝视射线开始与该目标的碰撞体接触,就会触发。/// </summary>protected virtual void OnEyeFocusStart(){}/// <summary>/// 在眼睛凝视射线与该目标的碰撞体持续接触时触发。/// </summary>protected virtual void OnEyeFocusStay(){}/// <summary>///一旦眼睛凝视射线停止与该目标的碰撞体,就会触发。/// </summary>protected virtual void OnEyeFocusStop(){}/// <summary>/// 一旦眼睛凝视射线与该目标的碰撞体接触指定时间后触发。/// </summary>protected virtual void OnEyeFocusDwell(){}}
}
/** ==================================================================================================================** UnityVersion : 2021.3.6f1* Description : 功能描述* Author: * CreateTime : 2023-10-10  16:09:27* Version : V1.0.0* * ==================================================================================================================*/using MRTKExtend.EyeTracking;
using UnityEngine;public class EyeTrackingTest : BaseEyeFocus
{protected override void OnEyeFocusStay(){Debug.Log("OnEyeFocusStay");//todo somethingRotateHitTarget();}protected override void OnEyeFocusStart(){Debug.Log("OnEyeFocusStart");//todo something}protected override void OnEyeFocusStop(){Debug.Log("OnEyeFocusStop");//todo something}protected override void OnEyeFocusDwell(){Debug.Log("OnEyeFocusDwell");//todo something}private void RotateHitTarget(){transform.localEulerAngles += new Vector3(0, 0.1f, 0);}
}

在场景中新建一个物体,将EyeTrackingTest组件挂载到新建的物体上就可以了
在这里插入图片描述

相关文章:

Unity MRTK Hololens2眼动交互

/** ** UnityVersion : 2021.3.6f1* Description : 眼部交互基类* Author: * CreateTime : 2023-10-11 09:43:20* Version : V1.0.0* * */using System.Collections.Generic; using Microsoft.MixedReality.Toolkit.Input; using UnityEngine;namespace MRTKExtend.EyeTrackin…...

接口自动化测试 —— 协议、请求流程

一、架构 CRM客户关系管理系统 SAAS Software As A Service 软件即服务 PAAS Platform AS A Service 平台即服务 快速交付→ 快&#xff1a;自己去干、有结果、事事有回音、持续改进 单体架构——》垂直架构——》面向服务架构——》微服务架构&#xff08;分布式&#xf…...

JDK安装详细教程

JDK安装详细教程 国内大多数使用的是1.8的版本&#xff0c;对于初学者来说这个版本很友善&#xff0c;不过由于我安装过了1.8&#xff0c;所以我这里演示JDK21 的安装&#xff0c;过程并无区别&#xff0c;只在下载时注意选择1.8版本。1.8就是JDK8. 文章目录 JDK安装详细教程一…...

vulnhub_Fowsniff靶机渗透测试

Fowsniff靶机 靶机地址&#xff1a;https://www.vulnhub.com/entry/fowsniff-1,262/ 文章目录 Fowsniff靶机信息收集web渗透密码碰撞POP3邮件服务器渗透获取权限权限提升靶机总结 信息收集 通过nmap扫描&#xff0c;靶机开放22 80 110 143端口&#xff0c;110是pop3邮件服务…...

FPGA面试题(3)

一.FPGA和CPLD区别 FPGA&#xff1a;现场可编程门阵列CPLD&#xff1a;复杂可编程逻辑器件 二.多位异步信号如何同步 单比特异步信号 慢时钟域->快时钟域&#xff1a;同步打拍快时钟域->慢时钟域&#xff1a;先拓展位宽再同步打拍 多比特异步信号 1.异步FIFO2.保持…...

Avalonia常用小控件Menu

1.项目下载地址&#xff1a;https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia&#xff0c;项目地址 https://github.com/irihitech/Semi.Avalonia 样式预览&#xff1a; axaml代码 &#xff1a; <UserControl xmlns"https://github.com/avalo…...

steam游戏服务器如何选择

steam游戏平台现在在国内市场很吃香&#xff0c;当我们自己开发的游戏想要上架steam我们需要准备什么&#xff0c;在选择服务器的时候我们又需要考虑哪些因素呢&#xff0c;该怎样选择一款适合自己游戏的服务器是很关键的。 Steam专用服务器通常是指由游戏开发商提供的服务器&…...

电脑技巧:推荐一款桌面整理神器TidyTabs

目录 1、软件简介 2、软件功能介绍 3、总结 1、软件简介 TidyTabs是一款Windows应用程序&#xff0c;它可以将多个打开的窗口整理成一个选项卡式的界面&#xff0c;使得用户可以更加方便地切换和管理不同的窗口。 TidyTabs可以将多个窗口整合到一个主窗口中&#xff0c;类似…...

git合并分支-IDEA

有1个主分支&#xff0c;我从主分支拉取过来了&#xff0c;数据然后改好了&#xff0c;现在想合并到主分支上&#xff0c;并且将主分支的内容更新到我的分支下。用git怎么操作? 1.将主分支(master)的内容合并到我的分支(master-shi)中 在我的分支下执行 git merge master ID…...

winscope使用方法

Ubuntu下Android T的winscope工具使用方法 1. 在Android的项目源码中&#xff0c;prebuilts/misc/common/winscope目录下 直接使用chrome浏览器打开文件winscope.html 2. 可能会提示adb问题 进入目录development/tools/winscope/adb_proxy&#xff0c;有文件winscope_proxy.…...

获取西华大学新闻网站信息(爬虫样例)

利用python的爬虫功能进行信息爬取&#xff0c;关键在于源码分析&#xff0c;代码相对简单。 1 源代码分析 访问网站&#xff0c;按下F12&#xff0c;进行元素查找分析。 2 代码实现 from requests import get from bs4 import BeautifulSoupdef getXhuNews(pageNum1):&qu…...

【Linux】https协议

文章目录 &#x1f4d6; 前言1. 引入https协议2. 常见的加密方式2.1 对称加密&#xff1a;2.2 非对称加密&#xff1a;2.3 数据摘要&&数据指纹&#xff1a; 3. 对加密方式的探究3.1 只使用对称加密&#xff1a;3.2 只使用非对称加密&#xff1a;3.3 双方都使用非对称加…...

基于工业5G网关的工业机器人监测控制方案

随着智能制造、自动化生产的发展进步&#xff0c;工业机器人的身影越来越多地出现在工厂现场&#xff0c;成为新型无人化、智能化生产制造的中坚力量。 工业机器人的运行伴生着海量的数据采集、传输、分析和反馈执行&#xff0c;因此也需要高速、低延迟的5G网络&#xff0c;支撑…...

[Machine learning][Part4] 线性回归模型技巧

目录 正规方程法 梯度下降法 缩放特征 学习率选择 正规方程法 这种方法可以不多次迭代梯度下降函数就能得到w,b。但是缺点是在大量数据训练情况下效率较低&#xff0c;其次是这种算法仅仅在线性回归中实现了&#xff0c;并没有在其他模型中实现&#xff0c;因此&#xff0c…...

产品经理进阶:如何写商业计划书?

目录 简介 确定目标 确定目标市场 竞争分析 CSDN学院 作者简介 简介 很多时候&#xff0c;我们缺乏的并不是创意。 因为任何人都可能会萌发出一个好的创意。 但是&#xff0c;将想法变成可行的业务就完全是另一码事了。 你可能会认为你自己已经做好充分准备&#xff0…...

Excel 规范录入数据

文章目录 录入日期录入百分比 快捷键&#xff1a; tab&#xff1a;向右切换单元格 enter&#xff1a;向下切换行 shift tab&#xff1a;向左切换单元格 shiftenter&#xff1a;向上切换行 录入日期 输入今天的日期的快捷键&#xff1a;Ctrl ; 输入当时的时间的快捷键&a…...

使用IDEA自带功能将WSDL转java

好像IDEA2018版本之后不再支持webservice转java&#xff0c;可以下载2018.3.6版本的IDEA&#xff08;直接IDEA官网下载即可&#xff09;&#xff0c;然后打开一个项目&#xff0c;在根目录处单击右键 选择Generate Java Code From Wsdl...&#xff0c; 选择OK&#xff0c;即可…...

Vue + moment 实现自定义日历

moment moment是一个js工具库&#xff0c;这个库中封装的是日期时间的方法&#xff0c;功能很全面。可以去moment官网看看&#xff0c;它的中文文档介绍的也很详细&#xff0c;主要是看一下方法的使用。附上官网地址&#xff1a;添加链接描述 日历案例 日历的逻辑&#xff1a;…...

【斗罗2】天梦哥抓捕冰帝,霍雨浩与她完美融合,喜提五挂

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析斗罗大陆2绝世唐门。 斗罗大陆动画第二部绝世唐门第19集预告终于更新了&#xff0c;看到公布时间&#xff0c;大半夜才发布&#xff0c;着实不过瘾。不过剧情相当炸裂&#xff0c;天梦哥与冰帝对峙&#xff0c;造神计划正…...

上个月Balada Injector攻击中有超过17,000个WordPress网站被黑

导语 最近&#xff0c;一场名为Balada Injector的攻击活动引起了广泛关注。这次攻击以WordPress网站为目标&#xff0c;据统计&#xff0c;有超过17,000个网站受到了感染。在本文中&#xff0c;我们将详细介绍这次攻击的概述、攻击手段以及如何保护自己的网站。 攻击概述 Balad…...

从浮点到定点:在Xilinx Vivado里给FPGA设计做‘瘦身’的实战避坑指南

从浮点到定点&#xff1a;Xilinx Vivado中FPGA设计的资源优化实战 当你在Vivado中完成了一个基于浮点运算的算法设计&#xff0c;却发现LUT占用率爆表或者时序无法收敛时&#xff0c;那种挫败感我深有体会。去年在做一个实时图像处理的滤波器时&#xff0c;我原本优雅的浮点设计…...

深度解析OpenSpeedy:3大核心技术原理与实战应用指南

深度解析OpenSpeedy&#xff1a;3大核心技术原理与实战应用指南 【免费下载链接】OpenSpeedy &#x1f3ae; An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy OpenSpeedy是一款高效的开源游戏加速工具&#xff0c;通过创新…...

FanControl完全攻略:智能风扇控制的动态平衡技术与多场景应用

FanControl完全攻略&#xff1a;智能风扇控制的动态平衡技术与多场景应用 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...

AI聚类算法的代码案例实现

AI聚类算法的代码案例实现...

Hunyuan-MT-7B翻译模型实测:33种语言互译效果到底如何?

Hunyuan-MT-7B翻译模型实测&#xff1a;33种语言互译效果到底如何&#xff1f; 1. 引言&#xff1a;多语言翻译的新标杆 在全球化交流日益频繁的今天&#xff0c;高效准确的多语言翻译工具已成为刚需。腾讯混元团队最新开源的Hunyuan-MT-7B模型&#xff0c;凭借70亿参数的紧凑…...

革新性STL文件管理工具:让3D模型预览效率提升80%的Windows解决方案

革新性STL文件管理工具&#xff1a;让3D模型预览效率提升80%的Windows解决方案 【免费下载链接】STL-thumbnail Shellextension for Windows File Explorer to show STL thumbnails 项目地址: https://gitcode.com/gh_mirrors/st/STL-thumbnail 问题发现&#xff1a;3D设…...

TOAST UI Chart缩放功能完全指南:如何快速实现数据深入探索

TOAST UI Chart缩放功能完全指南&#xff1a;如何快速实现数据深入探索 【免费下载链接】tui.chart &#x1f35e;&#x1f4ca; Beautiful chart for data visualization. 项目地址: https://gitcode.com/gh_mirrors/tu/tui.chart TOAST UI Chart是一款功能强大的数据可…...

NLP-StructBERT在跨语言语义匹配中的惊艳效果案例

NLP-StructBERT在跨语言语义匹配中的惊艳效果案例 最近在做一个国际化产品的语义搜索功能时&#xff0c;遇到了一个挺头疼的问题&#xff1a;用户用中文提问&#xff0c;但我们的知识库里有大量优质的英文资料。传统的做法是先把问题翻译成英文&#xff0c;再去搜索&#xff0…...

数字人开发新范式:Fay-UE5虚拟交互引擎零基础实战指南

数字人开发新范式&#xff1a;Fay-UE5虚拟交互引擎零基础实战指南 【免费下载链接】fay-ue5 项目地址: https://gitcode.com/gh_mirrors/fa/fay-ue5 在数字内容创作与智能交互需求爆发的当下&#xff0c;开发者面临三大核心挑战&#xff1a;如何快速构建高逼真度虚拟形…...

Buildroot工具链内核版本号快速查询:3步搞定LINUX_VERSION_CODE解析

Buildroot工具链内核版本号快速查询&#xff1a;3步搞定LINUX_VERSION_CODE解析 在嵌入式开发中&#xff0c;工具链与内核版本的匹配问题常常让开发者头疼不已。想象一下这样的场景&#xff1a;你花费数小时编译的代码突然报错&#xff0c;仅仅因为工具链使用的内核头文件版本与…...