序言
最近因?yàn)槟承┰蚺cHololens結(jié)下了緣分,在上課之余經(jīng)過(guò)自己及小組成員的不懈努力,終于完成了這個(gè)說(shuō)大不大說(shuō)小不小的工程,也可謂是歷經(jīng)千辛萬(wàn)苦,下面的講解純屬小白入門(mén)過(guò)程,還請(qǐng)大佬們自動(dòng)忽略,如果有學(xué)習(xí)需求的話這篇博客將帶你進(jìn)入Hololens應(yīng)用及游戲開(kāi)發(fā)的新世界(小姐姐~~別走啊啊啊啊啊啊(。_。),非宅男技術(shù)帖!?。。。。?/p>
環(huán)境安裝及配置
在使用VS及Unity對(duì)Hololens應(yīng)用進(jìn)行開(kāi)發(fā)時(shí),需要先對(duì)電腦的環(huán)境進(jìn)行相關(guān)配置,原料需求如下:
-
VS2017傳送門(mén) :這里由于使用需求不同,VS組件的安裝也都不盡相同,一般大家在安裝了c語(yǔ)言和c++的組件之后就能滿足日常需求,而這里由于需要使用Unity的開(kāi)發(fā)組件,因此在安裝時(shí)一定要勾選相應(yīng)的內(nèi)容
如上圖所示點(diǎn)擊修改即可進(jìn)入修改組件界面
選擇其中的通用Windows平臺(tái)開(kāi)發(fā)(即常說(shuō)的UWP應(yīng)用開(kāi)發(fā))、.NET桌面開(kāi)發(fā)和使用Unity的游戲開(kāi)發(fā)組件,單個(gè)組件的安裝列表見(jiàn)下圖



在Unity的安裝組件中,有一個(gè)可選的Unity編輯器,官方推薦在安裝VS中的Unity組件時(shí)盡量不要選擇該編輯器,因?yàn)閁nity官方有提供LTS(long term support)version,下載鏈接見(jiàn)下文;(當(dāng)然如果想省事的話博主偷偷告訴大家VS提供的編輯器也是可以用的!?。?/p>
-
Unity傳送門(mén):該安裝版本是Microsoft官方推薦的Unity LTS版本,推薦大家下載使用;當(dāng)然在安裝的時(shí)候一定要選擇相應(yīng)的組件(博主就是因?yàn)槿鄙賹?duì)應(yīng)的組件在上面糾纏了一個(gè)下午╮(╯_╰)╭),如下圖所示在安裝界面選擇如下組件(作為Hololens開(kāi)發(fā)以下組件已足夠)直接選擇next即可,安裝時(shí)盡量按照默認(rèn)安裝位置,并且最好確保VS與Unity在同一個(gè)盤(pán)內(nèi);

圖中安裝組件包括了編輯器、編譯器必要的說(shuō)明文檔以及標(biāo)準(zhǔn)的asset庫(kù),同時(shí)Windows Store .NET Scripting Backened用于編譯生成c#工程文件,Windows Store IL2CPP Scripting Backened用于編譯生成c++工程(IL2CPP是Unity近幾年提出的新的框架,但是作為入門(mén)的話.NET框架更接地氣一點(diǎn),emmm至少還是能看一看的)
-
MRTK(Mixed Reality Toolkit) 傳送門(mén):MRTK是一系列腳本和組件,旨在加速針對(duì)Microsoft HoloLens和Windows混合現(xiàn)實(shí)沉浸式(VR)耳機(jī)的應(yīng)用程序的開(kāi)發(fā)。 該項(xiàng)目旨在減少創(chuàng)建混合現(xiàn)實(shí)應(yīng)用程序的障礙,在github上有開(kāi)源的項(xiàng)目代碼,關(guān)于其使用還請(qǐng)參看后文
-
Hololens Emulator傳送門(mén):在前期測(cè)試工程時(shí),可以先將生成的工程在Emulator里運(yùn)行,測(cè)試無(wú)誤之后再將應(yīng)用安裝進(jìn)頭戴設(shè)備;
使用方法
- 打開(kāi)安裝完成的Unity,在啟動(dòng)界面選擇打開(kāi)現(xiàn)有工程,打開(kāi)我們之前下載的MRTK工程(選擇對(duì)應(yīng)的文件夾后Unity能自動(dòng)辨識(shí)是否為正確的工程文件)

進(jìn)入后點(diǎn)擊Assets->export package,會(huì)出現(xiàn)如下界面
選擇要導(dǎo)出的內(nèi)容(在不知道需要什么的情況下建議大家全部導(dǎo)出哈,雖然大了點(diǎn)但是你可以有足夠的素材搭建自己的游戲場(chǎng)景),導(dǎo)出至本地文件夾;
- 有了上面的準(zhǔn)備之后就可以建立自己的第一個(gè)工程了,在啟動(dòng)界面新建空工程,根據(jù)自己的需求選擇項(xiàng)目屬性,進(jìn)入之后在左下方的Assets目錄右擊,選擇import package->Custom Package,這樣就將Holotoolkit中已經(jīng)涵蓋的腳本等資源文件加入到了自己的工程中,下面就是搭建場(chǎng)景了;
- 場(chǎng)景搭建過(guò)程主要是向場(chǎng)景中添加對(duì)象并為對(duì)象配置腳本,這里我們可以從剛剛導(dǎo)入的Package中選擇游戲?qū)ο蟛⑵浞胖玫接螒驁?chǎng)景中,簡(jiǎn)單的一個(gè)scene就完成了,點(diǎn)擊運(yùn)行之后就會(huì)呈現(xiàn)出上圖所示的界面

- 有了場(chǎng)景之后,我們當(dāng)然更希望能夠讓場(chǎng)景"活過(guò)來(lái)",這時(shí)候就到了腳本出場(chǎng)的時(shí)候了,Unity中的腳本文件主要運(yùn)用基于Unity引擎的c#腳本,當(dāng)然也有JavaScript版本,這個(gè)就根據(jù)個(gè)人興趣或者已掌握的編程語(yǔ)言來(lái)決定了,比如在我們Porject的asset目錄下新建一個(gè)腳本的過(guò)程如下,點(diǎn)擊create或者右擊空白區(qū)域在選項(xiàng)中選中create均可以創(chuàng)建新的腳本,下面是一個(gè)最基本的移動(dòng)、旋轉(zhuǎn)和縮放立方體的c#腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyScript : MonoBehaviour {
public GameObject myCube;
public int tranSpeed = 100;
public float RotaSpeed = 10.5f;
public float scale = 3;
private void OnGUI()
{
if(GUILayout.Button("MoveCube"))
{
myCube.transform.Translate(Vector3.forward * tranSpeed * Time.deltaTime, Space.World);
}
if(GUILayout.Button("RotateCube"))
{
myCube.transform.Rotate(Vector3.up * RotaSpeed, Space.World);
}
if(GUILayout.Button("ZoomCube"))
{
myCube.transform.localScale = new Vector3(scale, scale, scale);
}
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
將腳本文件拖給對(duì)象之后,運(yùn)行的效果如下:
可以看到運(yùn)行之后在場(chǎng)景的左上方出現(xiàn)了三個(gè)按鈕控件(GUI控件的一種),此時(shí)只要點(diǎn)擊對(duì)應(yīng)的按鈕即可實(shí)現(xiàn)立方體的縮放、旋轉(zhuǎn)以及移動(dòng)。
- 到此為止,我們?cè)赨nity里面的工作已經(jīng)進(jìn)行完了,場(chǎng)景創(chuàng)建、腳本添加結(jié)束之后檢查運(yùn)行效果,就可以Build生成.Net框架的VS工程了,在Unity中左上角點(diǎn)擊
File–>BuildSettings會(huì)出現(xiàn)如下界面,這里我們需要做一部分工作;首先點(diǎn)擊Add Open Scenes按鈕,我們剛剛創(chuàng)建的場(chǎng)景就會(huì)自定添加進(jìn)來(lái),其后的編號(hào)就是在將來(lái)生成的工程中該場(chǎng)景的序號(hào),在進(jìn)行場(chǎng)景切換時(shí)會(huì)用到該序號(hào)。
添加完場(chǎng)景之后,在左側(cè)的Platform中選擇對(duì)應(yīng)的生成平臺(tái),這里由于我們要生成基于Hololens的應(yīng)用程序,因此選擇UWP(Universal Winsows Platform)平臺(tái)作為目標(biāo)平臺(tái),選中之后點(diǎn)擊Switch Platform即可,之后在右側(cè)的下拉選項(xiàng)中分別選中對(duì)應(yīng)選項(xiàng),操作之后的結(jié)果如下

此時(shí)點(diǎn)擊Switch Platform按鈕旁邊的Player Settings,會(huì)在右側(cè)出現(xiàn)一堆選項(xiàng)如下圖所示:

在右側(cè)的6個(gè)下拉選項(xiàng)中我們主要操作其中的3個(gè),首先點(diǎn)擊Other Settings,在Configuration部分修改Scripting Backened選項(xiàng)至下圖結(jié)果(如果默認(rèn)為如下結(jié)果則可忽略該步驟,當(dāng)然這里由于.NET版本不同可能略微有差異)

緊接著點(diǎn)擊Publishing Settings并拉至最底端,在Capability選項(xiàng)中勾選Microphone和SpartialPerception;然后點(diǎn)擊XR Settings并勾選Virtual Reality Supported選項(xiàng)
(!?。【褪沁@個(gè)鬼讓樓主頭疼了半天,因?yàn)榻撕镁玫娜S模型到了Hololens中變成了二維場(chǎng)景嗚嗚嗚),這樣就大功告成啦!點(diǎn)擊Build之后選擇自己的目標(biāo)文件夾然后就靜候佳音吧(因?yàn)槭状蜝uild可能會(huì)比較慢哈哈哈哈哈)。這里有一個(gè)小tips,生成c#工程時(shí),我們默認(rèn)是在Unity工程目錄下,新建一個(gè)App子目錄,并將工程Build到該文件夾中(方便小可愛(ài)們?nèi)蘸蟛檎覇褈~)

6.此時(shí),進(jìn)入我們剛剛生成的App文件夾中運(yùn)行解決方案文件(格式為ProjectName.sln),在VS中就打開(kāi)我們的工程啦!有木有很開(kāi)心,沒(méi)錯(cuò)我們離成功只有咫尺之遙了!但是還是不能高興的太早,畢竟行百里者半九十,在打開(kāi)VS工程后,我們選擇解決方案配置中的Debug選項(xiàng),為了驗(yàn)證程序的正確性并減少不必要的麻煩,我們先在虛擬機(jī)上嘗試運(yùn)行,選擇x86平臺(tái)(Hololens是32位系統(tǒng)),之后選擇運(yùn)行平臺(tái)為Hololens Emulator(這時(shí)候就要看之前的 Hololens Emulator有木有裝好了),配置好之后的界面如下圖所示
這里除了Hololens Emulator版本可能不一樣,其他配置均應(yīng)相同。運(yùn)行我們的程序,在虛擬機(jī)中運(yùn)行的效果如圖所示(第一次啟動(dòng)虛擬機(jī)可能會(huì)消耗比較長(zhǎng)的時(shí)間,等十幾分鐘也很常見(jiàn)):


這里由于我是通過(guò)GUI來(lái)添加的Button,因此在生成三維場(chǎng)景之后,二維的Button是無(wú)法看到的。這里僅僅作為例子說(shuō)明使用,大家如果需要使用三維空間的Button控件的話可以直接在創(chuàng)建場(chǎng)景時(shí)create button即可,這時(shí)候的Button控件即為三維空間中的Button.
結(jié)語(yǔ)
到此為止,本篇教程基本結(jié)束,希望大家在看了之后能夠有所收益。這里我再列舉幾個(gè)過(guò)程中比較罕見(jiàn)的錯(cuò)誤以及解決方案(其實(shí)沒(méi)有什么解決方案,沒(méi)有什么問(wèn)題是把環(huán)境重新裝一遍解決不了的,如果有…還是推薦大家別裝第三遍,仔細(xì)閱讀下上面的內(nèi)容看是不是哪里出錯(cuò)了!)
1、生成的VS工程中缺少必要的文件:這種情況一般不會(huì)是程序的問(wèn)題,因?yàn)橹灰窃赨nity中能夠正常運(yùn)行的程序生成VS項(xiàng)目之后都應(yīng)該能在虛擬機(jī)上運(yùn)行,此時(shí)就要考慮是不是Unity的安裝出了問(wèn)題(推薦大家安裝官方給出的版本,因?yàn)槲乙验_(kāi)始裝的最新版的Unity在生成工程之后竟是遇到了上述問(wèn)題…)
2、生成VS工程時(shí)一定記得配置Player Settings!否則工程生成之后無(wú)法使用!
3、部分版本的VS在將應(yīng)用程序加載進(jìn)Hololens之前需要對(duì)工程進(jìn)行部分修改,這里指出一個(gè)比較關(guān)鍵的地方,有時(shí)會(huì)影響到程序運(yùn)行是否成功——在生成的VS工程中,選擇Package.appxmanifest文件如下圖所示
在選擇該文件夾之后右鍵選擇查看代碼即可看到對(duì)應(yīng)的源代碼,在Dependencies分支下進(jìn)行修改如下
修改前:
`<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.17763.0" />
</Dependencies>`
修改后:
<Dependencies>
<TargetDeviceFamily Name="Windows.Holographic" MinVersion="10.0.10240.0" MaxVersionTested="10.0.17763.0" />
</Dependencies>
|