Unity強化篇(二) —— 適用于Unity的HTC Vive教程(一)

版本記錄

版本號 時間
V1.0 2019.02.13 星期三

前言

Unity是由Unity Technologies開發(fā)的一個讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)游戲引擎。Unity類似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的圖型化開發(fā)環(huán)境為首要方式的軟件。其編輯器運行在Windows 和Mac OS X下,可發(fā)布游戲至WindowsMacWiiiPhoneWebGL(需要HTML5)、Windows phone 8和Android平臺。也可以利用Unity web player插件發(fā)布網(wǎng)頁游戲,支持Mac和Windows的網(wǎng)頁瀏覽。它的網(wǎng)頁播放器也被Mac 所支持。網(wǎng)頁游戲 坦克英雄和手機游戲王者榮耀都是基于它的開發(fā)。感興趣的看下面幾篇文章。
1. Unity強化篇(一) —— 如何使用Vuforia制作AR游戲(一)

開始

首先看下寫作環(huán)境

C#4, Unity 2018.2, Unity

HTC Vive是由HTCValve Corporation開發(fā)的虛擬現(xiàn)實headset。它可以讓您進入虛擬世界并親身體驗它,而不是通過屏幕上的頭像。

如果您是Unity開發(fā)人員,將HTC Vive虛擬現(xiàn)實游戲制作成您自己的游戲很容易 - 您甚至可以說HTC ViveUnity是天作之合。

在本HTC Vive教程中,您將學(xué)習(xí)如何將HTC Vive集成到您自己的Unity游戲中。具體來說,您將學(xué)習(xí)如何:

  • 下載并配置SteamVR
  • 處理控制器的輸入。
  • 在VR中與物理對象交互。
  • 制作激光筆。
  • 傳送一個區(qū)域。

在本HTC Vive教程的最后,您將擁有一個沙盒,可以進行進一步的實驗。現(xiàn)在是時候開始吧!

注意:戴頭戴式顯示器時,每個人對移動和旋轉(zhuǎn)的反應(yīng)都不同。如果這是你的第一次,請自己動手,如果你感到惡心或不舒服,請休息一下。大多數(shù)人都習(xí)慣了VR。如果你在前幾次感覺不舒服,不要擔(dān)心 - 它可能會過去。

在深入學(xué)習(xí)本教程之前,請確保您具有以下內(nèi)容:

  • 支持VR的Windows PC
  • 您機器上安裝的copy of Unity 2018.2.14或更新版本的副本。
  • 安裝了所有硬件并配置和更新軟件的HTC Vive or HTC Vive Pro
  • 已安裝SteamSteamVR。 請參閱本指南this guide,該指南將指導(dǎo)您完成硬件設(shè)置并提供下載Steam和SteamVR的鏈接。
  • 基本的Unity知識。
  • 對腳本的基本了解。
  • 打開并連接的HTC Vive

在Unity中打開準備好的starter文件夾。 在Project窗口中查看RW的內(nèi)容:

每個文件夾都作為特定資源的基本文件夾:

  • Materials:用于場景的材料,包括藍色彈力球。
  • Models:所有模型。
  • Physics Materials:彈性球物理材料。
  • Prefabs:松散的物體預(yù)制件。
  • Scenes:游戲場景就在這里。
  • Scripts:所有腳本。
  • Textures:場景中所有對象共享的單個紋理。

打開Game場景。 查看場景視圖,然后單擊play以嘗試游戲:

目前,沒有太多事情發(fā)生,因為現(xiàn)場還沒有VR裝備。 您需要將SteamVR添加到項目中以將Vive連接到Unity


Setting Up SteamVR

SteamVR SDKValve制作的官方庫,可以更輕松地為所有主要的VR headsets開發(fā)。 它目前在資源商店免費,并支持Oculus RiftHTC Vive等等。

在頂部欄中選擇Window> General> Asset Store打開Asset Store

加載商店后,在頂部的搜索區(qū)域中鍵入SteamVR,然后單擊Enter。 向下滾動一下以查看選擇的資源。 單擊SteamVR Plugin以打開其商店頁面:

單擊Download并給它一點時間。 完成后,單擊Import以打開包導(dǎo)入對話框。 單擊此窗口右下角的Import以導(dǎo)入包:

注意:在導(dǎo)入結(jié)束時,您可能會看到以下消息,具體取決于您的Unity版本:

單擊I Made a Backup按鈕,讓編輯器更新并重新編譯腳本。

幾秒鐘后你會看到這個窗口:

這是SteamVR插件的一部分;它顯示了您可以改進的編輯器設(shè)置,以最大限度地提高性能和兼容性。

當您打開一個新項目并導(dǎo)入SteamVR時,您會看到很多條目。 由于入門項目已經(jīng)過很好的優(yōu)化,因此這里唯一的建議是禁用解析對話框。

單擊Accept All以執(zhí)行所有建議的更改。 關(guān)閉Asset Store并切換回Scene視圖。 您現(xiàn)在將在Project窗口中有一個名為SteamVR的新文件夾:

打開SteamVR文件夾,查看里面的文件夾。 您將從Prefabs文件夾中將一些必要的VR GameObjects添加到場景中。

選擇[CameraRig][SteamVR]并將它們拖到Hierarchy中:

[SteamVR]附加了一個Steam VR_Render組件,用于處理所有VR攝像機的渲染。

[CameraRig]更有趣,因為它控制著Vive的headset和控制器。 選擇[CameraRig]并在Inspector中將其Position設(shè)置為(X:0,Y:0,Z:-1.1),以便在桌子后面滑動整個裝備。

從層次結(jié)構(gòu)中刪除Main Camera,因為它會干擾[CameraRig]及其嵌入式攝像頭。

HMD置于觸手可及的范圍內(nèi),打開控制器并啟動場景。 拿兩個控制器并將它們擺動一下。 您會注意到在Scene視圖中看到虛擬控制器在四處揮手:

一旦SteamVR插件檢測到控制器,它就會創(chuàng)建這些虛擬版本。 控制器映射到[CameraRig]的兩個Controller子節(jié)點:

現(xiàn)在,在仍然運行場景的同時,在層次結(jié)構(gòu)中選擇Camera,并通過頂部帶子小心地拾取頭戴式顯示器。 移動并旋轉(zhuǎn)一下,然后觀察Scene視圖:

Camera與頭戴式顯示器相連,可精確跟蹤每個現(xiàn)實生活中的移動和旋轉(zhuǎn)。

現(xiàn)在,將頭戴式顯示器放在頭上,抓住控制器,然后環(huán)顧四周,感受一下房間。

如果您嘗試與對象進行交互,您會感到失望,因為沒有任何反應(yīng)。 要添加移動跟蹤之外的功能,您需要執(zhí)行一些腳本編寫。


Handling Input

拿一個手中的控制器,給它一個合適的外觀。 每個控制器都有以下輸入:

除了上面的輸入,每個控制器在移動和旋轉(zhuǎn)時也具有速度和旋轉(zhuǎn)速度;這在與物理對象交互時證明特別方便。

1. Defining Actions

SteamVR 2.0版開始,Valve已經(jīng)用輸入系統(tǒng)取代了輸入系統(tǒng)的傳統(tǒng)1:1硬件映射。 這在硬件和Unity之間增加了一層抽象。

操作系統(tǒng)允許您考慮用戶操作,而不是需要輪詢哪些按鈕或觸發(fā)器進行輸入。 SteamVR計算出用于給定操作的輸入。

通過在頂部菜單中選擇Window> SteamVR Input打開SteamVR Input窗口。

出現(xiàn)下面的窗口,詢問您是否要將一些示例文件復(fù)制到項目中。 選擇Yes

這會在項目的根目錄中創(chuàng)建幾個JSON文件:

actions.json文件包含所有操作,操作集和對默認綁定的引用。 其他JSON文件包含每個操作的默認綁定。 幸運的是,您不必手動編輯這些內(nèi)容。

查看SteamVR輸入窗口;這包含所有操作集和操作:

該窗口包含一些重要的部分和按鈕:

  • 1) The action sets:此處的按鈕就像選項卡一樣在各set之間切換。
  • 2) Actions:默認的操作集,包括輸入和輸出。您可以在此處添加,編輯和刪除操作。
  • 3) 此按鈕將所有操作集和操作保存到JSON,并生成許多幫助程序類,以便輕松訪問操作。
  • 4) 該按鈕打開一個本地托管的Web頁面,允許您將操作綁定到硬件。

您可以在此處定義多個actions sets,每個操作集都包含一系列操作。您可以將每個輸入操作分類為以下類型之一:

  • Boolean:打開或關(guān)閉true或false的操作。使用示例:抓住。
  • Single / Vector1:值介于0和1之間的操作。示例用法:移動速度。
  • Vector2:X和Y值介于0和1之間的動作。示例用法:方向。
  • Vector3:X,Y和Z值介于0和1之間的動作。這些動作非常罕見。
  • Pose:表示3D空間中位置和旋轉(zhuǎn)的動作。這些操作用于跟蹤VR控制器和HMD
  • Skeleton:使用SteamVR Skeleton Input系統(tǒng)估算拿著VR控制器時玩家手指的位置的動作。無論控制器的跟蹤保真度如何,這都為每個手指提供關(guān)節(jié)位置和旋轉(zhuǎn)。

最后,還有一個輸出動作:振動(vibration)。您可以使用此操作使控制器振動。

是時候編輯動作了!

單擊platformer按鈕和mirrored下拉列表旁邊的減號按鈕以刪除platformer操作集:

出現(xiàn)確認窗口時,選擇Delete

對于有buggy action set做同樣的事情;您只需要為本教程設(shè)置的默認操作。

接下來,通過刪除以下操作來清理操作列表。 逐個選擇它們,然后單擊右下角的減號按鈕:

  • InteractUI
  • GrabPinch
  • Pose
  • Squeeze

接下來,選擇GrabGrip操作并通過編輯其Name字段將其重命名為Grab

創(chuàng)建所有操作后,單擊左下角的Save and generate保存操作并生成一堆幫助腳本和可編寫腳本的對象,以便于訪問。

片刻之后,輸入系統(tǒng)完成,并將新的SteamVR_Input文件夾添加到Assets文件夾:

該文件夾包含生成器創(chuàng)建的文件。 更具體地說,腳本和可編寫腳本的對象。

2. Binding Actions

現(xiàn)在您已定義了操作,您可以為它們創(chuàng)建默認的硬件綁定。

確保SteamVR正在運行并且您的Vive控制器已打開。 接下來,單擊右下角的Open binding UI。 將在您的默認瀏覽器中打開本地托管的網(wǎng)頁:

首先,如果您連接了游戲手柄或其他兼容硬件,則需要先切換到Vive Controller綁定。 例如,單擊Gamepad,然后選擇Vive Controller切換到控制器設(shè)置。

接下來,在Current Binding標題下,單擊Edit以進入綁定菜單。

綁定編輯器現(xiàn)在顯示在屏幕上。 快速瀏覽一下。 您可以在此處將操作可視地綁定到硬件。

由于鏡像,您只需要設(shè)置左控制器,這些設(shè)置將復(fù)制到另一側(cè)。 您可以通過取消選中屏幕底部的Mirror Mode復(fù)選框來更改此設(shè)置。 盡管如此,為了本教程而保留鏡像。

如果您查看屏幕左側(cè)并向下滾動,您會注意到已經(jīng)有一些輸入鏈接到操作:

要從一個干凈的平板開始,將鼠標懸停在每個已定義的輸入上,然后單擊垃圾桶圖標將其刪除。 出現(xiàn)確認提示時,選擇Delete

下面是結(jié)果

現(xiàn)在,通過單擊其名稱旁邊的大加號按鈕并在彈出的窗口中選擇BUTTON,為Grip定義一個新的Button綁定。

這使您可以像按鈕一樣使用grip(就是這樣)。 現(xiàn)在,單擊Click事件旁邊的None以將操作鏈接到它。 彈出一個窗口,其中包含可能的操作列表。 選擇grab以鏈接它。

在定義新輸入時就是這樣! 現(xiàn)在,每次在游戲運行時按下grip按鈕,都會觸發(fā)grab動作。

單擊輸入條目左下角的Apply以將其保存到操作集。

現(xiàn)在對TriggerTrackpad執(zhí)行相同的操作:為每個觸發(fā)器創(chuàng)建一個新的Button輸入,將TriggerClick事件鏈接到Trackport并將TrackpadClick事件鏈接到Teleport。 完成后一定要保存這些。

結(jié)果如下:

而已! 綁定已設(shè)置。 單擊Replace Default Binding以將這些設(shè)置應(yīng)用于默認配置文件。

在下一個窗口中,單擊左下角的Save以將默認綁定保存到磁盤。

當玩家開始游戲時,會應(yīng)用此綁定。 如果玩家的特定硬件沒有綁定,則會提示他們自己設(shè)置這些綁定。

關(guān)閉Binding UI選項卡或窗口,返回Unity編輯器并關(guān)閉SteamVR Input窗口。 是時候把這個綁定好用了!

3. Using Actions

通過創(chuàng)建并綁定到硬件輸入的操作,您現(xiàn)在可以在游戲中最終使用這些操作!

首先選擇控制器的Pose Actions;這將物理控制器的位置和旋轉(zhuǎn)鏈接到虛擬控制器。

展開Hierarchy中的[CameraRig]并選擇Controller (left)

將其Pose Action更改為 \actions\default\in\SkeletonLeftHand,將其鏈接到左側(cè)控制器。

現(xiàn)在對Controller (right)執(zhí)行相同操作,但將其Pose Action更改為\actions\default\in\SkeletonRightHan

接下來,在RW \ Scripts中創(chuàng)建一個新的C#腳本,將其命名為ActionsTest并在您喜歡的代碼編輯器中打開它。

刪除Start()方法并將以下內(nèi)容添加到文件的頂部:

using Valve.VR;

這引用了訪問VR輸入類所需的命名空間。

接下來,在Update()上面添加以下內(nèi)容:

public SteamVR_Input_Sources handType; // 1
public SteamVR_Action_Boolean teleportAction; // 2
public SteamVR_Action_Boolean grabAction; // 3

使用此代碼,您做了:

  • 1) 輪詢輸入的手的類型。 這些是All, Left or Right
  • 2) 引用Teleport動作。
  • 3) 引用Grab行動。

現(xiàn)在,在Update()下面添加以下方法:

public bool GetTeleportDown() // 1
{
    return teleportAction.GetStateDown(handType);
}

public bool GetGrab() // 2
{
    return grabAction.GetState(handType);
}

以下是這些內(nèi)容:

  • 1) 如果Teleport操作剛剛激活則進行輪詢,如果是這種情況則返回true
  • 2) 如果Grab操作當前已激活,則輪詢。

最后,將以下if語句添加到Update()

if (GetTeleportDown())
{
    print("Teleport " + handType);
}

if (GetGrab())
{
    print("Grab " + handType);
}

這些語句檢查您創(chuàng)建的方法,并在返回true時將消息打印到控制臺。

你準備測試sript了。 保存并返回Unity編輯器。

選擇兩個Controller GameObjects并通過單擊Add Component,鍵入“Act”并選擇top選項,為兩者添加Actions Test組件。

打開Teleport Action下拉列表并將其值更改為\actions\default\in\Teleport。 現(xiàn)在,對Grab Action執(zhí)行相同操作并將其更改為\ actions \ default \ in \ Grab

最后,僅選擇Controller (left)并將其Hand Type更改為Left Hand。 對Controller (right)執(zhí)行相同操作,但這次選擇Right Hand

再次運行游戲,拿起兩個控制器,按下一些按鈕并squeeze the triggers。 現(xiàn)在查看屏幕底部的控制臺行:

請注意,每個操作都在控制臺中注冊。

這是基本輸入配置。 現(xiàn)在,您有能力在指尖操縱虛擬世界!

后記

本篇主要講述了適用于Unity的HTC Vive教程,感興趣的給個贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內(nèi)容