HoloLens开发上手详细教程之-语音控制

本文是之前视频文章(点击查看效果视频演示)的详细教程,HoloLens的开发涉及Unity和Visual Studio的使用,没有接触过的朋友容易一头雾水,本教程给大家尽量一步步展示流程和效果,让你少走一些弯路,顺利体验一遍HoloLens开发的感觉。

首先,看过之前叶老师的视频的朋友应该已经顺利安装好开发所需要的环境:Unity Hololens preview版本和Visual Studio。我们控制台页面现实的效果还需要一个官方提供的一个库:HoloLens Toolkit,github地址为:https://github.com/Microsoft/HoloToolkit-Unity。在HoloLens Toolkit中,有我们开发HoloLens会使用到的Unity组件脚本(Component)。实现控制效果需要用到5个Component,其中Tagalong,KeywordManager和FPSDisplay三个Component是HoloLens Toolkit提供的。下面我们一步步来实现控制台效果:

 

第一步,创建工程,导入HoloLens Toolkit:

1

注意选择3D。创建成功后,在顶部菜单Asset中导入HoloLens Toolkit,具体做法是:

Assets -> Import Package -> Custom Package…  然后选择你之前下载的HoloLens Toolkit的压缩包。导入之后就会在项目资源窗口出现导入的Asset:

2

也可以解压后拖入窗口。这样在之后创建object后就可以加载这里添加的Component。

第二步,导入HoloLens Toolkit的Main Camera:

3

默认创建一个工程Project后,系统会自动为你生成两个Object:Main Camera和Directional Light。这里我们右键Delete删除掉自动生成的Main Camera。然后在Asset中找到HoloLens Toolkit中提供的Main Camera。具体寻找方法可以点击搜索All Prefabs,选择Main Camera:

4

将Main Camera拖到Hierachy的根菜单,效果是这样的:

51

 

这里的Main Camera和自动生成的Main Camera区别在于,Background颜色为黑色(透明效果)和 Near的值为0.85;当然你也可以自己修改自动生成的Main Camera。

第三步,创建一个Empty Object:

6

创建好之后,将Object改名为Console(或者其他名字,你喜欢的)。

接下来创建一个Canvas,具体操作步骤:右键点击Console->选择UI->选择创建一个Canvas;在创建Canvas的同时,系统会同时创建一个EventSystem;将这个Canvas更名为ConsoleCanvas(或者其他名字,你喜欢的)。

接下来修改ConsoleCanvas的参数设置:将Render Mode改为World Space,然后将EventCamera设置为Main Camera,做法是点击Event Camera选项后面的小圆圈,点击选择Main Camera。然后将Canvas Scaler中的Dynamic Pixels 设置为30.

7

设置ConsoleCanvas的尺寸和位置:

8

第四步,创建显示文字的Panel和Text:

创建方法:右键点击ConsoleCanvas,选择UI->选择Panel;

9

可以修改Image->Color的颜色为自己想要的颜色。

接下来,右键点击Panel->UI->Text;创建一个Text显示文字,结果如下:

10

X、Y的位置可以适当调整到合适位置。

然后将HoloLens ToolKit中的FPS Display 也拖入Panel下面。展开FPS Display,把FPS Background层拖到Panel,其余删除。最后的结构是这样的:

11

然后点击FPS Background,修改他的位置,调整到你觉得合适的位置:

12

最后的效果从Scene窗口看到是这样的:

13

第五步,给Console增加Script Component:

14

添加脚本的方式:左键选中Console->Add Component->选择不同模块下的脚本,Unity会自动加载Asset的Script。最后的效果如下:

15

添加方式:Add Component->搜索上面需要添加的Component的名称;

17

逐一寻找到上述的7个脚本,其中Console Window AR是我们自己创建的脚本,主要作用是让Panel的Text依照我们的操作命令文字,具体做法是:右键点击Asset(可以创建一个文件夹Script,不创建也没关系)->create->C#->命名为Console Window AR(可以是你想要的名字)。

18

 

其余两个Script主要作用分别是:

Box Collider:一个基本的方形碰撞原型;具体细节参考:Box Collider中文说明

Interpolator:插值算法,可以让你看到的物体在运动时效果平滑

Tagalong:这是在SimpleTagalong上的拓展,可以设置可见物体的范围数值;并且保证物体显示在其他Holograms对象之前,换言之,你看到的离你最近的物体

Billboard:保证物体始终面向Camera

Keyword Manager:用来识别用户发音,配置对应执行反馈函数;此处先添加,等后面完成语音控制脚本之后再回头设置这里的参数。

Fixed Angular Size:保证不管物体离Camera的距离多远,物体可见直径保持不变。

第六步,编辑ConsoleWindowAR,实现语音控制Canvas上的显示效果。

19在你的Asset中找到上一步创建的ConsoleWindowAR,双击后,系统会自动用Visual Studio打开;删掉自动生成的void start和void update;


 

下面是ConsoleWindowAR的代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

public class ConsoleWindowAR : MonoBehaviour {

struct Log
{
public string message;
public string stackTrace;
public LogType type;
}
private Text text;
List<Log> logs = new List<Log>();
GameObject consoleTextWindows;
GameObject consoleCanvas;
GameObject debugError;

bool show;
public int clearCount = 23;

static readonly Dictionary<LogType, Color> logTypeColors = new Dictionary<LogType, Color>() {

{LogType.Assert, Color.white },
{LogType.Error, Color.red },
{LogType.Exception, Color.red },
{LogType.Log, Color.white },
{LogType.Warning, Color.yellow },
};

void OnEnable()
{
Application.logMessageReceived += HandleLog;

consoleTextWindows = GameObject.Find(“ConsoleText”);
consoleCanvas = GameObject.Find(“ConsoleCanvas”);
text = consoleTextWindows.GetComponent<Text>();

Debug.Log(“OnEnable”);

}

void Update()
{
if (logs.Count >= clearCount)
{
ClearConsole();
}

if (Input.GetKeyDown(“1″))
{
debugError.name = “nothing”;
}

if (Input.GetKeyDown(“2″))
{
RandomMessage();
}
}

public void HideKeyword()
{
Debug.Log(“我隐藏起来了!”);
consoleCanvas.SetActive(false);
show = false;
}
public void ShowKeyword()
{
Debug.Log(“Hello 欢迎来到虚拟现实世界! — 这是杨挺志的设备HoloLens”);
consoleCanvas.SetActive(true);
show = true;
}

public void ClearConsole()
{
logs.Clear();
}

void HandleLog(string message, string stackTrace, LogType type)
{
string nullstring = “”;
text.text = nullstring;
string temp = text.text;

logs.Add(new Log()
{
message = message,
stackTrace = stackTrace,
type = type,

});

for(int i=0; i<logs.Count; i++)
{
var log = logs[i];
text.color = logTypeColors[log.type];
text.text += temp + “\n” + log.message;
text.text += “\n” + log.stackTrace;
}

}

public void RandomMessage()
{
string str;
int i = Random.Range(1, 20);
str =Random.Range(0.0000000000000001f, 9999999999.0f).ToString();
if (i>=1&&i<=5)
{
HandleLog(str, “somethingIDK”, LogType.Exception);
}
if (i>5 && i<8)
{
HandleLog(“这是一段随机的信息!”, “this should be a stacktTrace”, LogType.Log);
}
if (i >= 8 && i < 12)
{
HandleLog(“这是一段随机的信息!”, “stacktTrace”, LogType.Error);
}
if (i >= 12 && i < 15)
{
HandleLog(“这是一段随机的信息!”, “stacktTrace”, LogType.Warning);
}
if (i >= 15 && i < 18)
{
HandleLog(“this is a Exception message”, “stacktTrace”, LogType.Exception);
}
if (i >= 18 && i < 21)
{
HandleLog(“this is a Assertion message”, “stacktTrace”, LogType.Assert);
}

}
}


 

 

第七步,添加语音控制命令和执行函数

保存后ConsoleWindowAR,回到Unity操作界面。选择Console对象,在Component栏中找到Keyword and Responses:

20

在“size”处填写你要设置的命令个数,比如这里选择“2”。“keyword”对应是语音发音的单词:如“Hide”,“Key Code”可以填写为“H”;然后点击“+”选择object“Console”(即操作对象为Console),然后选择Function是ConsoleWindowAR.HideKeyword。同理可以设置“Show”的动作。因为我们设置了“Key Code“。此时你已经可以在UNITY中运行该程序了。具体做法是:

21

 

点击顶部的运行按钮,在Game视角中,按键盘的“H”和“S”会运行对应效果。如果可以看到效果,恭喜你可以打包到HoloLens或者模拟器上运行了。

 

第八步,HoloLens调试。

首先需要设置对应HoloLens系统的发布格式:

22

 

点击“player settings”,勾选我们需要的语音服务:

23

这样就可以点击“Build”。选择你要输出的文件夹后,Unity就会将你的程序发布保存到这个文件夹。找到这个文件夹根目录,找到“sln”文件,双击用Visual Studio打开:

24

打开后,选择Release,x86和device;当然如果你的HoloLens第一次链接调试,需要设定开发者模式和验证Pin码,这个两个步骤比较简单,大家可以在HoloLens的设置中轻松找到方法。

以上就是大概实现整个程序的步骤,个人感觉本案例主要的困难是如何为Unity的对象设定脚本、HoloLens的API使用以及对Unity GUI的理解和操作。但熟悉一般流程后,没有陌生感觉就容易上手做更复杂的功能。祝大家顺利!

欢迎加入开发者群:418092645 分享源代码

最后做一个广告:9月17日将举办第一次HoloLens开发者交流聚会,地点在上海杨浦区政学路77号。欢迎海内外的开发者朋友一起交流、分享!

poster

 

扫描这个公众号报名:

qrcode_for_gh_9f099bd23131_258

未经允许不得转载:混合现实开发者 » HoloLens开发上手详细教程之-语音控制

赞 (4)
分享到:更多 ()