找回密码
 注册帐号

扫一扫,访问微社区

AR酱 Magic Leap开发指南(7)-- 眼球追踪(Unity)

2
回复
312
查看
[ 复制链接 ]
排名
2299
昨日变化

30

主题

251

帖子

1464

积分

Rank: 9Rank: 9Rank: 9

UID
156756
好友
11
蛮牛币
1343
威望
0
注册时间
2016-7-13
在线时间
491 小时
最后登录
2019-9-13

专栏作家

2019-8-20 20:35:42 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

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

实现思路是:

  • 使用MLEyes API检测用户注视点。
  • 计算用户眼睛指向的方向。
  • 从相机向注视点投射光线。
  • 当光线击中球体时,改变它的颜色。


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

Step 1: 不同版本对Unity设置

Unity 2018.1 (SDK 0.19.0)

  • 在Unity中,使用Magic Leap模板创建一个新项目。
  • 要从Magic Leap Unity®包导入所有文件夹,单击Assets > Import Package > Custom Package....包文件通常位于Magicleap\tools\unity\<sdk version>中。
  • 点击File > Build settings。
  • 在Build Settings下,如下图操作:
  • 点击Player Settings。
  • 在Publishing Settings下面,设置好从Magic Leap 网站上下载好的证书。对开发人员证书不了解的,可以参考文章:Magic Leap开发指南(1)--开发前准备


Unity 2019.1 (SDK 0.20.0 and later)

1.在Unity中,使用3D模板创建一个新项目。你必须执行以下步骤:
点击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包的主相机核心组件。
  • Inspector下,删除Main Camera
  • Assets > MagicLeap > Core > Prefabs下,找到Main Camera Core Component。
  • 将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: 编辑脚本文件

接下来,创建一个脚本,使眼球跟踪能够更改球体的颜色。
  • Hierarchy选项卡中,选择Sphere GameObject。
  • 单击Add Component > New Script。
  • 将脚本命名为EyeTracking,然后单击Create和Add。
  • 打开新脚本,粘贴下面的代码,然后保存文件即可。

[AppleScript] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.MagicLeap;

public class EyeTracking : MonoBehaviour {
    #region Public Variables
    public GameObject Camera;
    public Material FocusedMaterial, NonFocusedMaterial;
    #endregion

    #region Private Variables
    private Vector3 _heading;
    private MeshRenderer _meshRenderer;
    #endregion

    #region Unity Methods
    void 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 material
            if (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()方法执行以下操作:
  • 启动ML.Eyes API来接收来自用户眼睛的输入。
  • 将球体置于摄像机前2米的距离。
  • 将MeshRenderer组件分配给_meshRenderer


OnDisable() method:该方法禁用眼球跟踪输入。

Update() method:此方法检查是否启动了ML.Eyes。如果是,则执行以下操作:
  • 创建一个名为rayHitRaycastHit结构来从raycast中检索数据。
  • 计算从相机位置指向用户注视点的vector _heading
  • 改变球体的材质。

Physics.Raycast Unity方法从相机位置(起始点)向_heading方向投射光线,距离为10m。相关数据存储在rayHit中。
射线与对象的Collider相交,则Raycast返回true,否则返回false。相应地将球体的材质更改为FocusedMaterialNonFocusedMaterial

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


接下来点击运行即可。

回复

使用道具 举报

5熟悉之中
540/1000
排名
9489
昨日变化

0

主题

219

帖子

540

积分

Rank: 5Rank: 5

UID
292197
好友
0
蛮牛币
851
威望
0
注册时间
2018-8-2
在线时间
201 小时
最后登录
2019-9-16
2019-8-21 09:07:07 显示全部楼层
thinks for share!
回复

使用道具 举报

2初来乍到
103/150
排名
24129
昨日变化

0

主题

49

帖子

103

积分

Rank: 2Rank: 2

UID
235432
好友
0
蛮牛币
97
威望
0
注册时间
2017-8-2
在线时间
36 小时
最后登录
2019-9-4
2019-8-22 14:58:17 显示全部楼层
这个是什么硬件的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则