为HoloLens改编MR项目

因此,我们有关Windows Mixed Reality的文章系列即将结束。 在其中,我们从头开始在格式实验室工作(实验室工作)中在Unity上开发了一个具有混合现实的应用程序。 今天是最后的话题,我们将讨论一个非常有趣的主题-HoloLens和该设备对该项目的适应。 立即加入!



整个指南将包括5个部分。 它将每周补充一次。 您可以在下面转到所需的部分。

第1部分: 从Unity导出Windows Mixed Reality的UWP应用程序
第2部分: 设置环境(VR)
第3部分: 控制器
第4部分: 空间声音
第5部分: HoloLens和图形

霍洛伦


到目前为止,我们的应用程序仅适用于沉浸式耳机。 但是,只需对应用程序进行一些更改,就可以在其中实现对整个混合现实设备(包括HoloLens)范围的支持。

由于我们使用了混合现实工具包来控制摄像机,实现交互并添加按钮,因此我们仅需对项目进行一些更改。

隐藏虚拟房间


我们需要编写一个脚本来确定应用程序在沉浸式耳机或HoloLens设备上运行的设备上。 如果应用程序在HoloLens设备上运行,则必须隐藏虚拟空间,以便用户可以与实际环境进行交互。 为此,我们首先将Tag元素添加到RoomPrefab预制中,然后我们将在脚本中访问此标签。

1.在“层次结构”面板中选择RoomPrefab预制件。

2.在“检查器”面板的“标签”下拉列表中,选择“添加标签...”。



3.单击+号创建一个新标签,并将该标签命名为HMDUOnly。



4.现在,再次单击“层次结构”面板中的RoomPrefab预制件,然后从“检查器”面板的“标签”下拉菜单中选择HMDUOnly标签。

您可以通过多种方式在脚本中选择游戏对象。 我们可以将标签添加到需要隐藏的任何对象(如果有多个对象),然后依次隐藏每个对象。 调用FindGameObjectsWithTag方法不是最理想的方法,但是它非常适合我们。

5.从顶部的Unity菜单中,选择GameObject-> Create Empty。

6.在“层次结构”面板中,将添加的空GameObject的名称更改为GameManager。

7.在“检查器”面板中,单击“添加组件”->“新建脚本”,并将该脚本命名为GameManager,选择C Sharp作为编程语言。 单击创建并添加以创建脚本。

8.要打开GameManager脚本,请在“检查器”面板或“资产”面板中双击它。

9.将GameManager脚本代码替换为以下代码。 在应用程序启动时,该测试仅需要执行一次。 我们将在Start()函数中执行它,并删除Update()函数。

using System.Collections; using System.Collections.Generic; using UnityEngine; // We need the UnityEngine.XR.WSA namespace to access Holographic Settings which contain // functions which effect the performance and presentation of Holograms on Windows // Holographic platforms. using UnityEngine.XR.WSA; public class GameManager : MonoBehaviour { void Start () { // Check if the MR headset display is transparent (not opaque). if(!HolographicSettings.IsDisplayOpaque){ // If that is the case, then we need to hide the virtual living room GameObject[] HMDUOnlyObjects = GameObject.FindGameObjectsWithTag("HMDUOnly"); for (int i = 0; i < HMDUOnlyObjects.Length; i++){ // Set active to false disables the object. HMDUOnlyObjects[i].SetActive(false); } } } } 

最后,为了确保应用程序在HoloLens设备上正常运行,我们需要将摄像机的背景设为黑色。

10.在“层次结构”面板中,选择MixedRealityCameraParent-> MixedRealityCamera对象。 向下滚动检查器面板,然后为混合现实相机管理器->透明显示设置->背景颜色参数(混合现实相机管理器->透明显示设置->背景颜色)选择黑色作为值。



添加空间映射


几乎一切准备就绪! 现在我们需要启用空间映射 。 空间成像技术提供了HoloLens环境中物理表面的详细视图,使开发人员可以创建混合现实应用程序,这种应用程序的可能性令人印象深刻。 在我们的情况下,空间映射将允许用户以自然的方式放置扬声器,从而不会被物理表面遮挡。

首先,让我们确保未隐藏边界框对象(边界框)中负责移动和旋转的控件。

1.在“项目”面板的“资产”->“预制件”文件夹中找到AppBarCustom预制件。

2.为“悬停偏移Y比例”属性(“悬停偏移比例”)设置值0。



现在让我们向场景中添加空间映射组件。

3.在资产-> HoloTookit-> SpatialMapping-> Prefabs文件夹中找到SpatialMapping预制件(资源-> HoloTookit->空间映射->预制件)。

4.将其拖到场景的“层次结构”面板中。



手势全息镜头


到目前为止,我们的应用程序中的所有类型的交互都是使用运动控制器进行的。 如果应用程序将在HoloLens设备(或其仿真器)上运行,则需要使用另一种方法来移动扬声器并在程序代码中切换到该扬声器。 BoundingBox方法也可以在HoloLens中重用,但是我们希望通过进行一些更改来优化交互。

1.在“项目”面板中选择“扬声器”预制件。

2.单击添加组件->点击放置。 这是MR Toolkit中HoloLens的脚本,允许用户触摸物体或全息图并轻松地在空间中移动它们。

3.禁用它,使其默认情况下不启动。 要禁用脚本,只需在“检查器”面板中取消选中其名称旁边的复选框即可。 该组件还将向讲者预制中添加Interpolator脚本。



4.通过选择添加组件->新建脚本,将该脚本添加到Speaker预制板,然后将此脚本命名为SpeakerMovement。

5.编辑脚本—双击它,并将脚本代码替换为以下代码。

 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.WSA; // namespace for the TwoHandManipulatable script using HoloToolkit.Unity.InputModule.Utilities.Interactions; // namespace for the TapToPlace script using HoloToolkit.Unity.SpatialMapping; public class SpeakerMovement : MonoBehaviour { void Start () { if(!HolographicSettings.IsDisplayOpaque){ GetComponent<TwoHandManipulatable>().enabled = false; GetComponent<TapToPlace>().enabled = true; } } } 

通过为使用的场景指定名称空间,我们将使用与GameManager脚本中相同的测试来隐藏房间。 这次,当检测到HoloLens设备时,测试将关闭一个脚本,然后打开另一个脚本。 由于我们更改了扬声器的预制件,因此此更改将影响场景中的所有扬声器。 如果更改了Speaker预制实例之一,请单击“检查器”面板右上角的“应用”以更新该预制。

做完了! 现在,您可以构建应用程序并在沉浸式耳机或HoloLens设备上运行它,然后将扬声器放在房间的任何地方,旋转并控制它们。

图形(可选)


让我们看看如何改善应用程序的视觉效果,因为即使很小的改进也可以显着改变其感知。 如果您想学习如何使应用程序更具吸引力而又没有太多困难,可以使用以下说明。

添加自定义天空盒


1.在顶部菜单中,选择窗口->照明->设置(窗口->照明->设置)。

2.将Cloudymorning.mat天空盒从“资产”->“纹理”文件夹拖到“天空盒材质”属性。

后处理


注意事项 可以对场景中的任何摄像机执行以下操作,但是无法在编辑器中查看它们。

1.在场景的“层次结构”面板中选择MixedRealityCameraParent-> MixedRealityCamera元素。

2.单击添加组件->后处理行为。

3.在Assets-> PostProcessing文件夹中找到CustomProfile.asset元素,并将其拖动到Post Processing Behavior脚本的Profile属性中。

尽可能多地试验后处理概要文件,但请记住, 后处理会消耗资源

恭喜你! 您已完成此练习。

原来的
作者:埃里克·阿尔斯特罗姆(Eric Ahlstrom),巴克莱姆斯(Cbarkerms),麦迪逊·海特

Source: https://habr.com/ru/post/zh-CN418665/


All Articles