眼球追踪功能是AR眼镜时代主要的交互方式之一,各大AR眼镜厂商也在积极投入Eye Tracking功能的研发,Magic Leap One很好的支持了这一功能。本部分的教程主要是在Unity中使用Eye Tracking 功能与小球进行互动(用户可以用眼睛改变球体的颜色)。

以下内容由公众号:AIRX社区(国内领先的AI、AR、VR技术学习与交流平台) 整理

实现思路是:

  1. 使用MLEyes API检测用户注视点。

  2. 计算用户眼睛指向的方向。

  3. 从相机向注视点投射光线。

  4. 当光线击中球体时,改变它的颜色。

在正式开发前,需要对Magic Leap One设备完成眼睛校准:可以通过Settings > Device > Calibration 步骤完成校准。

Step 1: 不同版本对Unity设置

Unity 2018.1 (SDK 0.19.0)

  1. 在Unity中,使用Magic Leap模板创建一个新项目。

  2. 要从Magic Leap Unity®包导入所有文件夹,单击Assets > Import Package > Custom Package....包文件通常位于Magicleap\tools\unity\<sdk version>中。

  3. 点击File > Build settings。

  4. 在Build Settings下,如下图操作:

  5. 点击Player Settings。

  6. 在Publishing Settings下面,设置好从Magic Leap 网站上下载好的证书。对开发人员证书不了解的,可以参考文章:Magic Leap开发指南(1)--开发前准备

Unity 2019.1 (SDK 0.20.0 and later)

在Unity中,使用3D模板创建一个新项目。你必须执行以下步骤:

  1. 点击Edit > Preferences > External Tools (Windows), or Unity > Preferences > External Tools (macOS),浏览到Lumin SDK文件夹的位置(版本0.20或更高)。注意:这个设置是在Unity编辑器的MLTP版本的Build Settings中的。

  2. 确保平台在File > Build Settings中被设置为Lumin。

  3. 对于NEW with 2019.x 版本,安装XR Legacy Input Helpers package.

    (1)点击Window > Package Manager

    (2)搜索legacy

    (3)选择XR Legacy Input Helpers

    (4)点击右下角对Install或Update按钮。如下图所示:

  4. 点击File > Build Settings,然后点击Player Settings 按钮。

  5. 对于NEW with 2019.x版本, 在 Settings for PC, Mac & Linux Standalone下面设置:

    (1)展开Other Settings > Rendering

    (2)清除Auto Graphics APIs for Windows (Windows) or Auto Graphics API for Mac (macOS)复选框。

    (3)将Color Space改为Linear

    (4)按下+按钮,如果OpenGLCore没有出现在Windows图形api列表下,则添加它。

    (5)将OpenGLCore移到列表的顶部。(6)在提示时重新启动编辑器。

  6. 对于NEW with 2019.x版本,仍然在Player settings设置为Lumin,作出以下更改:

    (1)展开XR Settings,然后选择Virtual Reality Supported。注意:如果已选择Virtual Reality Supported,请清除复选框并再次选择它。

(2)在XR Settings > Virtual Reality SDKs下,通过单击+按钮(如果还没有)在Virtual Reality SDKs中添加Lumin

(3)在XR Settings下,确保Stereo Rendering Mode被设置为Single Pass Instanced

(4)在Other Settings > Identification下,将Bundle标识符设置为小写标识符,例如:com.company.test

(5)在Other Settings > Configuration下,把Scripting Runtime Version设置成.Net 4.x Equivalent

(6)在Publishing Settings下面,设置好从Magic Leap 网站上下载好的证书。

7.点击Assets > Import Package > Custom Package,导航到MagicLeap/Tools/unity/<v0.20.0 or later>,导入整个MagicLeap.unitypackage。

8. 在主Unity窗口中单击Magic Leap > ML Remote > Import Support Libraries。如下图所示:

9.对于NEW with 2019.x版本,使用自定义的manifest添加特权和修改API level.模版manifest位于Assets/MagicLeap/Examples/Plugins/Lumin/manifest.xml。复制到Assets/Plugins/Lumin/。本教程中,不需要更改它。

Step 2: 设置Camera

建议用户使用Magic Leap Unity包的主相机核心组件。

  1. Inspector下,删除Main Camera

  2. Assets > MagicLeap > Core > Prefabs下,找到Main Camera Core Component。

  3. 将Main Camera拖放到Inspector上。

Step 3: 设置Scene

我们将创建球体GameObject和它的两种材质。当用户看到球体时,使用FocusedMaterial。否则,NonFocusedMaterial将被应用。

  1. 右键单击Unity中的Hierarchy选项卡中的场景。

  2. 点击3D Object > Sphere 创建一个球体对象。

  3. 将以下设置应用于球体。如下图所示:

  4. 在Project选项卡下,右键Assets文件夹,并单击Create > Material创建球体的第一个材质球。

  5. 这个材质球命名为FocusedMaterial。

  6. 选择FocusedMaterial,打开Inspector选项卡。

  7. 点击Albedo旁边的白色矩形,然后选择绿色。如下图所示:

  8. 重复步骤4-7,创建第二个材质球,命名为NonFocusedMaterial,并将Albedo保留为白色。

Step 4: 编辑脚本文件

接下来,创建一个脚本,使眼球跟踪能够更改球体的颜色。

  1. Hierarchy选项卡中,选择Sphere GameObject。

  2. 单击Add Component > New Script。

  3. 将脚本命名为EyeTracking,然后单击Create和Add。

  4. 打开新脚本,粘贴下面的代码,然后保存文件即可。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.MagicLeap;public class EyeTracking : MonoBehaviour {#region Public Variablespublic GameObject Camera;public Material FocusedMaterial, NonFocusedMaterial;#endregion#region Private Variablesprivate Vector3 _heading;private MeshRenderer _meshRenderer;#endregion#region Unity Methodsvoid Start() {MLEyes.Start();transform.position = Camera.transform.position + Camera.transform.forward * 2.0f;// Get the meshRenderer component_meshRenderer = gameObject.GetComponent<MeshRenderer>();}    private void OnDisable() {MLEyes.Stop();}void Update() {if (MLEyes.IsStarted) {RaycastHit rayHit;_heading = MLEyes.FixationPoint - Camera.transform.position;// Use the proper materialif (Physics.Raycast(Camera.transform.position, _heading, out rayHit, 10.0f)) {_meshRenderer.material = FocusedMaterial;}else {_meshRenderer.material = NonFocusedMaterial; }}}#endregion
}

部分变量说明:

  • Camera指我们项目的主要相机游戏对象。

  • 适用于球体的材质球:FocusedMaterial、NonFocusedMaterial

  • _heading private Vector3用于计算用户眼睛指向的方向。

  • 私有MeshRenderer _meshRenderer将用于获取球体的材质。

Start() method

Start()方法执行以下操作:

  1. 启动ML.Eyes API来接收来自用户眼睛的输入。

  2. 将球体置于摄像机前2米的距离。

  3. 将MeshRenderer组件分配给_meshRenderer

OnDisable() method

该方法禁用眼球跟踪输入。

Update() method

此方法检查是否启动了ML.Eyes。如果是,则执行以下操作:

  1. 创建一个名为rayHitRaycastHit结构来从raycast中检索数据。

  2. 计算从相机位置指向用户注视点的vector _heading

  3. 改变球体的材质。

Physics.Raycast Unity方法从相机位置(起始点)向_heading方向投射光线,距离为10m。相关数据存储在rayHit中。

射线与对象的Collider相交,则Raycast返回true,否则返回false。相应地将球体的材质更改为FocusedMaterialNonFocusedMaterial

接下来将脚本文件绑定到该球体GameObject上即可,并将相应的材质球拖到对应对变量位置上。如下图所示:

接下来点击运行即可。

关于更多机器学习、人工智能、增强现实资源和技术干货,可以关注公众号:AIRX社区,共同学习,一起进步!

Magic Leap开发指南(7)-- 眼球追踪(Unity)相关推荐

  1. Magic Leap开发指南(8)-- 眼球追踪(Lumin Runtime)

    上一篇教程(Magic Leap开发指南(7)-- 眼球追踪(Unity))我们了解了如何在Unity中使用Eye Tracking来完成一些小项目,这篇我们继续通过Lumin Runtime来运用眼 ...

  2. Magic Leap开发指南(9)-- 6 DOF(Unity)

    本部分的教程主要是介绍Magic Leap One的6 DOF能力.我们通过一个小例子来实现这个功能: 为控件初始化6自由度. 接收控件的位置和方向数据. 设计一个像激光束一样的指针,从控制器开始,延 ...

  3. Magic Leap开发指南(5)-- Hand Tracking

    这篇文章主要介绍关于Hand Tracking API的一些东西,帮助大家了解: 使用"OK"手势旋转3D模型 识别手关键点的坐标(用户指尖) 实现效果如下: 本部分用的到资源:h ...

  4. Magic Leap开发指南(3)-- 将你的Cube投递给其他用户

    在上一篇文章(Magic Leap开发指南(2)-- Hello,Cube!)我们了解了使用Magic Leap One眼镜如何在现实环境显示一个Cube,那么这篇文章我们接着来学习如何将这个Cube ...

  5. Magic Leap开发指南(1)--开发前准备

    以下内容由公众号:AIRX社区(国内领先的AI.AR.VR技术学习与交流平台) 整理 Magic Leap这家最神秘的AR公司去年推出了Magic Leap One AR眼镜. 这款目前世界前三好的A ...

  6. 全球首个Magic Leap One体验:吓到你不敢进房间

    来源:智东西 概要:业内备受关注的AR技术公司Magic Leap,在获得19亿美元融资历经七年之后,终于放出其第一款头盔产品Magic Leap One,很快在科技圈.VR圈引起刷屏式关注. 昨夜, ...

  7. 欺骗无数人眼睛的Magic Leap亮出真本事!公布AR系统路线和16项Demo

    智东西10月11日消息,Magic Leap首届开发者大会在洛杉矶召开.今天凌晨,Magic Leap众高管以及合作伙伴带来长达3个多小时的主题演讲,就连前不久重金投资Magic Leap的AT&am ...

  8. Magic Leap是快出产品的节奏,已开放内容开发者注册通道

    Magic Leap开发的硬件产品尚未面世,这意味着开发者有机会接触到这款神秘的硬件. 最近,Magic Leap的执行总监罗尼·阿伯维茨向所有开发者发起邀请,希望为旗下的硬件产品开发内容. 阿伯维茨 ...

  9. Leap Motion 之Unity 开发指南(一. 基本概念与制作手预制件)

    LeapMotion 之Unity开发指南(一.基本概念和手的预制件) [序言] 最近用Leap Motion + 国产的3Glass眼镜构建了房地产.数字矿山的一些应用,感觉这是很经济的一个VR架构 ...

最新文章

  1. linux桌面版排行2019_2019 年适合新手的 Linux 发行版 top 5
  2. Mac下安装PIL库
  3. 博客同步至阿里云开发者社区,快来帮我涨人气吧
  4. Rise of Shadows 闰年leap year-无法线性筛
  5. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...
  6. [系统集成] CI持续集成项目简介
  7. jsf按钮响应事件_如何从JSF获取JSON响应?
  8. java 向上转型_java向上转型和向下转型
  9. php 增加mysql 索引,【PHP】为什么 MySQL 添加索引后就可以提高查询速度
  10. saltstsck执行sls配置
  11. 盘点 7 个超级 Nice 的微信小程序项目
  12. 徐州2018年大学计算机比赛,2018年第四届徐州市中小学生学科综合能力大赛获奖名单!权威发布!【五年级】...
  13. 微信识图之面向多源异构数据的检测器设计
  14. 一份Slide两张表格带你快速了解目标检测
  15. matlab平均脸,BFM使用 - 获取平均脸模型的68个特征点坐标
  16. 读书笔记 ——《系统程序员成长计划》篇4:拥抱变化
  17. std::packaged_task 源码分析
  18. RPG Maker MV 计时器的用法
  19. acad.exe启动参数
  20. Android ndk 编译出现'Build Project' has encountered a problem.Errors occurred during the build

热门文章

  1. 快手火山抖音视频(包含其他视频)跨平台操作搬运,下载,消重,全自动操作解放双手...
  2. 【Anki】模板自定义
  3. 2021年度软件企业 100 强榜单(附全名单)有你么?
  4. uni-app 中如何打开外部应用,如:浏览器、淘宝、京东、微博等
  5. java生成数字字母组合_java生成随机数字和字母组合
  6. 为什么vsdebug没有生成obj文件_VS中bin和obj文件引发的问题
  7. 设计模式 | 模板模式
  8. A002-185-2521-李子泓
  9. 如何将PDF批量转成JPG?
  10. Word太大怎么进行压缩?实用Word压缩工具