【教程】如何利用HoloLens制造下雪特效

HOLOLENS TUTORIAL: LET IT SNOW! 教程:让冬天下起雪吧!

随着寒冬的临近,各地也纷纷降雪。今天为大家推荐一种利用HoloLens在室内制造冰雪特效的方式。让冬日过节的气氛更加浓烈一些。
这个教程首先需要制作者有一台至少为开发者版本HoloLens,并且调试到开发状态。

1. 利用HoloToolkit进行环境预设

首先,打开Unity创建一个新的3D项目,请注意Unity至少版本5.5

 

接下来打开HoloToolkit,此程序是微软官方推出的免费开发者工具。以下有两种途径,一种是可以从Git复制并下载Unity开发包,另一种是直接从GitHub上下载。一旦用Holotookit能够打开Unity开发包就可以进行下一步操作。Unity项目文件的打开途径为:click on Asset -> Import Package -> Custom Package and select the downloaded file
这里会提示到选择输入的文件目录,建议是导入所有文件,但是可以跳过示例选项。

 

这里会有一个基本宣传流程关于所有HoloLens Toolkit工具。在教学指导中可以使用HoloLens相机和声音识别。进入画面是这样的:
 

2. 设置HoloLens场景

首先,选择主相机按钮并消除它,使用HoloLens相机来进行替换。接下来,因为不需要用到太阳和环境光源,将右上角的“Lighting”从skybox中移除。并且将ambient source选择到的”Color“,完成页面应该如下:
现在我们来添加HoloLens摄像机
从Assets folder中,通过HoloToolkit–> Utilities -> Prefabs 并且选择 “Main Camera”.  在画面上进行拖动以确保位置重新恢复到初始点。然后添加一个简单的3D立方体来测试一下目前的画面特效。

 

保存后现在完成了第一步测试。

3. 初次调试到HoloLens上!

Holograms are expensive to render, so let’s tune down the graphics to make sure we get the best experience possible. 全息影像已经渲染完成,所以让我们把影像调下来确保能够调试成功。
Go to Edit -> Project Settings -> Quality
On the right hand side you will see a menu similar to this:
在微软商店LOGO下,颠倒最下端的箭头并选择到“Fastest”,然后进入到设置Build部分。

 

Go to File -> Build Settings
在弹出窗口,选择微软商店并点击“Switch Platform”. 点击”Add Open Scenes”增加移动窗口。
从下拉菜单中,选择以下选项:
SDK: Universal 10
UWP Build Type: D3D
Build and run on: Local Machine
Select C# Project option.
在右手边,找到“Other Settings”并选择”虚拟现实支持“
没错,然后点击按钮”Build”,到这一步还没有结束
你将会被提示选择外置文档,最好的方式是创建一个名叫“APP”的新文档将你的模型和配置放入其中。
等待Unity完成创建,完成后将会有个提示窗口,由此进入到“App”文档中并找到Visual Studio Solution文档。
双击打开将打开Visual Studio项目。
At the top, please make sure you have selected “Debug”, x86 as a platform and “Remote Machine” (which you should have configured from Step 1).
Now for the moment of truth! Make sure Hololens is running, and press Ctrl + F5 to start without debugging!
If everything goes well you should see this in your Visual Studio console:
Deployment complete (0:00:14.434). Full package name: “SnowDemo_1.0.0.0_x86__pzq3xp76mxafg”
========== Build: 3 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========

4. 加入雪花特效

激动人心的时刻,现在可以将立方体放入到现实房间内,是时候可以添加雪花效果了。
雪花效果是由简单的particle emitter按照以下配置进行。
Duration: 5.00
Looping
Start size: 1
Max Particles 500
Emission
Rate: 200
Shape
Cone
Angle: 25
Radius: 2
Length: 5
Emit from: Volume
Velocity over Lifetime
x: 0.1 y: 0.1 z: 0
Space: Local
Limit Velocity over Lifetime
Separate Axis – YES
x: 1 y: 1 z: 1
Space: Local
Dampen 1
Collision
World
Collision Mode 3D
Dampen: 1
Bounce: 1
Max Kill Speed 10000
Radius Scale: 1
Collides With: Everything
Renderer
Render Mode: Billboard
Cast Shadows: Off
Min Particle Size: 0.01
Max Particle Size: 0.03

 

如果你不想挨个输入,可以从github的连接上直接打开项目预先设置。之后的屏幕应该是以下界面
现在到了最终实现步骤,从HoloLens上重新打开并运行APP.

【开发小样】HoloLens智能家居系统开发Demo+教程

日前,由HoloLens开发者Chuck Fletcher分享了自己开发的一套智能家居系统小样,视频显示颇为魔幻,其实过程却非常容易。主要是利用了“DIYIOT for Node-red”IOT平台及HoloLens开源设备制作完成。下面也一同附上他开发的文档及教程。有兴趣的同学可以尝试一下开发成功的同学也可以上传自己的小样分享给大家。

Code: 智能家居开发小样教程

微软计划结合波导和光场显示器来解决HoloLens视场狭隘问题

微软已经利用HoloLens走在了AR领域的前沿,目前3000美元的市场定价从市场反馈来看,存在用户抱怨HoloLens设备中视场角仅40度受限的问题。如今微软提出的这套方案可能解决这一问题,但此方案的运用将不会使新版HoloLens价格下调。

这个专利方案大致如下:

屏幕技术通常都基于波导原理、鸟巢(电磁波测距原理)、视场和一些其他合适的显示器配置近眼显示器或头戴设备,然而每种类型的显示器提供的设置在功效上都各具特点。例如波导装置和鸟巢设备能提供高锐度、高对比度的高分辨率的画面,但观察真实世界物体的效果来看,仅仅透过显示器看到的视场角会显得很弱或是没有深度提示,同时遮挡效果也很低。像Pinlight这样的光场显示器(视场角只能通过屏幕限制)显示的画面视角宽泛,具有双眼深度线索感知和真实环境封闭部分。然而,光场显示器受到低分辨率、辨识度和对比度的限制导致最后通过波导或鸟巢配置出来的画质效果底。

利用波导显示屏HoloLens能够达到清晰度、分辨率高的画面,但是与此同时视场角也受到了限制,不同于MagicLeap所使用的更广角的视野范围光场技术,光场技术也存在着低清晰度和分辨率的问题。

目前微软的方法将综合两种显示器各自的优势并结合在一起。
The present disclosure recognizes the complementary features of the above-described display configurations and provides display systems and methods that combine two types of display configurations to selectively present virtual objects via one or both of the types of display configurations based on features of the virtual objects. For example, in a display system with two types of display configurations, virtual objects to be presented in a periphery of a user’s viewspace (e.g., the viewspace of the user through a see-through display) may be presented via a display configuration that has a wide field of view. The location of the virtual object may be outside of the field of view of a display configuration with a narrow field of view, and the low resolution/quality of images produced by the configuration with a wide field of view may be tolerable in the peripheral region (e.g., as the user is not directly viewing the object). Other features taken into consideration when selectively presenting virtual objects via different display configurations of a display system will be described in more detail below.
The two displays could be used in various intelligent ways, such as showing some elements only on one display, or using the ability to black out a background using the lightfield display and then adding detail using the waveguide display.
此项综合技术将从目前40度视场角扩增到80-90度并且同时保证了整个过程中的高清画质,但是可以预计到研发成本也将大为增加。
更多技术请猛戳HoloLens黑科技

一个初学者的HoloLens SDK安装心得

距离微软官方的 Hololens开发者版本发布已快半年左右,很多国内的Developer已经拿到手体验过微软这次在AR领域“黑科技”的魅力,开发者中除了一部分“经验丰富”的前辈,也有很多此次被吸引而来的“新手”,本帖就是为了HoloLens开发新手提供的指南贴,仅供初学者参考。

想要进行Hologram的开发,首先在电脑上需要安装开发必备的开发环境,首先需要从微软Windows store中下载所需的SDK, 当前 SDK 仍然处于开发者预览版,所以并不是所有的设备都能支持。我在联想的 ThinkPad laptop  以及一台 Surface Pro tablet 上的测试,都没有问题。但是苹果电脑,则没有安装成功。在下载 SDK 之前,我们需要确保我们电脑能够满足 Hololens 系统配置要求。初学者关于SDK最好具备一点C++或者C#语言基础。

如果你已经成功安装 SDK,那么请前往 Unity tutorial 开始你的第一个Hololens app 开发。

硬件要求

为了开发 Hololens,,你的电脑需要满足如下配置
64位Windows 10 Pro, Enterprise, or Education系统(家庭版不支持Hyper-V)
64位CPU
8G或更多内存
在BOIS中,以下特性必须被支持和启用:
硬件虚拟化 Hardware-assisted virtualization
二级地址翻 译Second Level Address Translation (SLAT)
基于硬件的数据执行预防 Hardware-based Data Execution Prevention (DEP)
GPU (emulator 仿真器可能可以工作在不支持GPU下的电脑,但是会很慢)
DirectX 11.0 或者更新的版本
WDDM 1.2 版本驱动,或者更新版本

Hololens SDK 安装步骤

下面我们开始安装必须软件。

Step 0 – 使能Bios中的Virtualization(虚拟化)

Hololens Emulator 运行在虚拟机中。所以我们的PC必须支持 virtualization。

首先重启电脑,进入Bios设置界面。找到 virtualization settings 选项。在我的Thinkpad中,示例如下:

然后,我们需要使能 Intel Virtualization 和 Intel VT-d:

最后,保存Bios设置并退出:

Step 1 – 启用 Hyper-V
现在需要打开windows里面的 Hyper-V功能。win10 可以直接 按win+s 进行搜索

启用Hyper-V功能.
注意:启用功能以后,请重新启动电脑!!!
Step 2 – 安装Visual studio 2015
首先我们需要安装 Visual Studio Update 2(在线安装包,点击下载,并以管理员权限运行)。默认配置安装就行。https://go.microsoft.com/fwlink/p/?LinkId=534599
update2 是自带 windows 10 SDK的,我们也可以自己下载最新的 SDK。https://go.microsoft.com/fwlink/p/?LinkID=698771
注意: 安装结束以后,请重启电脑!!!

Step 3 – 安装Hololens Emulator 模拟器
仿真器是一个单独的安装包。 下载 Emulator 并安装运行。

如果你没有启用Virtualization,安装会报错。如果你的电脑不支持 emulator,同样也会报错。
注意:安装结束请重启!!!
Step 4 – 安装 Unity
最后我们需要 安装  Hololens-compatible 版本的 Unity。

Download Unity Technical Preview. 有三个步骤需要进行:
安装  64-bit 或者 32-bit Unity 版本.
安装  Universal Windows Platform Runtime.
安装  Documentation.

如果已经安装了老版本的Unity,请不用担心,一路安装就行

如果遇到权限请求,不用管,直接一路允许:

OK!到这步结束, Hololens 开发环境已经安装结束。Let’s rock and roll !!!

(本文内容选自网络)

【HoloLens开发教程】Gesture手势的操控及开发

Gesture
This is the third part of a series see https://peted.azurewebsites.net/hololens-end-to-end-in-unity/ Steps to create the demo project that I used in my Future Decoded UK 2016 presentation

To get set up with the HoloToolkit in Unity see https://mtaulty.com/2016/11/10/hitchiking-the-holotoolkit-unity-leg-1/

STACKING THE BOTTLES
We want the bottles created in 3D Models: From Blender to HoloLens to be stacked on top of the plinth and also to respect other physical properties like falling over. To achieve this we can add RigidBody components to each bottle, some colliders and add a box collider component to the plinth. The colliders I set up for the bottle consisted of two box colliders for the cap and the base of the bottle and a capsule collider for the body of the bottle. These were assembled by adding the components to the bottle prefab and then scaling and translating them until they were a close fit around the mesh of the bottle. Once done the bottles could be positioned into a stack. Adding the RigidBody means that we will later be able to apply a force to the surface of the bottles.

bottlestack

KNOCKING THE STACK OVER
In the previous post about Gaze we covered how to identify objects in your environment which the user would like to interact with. Once an object has been identified, in order to carry out the interaction the HoloLens platform offers two alternatives; gesture or voice commands. I will cover voice commands in the next post. The HoloLens is set up to have the ability to detect two different gestures; the bloom gesture and the ‘air tap’ (see https://developer.microsoft.com/en-us/windows/holographic/Gestures.html). The bloom is a system-level gesture to invoke the Start menu but we can use the ‘air tap’ and associated gestures in our app. This is how I did that for my demo:

Find the GestureManager script from the Project panel (use the search bar at the top of that panel)

If you have followed the Gaze post then you will already have a Managers game object in your scene so you can drag the GestureManager script onto that. If not, create an empty game object and call it Managers and then drag the GestureManager script onto it.

The GestureManager script declares the GazeManager script as a required component so if you don’t have one already one will automatically get added for you (as GestureManager relies on GazeManager otherwise it will not work)

The GestureManager script will listen for gestures and propagate a message to the focused object in the scene if one exists. It uses Unity’s SendMessage function to pass the messages along.

Be aware that SendMessage uses reflection to match the function by it’s string name which is not necessarily the best option for performance and avoiding errors. Also, there is no concept of propagating events up/down the hierarchy that you might find in hierarchical user interface platforms.

So, if you want to call a function directly on the gazed-at object then this will work fine (I have another example in a later post where that is not the case). For my demo I want to knock over the bottles when tapped over. So the cursor hovers on a bottle, the user air taps and a force is applied to the bottle at that location. The GestureManager will call a function called OnSelect so we need to add one to a script applied to each bottle. Here is the OnSelect on my BottleScript.cs:

public void OnSelect()
{
// 2-GESTURE When the bottle is selected apply a force in opposite direction to
// the normal at the hit location
var rayHit = GazeManager.Instance.HitInfo;
GetComponent<Rigidbody>().AddForceAtPosition(rayHit.normal * -5, rayHit.point, ForceMode.Impulse);
}
view rawOnSelect.cs hosted with ❤ by GitHub

When this is called a force is applied in the opposite direction to the normal at the gaze intersection point. The Unity physics system takes care of the rest and the bottles will fall over.

Vuforia新版SDK支持HoloLens上的测试效果(附上下载包)

Vuforia发布新版SDK支持HoloLens,加入操作体验的能力

微软在Build 2016开发者大会上展示了一款用于Surface设备的增强现实应用。这是一款使用Vuforia制作的应用,用户可以应用中利用设备的摄像头和其他Windows 10功能与产品目录进行互动。

有人可能对Vuforia不太熟悉,这是一个为Surface平板电脑和HoloLens开发增强现实应用的工具。这家公司在今天发布了Vuforia 6 SDK,开发者可以用它来开发HoloLens和Universal Windows Platform的增强现实应用。 该公司在一篇博客文章表示:Vuforia为HoloLens带来了一项重要的功能——为环境中的特定物体加入操作体验的能力。结合Hololens自带的功能之后,AR体验可以在任何环境下经过放大转换,形成一个虚拟展厅。如果搭配VuMarks使用,这项功能可以提供产品和机械的逐步讲解。这些体验将能减轻或避免技术人员对冗长的操作手册的依赖。

Vuforia新视频中展示了一款使用Vuforia SDK制作的应用是如何在HoloLens运行的。这家公司还没有为自己的公开SDK加入HoloLens的支持——不过它将会开设一个Early Access Program,用户可以在这里测试SDK对HoloLens的支持。HoloLens的公开支持将在稍后实现。后续也会和大家一起持续关注。

vuforia在增强现实上的应用
vuforia beta 6 HoloLens测试效果

同时附上Vuforia 6在Unity的下载包

Vuforia 6 Unity安装包

【教程】Hololens中SDK安装及环境配置

距离微软官方的 Hololens开发者版本发布已快半年左右,很多国内的Developer已经拿到手体验过微软这次在AR领域“黑科技”的魅力,开发者中除了一部分“经验丰富”的前辈,也有很多此次被吸引而来的“新手”,本帖就是为了HoloLens开发新手提供的指南贴,仅供初学者参考。

想要进行Hologram的开发,首先在电脑上需要安装开发必备的开发环境,首先需要从微软Windows store中下载所需的SDK, 当前 SDK 仍然处于开发者预览版,所以并不是所有的设备都能支持。我在联想的 ThinkPad laptop  以及一台 Surface Pro tablet 上的测试,都没有问题。但是苹果电脑,则没有安装成功。在下载 SDK 之前,我们需要确保我们电脑能够满足 Hololens 系统配置要求。初学者关于SDK最好具备一点C++或者C#语言基础。开发者也可以利用SDK 中的Hololens Emulator模拟器来模拟开发环境。


如果你已经成功安装SDK,那么请前往 Unity tutorial 开始你的第一个Hololens app 开发。


硬件要求




为了开发 Hololens,,你的电脑需要满足如下配置

  • 64位Windows 10 Pro, Enterprise, or Education系统(家庭版不支持Hyper-V)
  • 64位CPU
  • 8G或更多内存
  • 在BOIS中,以下特性必须被支持和启用:
    硬件虚拟化 Hardware-assisted virtualization
    二级地址翻 译Second Level Address Translation (SLAT)
    基于硬件的数据执行预防 Hardware-based Data Execution Prevention (DEP)
  • GPU (emulator 仿真器可能可以工作在不支持GPU下的电脑,但是会很慢)
    DirectX 11.0 或者更新的版本
    WDDM 1.2 版本驱动,或者更新版本



Hololens SDK 安装步骤


下面我们开始安装必须软件。


Step 0 – 使能Bios中的Virtualization(虚拟化)


Hololens Emulator 运行在虚拟机中。所以我们的PC必须支持 virtualization。
首先重启电脑,进入Bios设置界面。找到 virtualization settings 选项。在我的Thinkpad中,示例如下:


然后,我们需要使能 Intel Virtualization 和 Intel VT-d:




最后,保存Bios设置并退出:



Step 1 – 启用 Hyper-V

现在需要打开windows里面的 Hyper-V功能。win10 可以直接 按win+s 进行搜索




启用Hyper-V功能.
注意:启用功能以后,请重新启动电脑!!!

Step 2 – 安装Visual studio 2015

首先我们需要安装 Visual Studio Update 2(在线安装包,点击下载,并以管理员权限运行)。默认配置安装就行。https://go.microsoft.com/fwlink/p/?LinkId=534599
update2 是自带 windows 10 SDK的,我们也可以自己下载最新的 SDK。https://go.microsoft.com/fwlink/p/?LinkID=698771
注意: 安装结束以后,请重启电脑!!!


Step 3 – 安装Hololens Emulator 模拟器

仿真器是一个单独的安装包。 下载 Emulator 并安装运行。

如果你没有启用Virtualization,安装会报错。如果你的电脑不支持 emulator,同样也会报错。

注意:安装结束请重启!!!

Step 4 – 安装 Unity

最后我们需要 安装  Hololens-compatible 版本的 Unity。



Download Unity Technical Preview. 有三个步骤需要进行:

1. 安装  64-bit 或者 32-bit Unity 版本.
2. 安装  Universal Windows Platform Runtime.
3. 安装  Documentation.



如果已经安装了老版本的Unity,请不用担心,一路安装就行



如果遇到权限请求,不用管,直接一路允许:



OK!到这步结束, Hololens 开发环境已经安装结束。Let’s rock and roll !!!

(本文内容选自网络,文章来源http://www.codeproject.com/Artic … ng-the-Hololens-SDK

【教程】Holograms 101- Unity开发项目展示教程 第4课

第4课,我们添加两个语音输入命令( voicecommands ):
“Resetworld”:将掉落的小球,初始化到原始位置
“Dropsphere”:令小球掉落
 
点击观看本节教程:
文字教程:
 
目标
  • 添加常驻后台的声音识别命令
  • 创建一个能对声音产生反应的应用
步骤
  • Scripts 目录中,创建一个名为 SpeechManager的脚本
  • 拖拽 SpeechManager 脚本到 OrigamiCollection目录中
  • 双击打开 SpeechManager 脚本
  • 复制如下代码到脚本 SpeechManager.cs


SpeechManager.cs代码:
  1. using System.Linq;
  2. using UnityEngine;
  3. using UnityEngine.Windows.Speech;
  4. public class SpeechManager : MonoBehaviour
  5. {
  6.     KeywordRecognizer keywordRecognizer = null;
  7.     Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
  8.     // Use this for initialization
  9.     void Start()
  10.     {
  11.         keywords.Add(“Reset world”, () =>
  12.         {
  13.             // Call the OnReset method on every descendant object.
  14.             this.BroadcastMessage(“OnReset”);
  15.         });
  16.         keywords.Add(“Drop Sphere”, () =>
  17.         {
  18.             var focusObject = GazeGestureManager.Instance.FocusedObject;
  19.             if (focusObject != null)
  20.             {
  21.                 // Call the OnDrop method on just the focused object.
  22.                 focusObject.SendMessage(“OnDrop”);
  23.             }
  24.         });
  25.         // Tell the KeywordRecognizer about our keywords.
  26.         keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
  27.         // Register a callback for the KeywordRecognizer and start recognizing!
  28.         keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
  29.         keywordRecognizer.Start();
  30.     }
  31.     private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
  32.     {
  33.         System.Action keywordAction;
  34.         if (keywords.TryGetValue(args.text, out keywordAction))
  35.         {
  36.             keywordAction.Invoke();
  37.         }
  38.     }
  39. }

复制代码

  • 打开 SphereCommands脚本,更新其代码如下
SphereCommands.cs代码:
  1. using UnityEngine;
  2. public class SphereCommands : MonoBehaviour
  3. {
  4.     Vector3 originalPosition;
  5.     // Use this for initialization
  6.     void Start()
  7.     {
  8.         // Grab the original local position of the sphere when the app starts.
  9.         originalPosition = this.transform.localPosition;
  10.     }
  11.     // Called by GazeGestureManager when the user performs a Select gesture
  12.     void OnSelect()
  13.     {
  14.         // If the sphere has no Rigidbody component, add one to enable physics.
  15.         if (!this.GetComponent<Rigidbody>())
  16.         {
  17.             var rigidbody = this.gameObject.AddComponent<Rigidbody>();
  18.             rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
  19.         }
  20.     }
  21.     // Called by SpeechManager when the user says the “Reset world” command
  22.     void OnReset()
  23.     {
  24.         // If the sphere has a Rigidbody component, remove it to disable physics.
  25.         var rigidbody = this.GetComponent<Rigidbody>();
  26.         if (rigidbody != null)
  27.         {
  28.             DestroyImmediate(rigidbody);
  29.         }
  30.         // Put the sphere back into its original local position.
  31.         this.transform.localPosition = originalPosition;
  32.     }
  33.     // Called by SpeechManager when the user says the “Drop sphere” command
  34.     void OnDrop()
  35.     {
  36.         // Just do the same logic as a Select gesture.
  37.         OnSelect();
  38.     }
  39. }

复制代码

  • 重新build整个工程
  • 注视某一个球体,说出命令 “Drop Sphere
  • 说出命令”Reset World“,让球体返回原来位置

【教程】Holograms 101- Unity开发项目展示教程 第3课

第3课,我们将学习使用 手势输入gestures 通过使能 Unity 的物理引擎,打开重力模拟, 当用户选择了一个纸球,就会让该纸球下落)
 
点击观看本节教程:

 

文字教程

 

目标
  • 使用选择手势控制Hologram
步骤
  • 接下来创建一个脚本,使得程序能够检测到选择手势
  • Scripts 目录中,创建一个名为 GazeGestureManager 的脚本
  • GazeGestureManager 脚本拖入 OrigamiCollection 目录中
  • 打开 GazeGestureManager 脚本,并复制如下代码


GazeGestureManager.cs代码:
  1. using UnityEngine;
  2. using UnityEngine.VR.WSA.Input;
  3. public class GazeGestureManager : MonoBehaviour
  4. {
  5.     public static GazeGestureManager Instance { get; private set; }
  6.     // Represents the hologram that is currently being gazed at.
  7.     public GameObject FocusedObject { get; private set; }
  8.     GestureRecognizer recognizer;
  9.     // Use this for initialization
  10.     void Start()
  11.     {
  12.         Instance = this;
  13.         // Set up a GestureRecognizer to detect Select gestures.
  14.         recognizer = new GestureRecognizer();
  15.         recognizer.TappedEvent += (source, tapCount, ray) =>
  16.         {
  17.             // Send an OnSelect message to the focused object and its ancestors.
  18.             if (FocusedObject != null)
  19.             {
  20.                 FocusedObject.SendMessageUpwards(“OnSelect”);
  21.             }
  22.         };
  23.         recognizer.StartCapturingGestures();
  24.     }
  25.     // Update is called once per frame
  26.     void Update()
  27.     {
  28.         // Figure out which hologram is focused this frame.
  29.         GameObject oldFocusObject = FocusedObject;
  30.         // Do a raycast into the world based on the user’s
  31.         // head position and orientation.
  32.         var headPosition = Camera.main.transform.position;
  33.         var gazeDirection = Camera.main.transform.forward;
  34.         RaycastHit hitInfo;
  35.         if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
  36.         {
  37.             // If the raycast hit a hologram, use that as the focused object.
  38.             FocusedObject = hitInfo.collider.gameObject;
  39.         }
  40.         else
  41.         {
  42.             // If the raycast did not hit a hologram, clear the focused object.
  43.             FocusedObject = null;
  44.         }
  45.         // If the focused object changed this frame,
  46.         // start detecting fresh gestures again.
  47.         if (FocusedObject != oldFocusObject)
  48.         {
  49.             recognizer.CancelGestures();
  50.             recognizer.StartCapturingGestures();
  51.         }
  52.     }
  53. }

复制代码

  • 创建另外一个脚本 SphereCommands.
  • 占看 OrigamiCollection 目录
  • 拖拽 SphereCommands 脚本到 Sphere1 模型上
  • 拖拽 SphereCommands 脚本到 Sphere2 模型上
  • 打开 visual studio 编辑,复制如下代码到 SphereCommands 脚本中


SphereCommands.cs代码:
  1. using UnityEngine;
  2. public class SphereCommands : MonoBehaviour
  3. {
  4.     // Called by GazeGestureManager when the user performs a Select gesture
  5.     void OnSelect()
  6.     {
  7.         // If the sphere has no Rigidbody component, add one to enable physics.
  8.         if (!this.GetComponent<Rigidbody>())
  9.         {
  10.             var rigidbody = this.gameObject.AddComponent<Rigidbody>();
  11.             rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
  12.         }
  13.     }
  14. }

复制代码

  • 重新生成Hologram
  • 注视纸球
  • 采用选择手势,查看纸球下落过程