设为首页收藏本站

微软Hololens全息现实网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

一键登录:

查看: 805|回复: 1

Hololens官方教程精简版 - 03. Gaze(凝视)

[复制链接]
发表于 2017-12-5 21:51:47 | 显示全部楼层 |阅读模式

本帖最后由 HoloLens全息现实网 于 2017-12-5 21:53 编辑 前言注意:本文已更新到5.5.1f1版本个人建议,学习Holograms 210之前,一定完成《Hololens官方教程精简版 - 02. Introduction with Device》的学习。本篇集中学习凝视功能,完成以下目标:让物体感知凝视凝视被感知后,给用户一定的反馈如何...

本帖最后由 HoloLens全息现实网 于 2017-12-5 21:53 编辑

前言
注意:本文已更新到5.5.1f1版本
个人建议,学习Holograms 210之前,一定完成《Hololens官方教程精简版 - 02. Introduction with Device》的学习。
本篇集中学习凝视功能,完成以下目标:
  • 让物体感知凝视
  • 凝视被感知后,给用户一定的反馈
  • 如何凝视更小的物体
  • 方向标
Chapter 1 - Unity Setup
请按照第一篇的教程,完成项目的创建。
新建文件夹:”Assets/_Scenes/Holograms 210/”
新建场景:”Assets/_Scenes/Holograms 210/Holograms 210.unity”
打开场景,删除默认的Main Camera
将”Assets/HoloToolkit/Input/Prefabs/HololensCamera.prefab”添加到Hierarchy根级
添加一个Cube,按如下属性进行设置:
28.png
本节完成,测试运行!
Chapter 2 - Cursor and target feedback目标
凝视、点击等操作后,缩放Cube
实践
将”Assets/HoloToolkit/Input/Prefabs/InputManager.prefab”添加到Hierarchy根级
将”Assets/HoloToolkit/Input/Prefabs/Cursor/DefaultCursor.prefab”添加到Hierarchy根级
新建文件夹:”Assets/_Scenes/Holograms 210/Scripts/”
新建脚本文件:”Assets/_Scenes/Holograms 210/Scripts/Cube210.cs“,将其拖拽到 Cube
完成后如图:
29.png
修改 Cube210.cs 文件,内容如下:
(代码适用:5.5.0f3版本)
  1. using HoloToolkit.Unity.InputModule;
  2. using UnityEngine;

  3. public class Cube210 : MonoBehaviour, IFocusable, IInputClickHandler
  4. {
  5.     // Cube原始缩放
  6.     private Vector3 origScale;

  7.     void Start()
  8.     {
  9.         // 保存Cube原始缩放
  10.         origScale = gameObject.transform.localScale;
  11.     }

  12.     /// <summary>
  13.     /// 凝视进入事件
  14.     /// </summary>
  15.     public void OnFocusEnter()
  16.     {
  17.         // 凝视进入后,Cube放大1.25倍
  18.         gameObject.transform.localScale = origScale * 1.25f;
  19.     }

  20.     /// <summary>
  21.     /// 凝视退出事件
  22.     /// </summary>
  23.     public void OnFocusExit()
  24.     {
  25.         // 凝视退出后,Cube还原缩放
  26.         gameObject.transform.localScale = origScale;
  27.     }

  28.     /// <summary>
  29.     /// 单击事件
  30.     /// </summary>
  31.     public void OnInputClicked(InputEventData eventData)
  32.     {
  33.         // 点击后,Cube放大1.5倍
  34.         gameObject.transform.localScale = origScale * 1.5f;
  35.     }
  36. }
复制代码
(代码适用:5.5.1f1版本)


  1. using HoloToolkit.Unity.InputModule;
  2. using UnityEngine;

  3. public class Cube210 : MonoBehaviour, IFocusable, IInputClickHandler
  4. {
  5.     // Cube原始缩放
  6.     private Vector3 origScale;

  7.     void Start()
  8.     {
  9.         // 保存Cube原始缩放
  10.         origScale = gameObject.transform.localScale;
  11.     }

  12.     /// <summary>
  13.     /// 凝视进入事件
  14.     /// </summary>
  15.     public void OnFocusEnter()
  16.     {
  17.         // 凝视进入后,Cube放大1.25倍
  18.         gameObject.transform.localScale = origScale * 1.25f;
  19.     }

  20.     /// <summary>
  21.     /// 凝视退出事件
  22.     /// </summary>
  23.     public void OnFocusExit()
  24.     {
  25.         // 凝视退出后,Cube还原缩放
  26.         gameObject.transform.localScale = origScale;
  27.     }

  28.     /// <summary>
  29.     /// 单击事件
  30.     /// </summary>
  31.     public void OnInputClicked(InputClickedEventData eventData)
  32.     {
  33.         // 点击后,Cube放大1.5倍
  34.         gameObject.transform.localScale = origScale * 1.5f;
  35.     }
  36. }
复制代码



本节完成,测试运行!
说明
  • InputManager.prefab
    查看这个组件的Inspector,有以下几个主要脚本:

    • GazeManager.cs
      GazeManager是一个单例类,可以通过GazeManager.Instance来进行访问。管理所有与凝视射线相关的内容。常用功能如下:

      • IsGazingAtObject:判断是否凝视在物体上
      • HitInfo:可以获取到被凝视物体的基本信息,包括碰撞体、刚体、点、法线、纹理坐标、距离,及Transform属性等
      • HitObject:可以获取到被凝视的对象
      • HitPosition:凝视碰撞点位置
      • GazeOrigin:凝视射线原点
      • GazeNormal:凝视射线法线
    • InputManager.cs
      InputManager也是一个单例,可以通过InputManager.Instance来访问。在诸如手势输入源(GuesturesInput)或者其他各种输入源类中(包含自定义输入源类)中,都需要通过它进行输入源注册,以便于进行输入源的事件调度。
    • GuesturesInput.cs
      GuesturesInput是HoloToolkit提供的手势输入源处理类,内部通过GestureRecognizer单例来实现手势识别及事件捕捉。我们可以继承BaseInputSource或者IInputSource来实现自己的输入源处理类。
  • IFocusable
    IFocusable用来处理凝视进入和凝视退出

    • OnFocusEnter()
    • OnFocusEnter()

Chapter 3 - Targeting Techniques目标
稳定凝视光标,降低光标抖动
实践
什么都不用作,此步已经完成!
没错!点击InputManager组件,在Inspector面板中已经包含了一个内置的Gaze Stabilizer凝视稳定器,在Gaze ManagerStabilizer属性中已经进行了指定。
30.png

作用就是通过插值运算,降低凝视光标的抖动。具体效果,可以点击Play按钮,在Play视图中,用鼠标右键模拟视线移动,仔细观察光标的移动平滑程度。
Chapter 4 - Directional indicator目标
在光标上显示一个方向标,指向目标物体
实践
这个在物体超出视线范围外的时候,非常有用。
  • 点击Cube,在Inspector面板中,点击Add Component,搜索Direction Indicator,并添加。
  • 将场景中的DefaultCursor拖拽到Direction IndicatorCursor属性中
  • 点击Direction Indicator Object右侧的圆钮,选择HeadsUpDirectionIndicatorPointer模型
31.png
本节完成,测试运行!
说明
具体实现逻辑,都在DirectionIndicator类中
Chapter 5 - Billboarding目标
让物体总是朝向摄像机
实践
点击Cube,在Inspector面板中,点击Add Component按钮,搜索Billboard脚本,并添加。
32.png

本节完成!
Play窗口中,用键盘或者鼠标控制摄像机位置,在Scene窗口中观察Cube的朝向
也可以戴上Hololens,围绕Cube走动,观察Cube的朝向
Chapter 6 - Tag-Along目标
让物体跟随摄像机移动
实践
点击Cube,在Inspector面板中,点击Add Component按钮,搜索Tagalong脚本,并添加。
33.png

本节完成!
Play窗口中,用键盘或者鼠标控制摄像机位置,在Scene窗口中观察Cube的位置
也可以戴上Hololens,四处走动,观察Cube是否跟随
小结
  • IFocusable:实现凝视检测
  • IInputClickHandler:实现手势的单击动作
  • GazeManager:凝视管理器,获取凝视物体相关信息,等。
  • GestureRecognizer:手势识别器
  • Gaze Stabilizer:凝视光标稳定器
  • DirectionIndicator:方向标
  • Billboard:公告板效果,让物体面朝摄像机
  • Tagalong:跟随器,让物体跟随摄像机
更深入的学习,我后面会陆续写。不过即使学习到了这里,有很多东西希望大家一起动手作起来。比如:
  • 除了:IFocusable和IInputClickHandler,还有一些其他事件处理接口,分别实现什么效果?
  • GazeManager:具体可以获取到哪些信息?
  • GestureRecognizer:如何使用?






上一篇:Hololens官方教程精简版 - 02. Introduction with Device
下一篇:Hololens官方教程精简版 - 04. Gesture(手势)
发表于 2017-12-5 22:10:29 | 显示全部楼层
VR值得期待
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

注册验证邮件查收提醒:

由于各大邮箱政策原因,

如果没收到邮件提醒,

您的注册验证邮件可能

被投送到您邮箱的垃圾箱,

请注意查收验证哦


QQ|小黑屋|Hololens全息现实网 ( 京ICP备15026232号   点击这里给我发消息

GMT+8, 2018-10-18 17:59 , Processed in 0.525886 second(s), 32 queries .

Powered by Hololens全息现实网 X3.2

© 2001-2017 Hololens全息现实网

快速回复 返回顶部 返回列表