版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第4章可視化編程工具Bolt
4.1Bolt插件的下載和安裝
.目錄.1.Bolt插件簡介
.2.
Bolt插件的主要工作形式
.3.Bolt插件的下載和安裝
1.
Bolt插件簡介
Bolt插件是Unity平臺上的可視化編程插件,風(fēng)格上接近于虛幻引擎的藍(lán)圖系統(tǒng),功能十分強大,可以在不編寫
任何代碼的情況下完成大部分的交互和邏輯功能設(shè)計。2.
Bolt插件的主要工作形式
Bolt插件采用功能模塊化的方式,功能模塊通過輸入、輸出接口,按照一定的邏輯組織、連接起來,完成一定的功能。Bolt有兩種組織方式,一種是FlowGraph(流圖),一種是StateGraph(狀態(tài)圖)FlowGraph適用于通用邏輯的制作,StateGraph適用于角色的智能行為樹、游戲狀態(tài)組織等。多個FlowGraph可以組合成一個StateGraph,而FlowGraph和StateGraph也可以互相嵌套,實現(xiàn)完善、復(fù)雜的功能。因此,F(xiàn)lowGraph是基礎(chǔ)工具,使用它就可以實現(xiàn)大多數(shù)功能。
3.
Bolt插件的下載和安裝
Bolt插件可以在Unity官網(wǎng)的AssetStore中下載安裝:將下載的unitypackage文件拖入Unity工程;拖入結(jié)束后會出現(xiàn)配置窗口,只需全部按照默認(rèn)選項進行配置即可。其中,第二步配置如右圖,是讓用戶按照自己的喜好來選擇元素的命名方法,可以選擇“HumanNaming”或者“ProgrammerNaming”,區(qū)別不大。.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第4章可視化編程工具Bolt
4.2FlowGraph工具的應(yīng)用
.目錄.1使用GetKey模塊進行鍵盤操控的方法
.2使用OnKeyboardInput模塊進行鍵盤控制的方法
本小節(jié)通過介紹兩種方法,實現(xiàn)按鍵盤控制物體移動的功能,來學(xué)習(xí)FlowGraph中模塊的基本用法(1)新建場景,添加一個Cube。這個Cube就是我們的控制目標(biāo)。(2)選中這個Cube物體,添加一個FlowMachine組件。單擊“New”按鈕,新建一個Macro(宏),為其取名并保存在合適的目錄中。
.方法一(3)單擊“EditGraph”按鈕,打開編輯窗口;此時可以看到Start和Update兩個模塊,它們的功能Start()和Update()函數(shù)是一樣的。
.方法一(4)新建模塊的方法有兩種:
一種是在空白處單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“AddUnit”;
另一種是在已有模塊右邊的空心三角形上按住鼠標(biāo)左鍵并拖動鼠標(biāo)來拉出箭頭線條,也會顯示出可選的模塊。方法二
從已有模塊新建功能模塊方法一
新建功能模塊.方法一(5)下面先實現(xiàn)Cube的移動功能。
此功能可以用Transform下面的Translate模塊來實現(xiàn)。在彈出界面的搜索框中輸入“Translate”進行搜索,選擇Translate模塊,如圖所示。.方法一(6)在新添加的Translate模塊中,修改Z軸屬性為0.1,如圖所示,即可實現(xiàn)Cube按每幀移動0.1個單位的速度沿Z軸正方向移動,可以運行場景查看效果。.方法一(7)現(xiàn)在Cube是自動移動的,這一步實現(xiàn)用按鍵控制其移動。
先在模塊之間連線的端點處單擊鼠標(biāo)右鍵,取消原有的連接;再新建一個GetKey模塊,設(shè)置“Key”為“W”,如圖所示。.方法一(8)此時,如果直接連接Translate模塊,并不能達(dá)到只有按下W鍵才能移動的目的,而是Cube自動開始移動。
要實現(xiàn)按下W鍵才能移動,必須再添加一個Branch分支模塊,用Branch模塊來判斷是否按下了W鍵。Branch模塊的作用是用True和False形成分支結(jié)構(gòu),只有按下W鍵后,程序的流程才會執(zhí)行True的分支。方塊只能自動移動,不受控制添加Branch模塊,實現(xiàn)按鍵判斷.方法一(1)刪除以前步驟中添加的所有模塊,包括Update和Start模塊。
添加OnKeyboardInput模塊并修改屬性,如圖所示。該模塊屬于Event事件類別,起到偵聽用戶鍵盤輸入事件的作用。.方法二(2)再添加和前面步驟中一樣的Translate模塊,修改Z軸屬性為0.1,即可實現(xiàn)同樣的功能。使用OnKeyboardInput模塊實現(xiàn)移動功能,如圖所示。.方法二.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第4章可視化編程工具Bolt
4.3Bolt常用模塊介紹
.目錄.1UnityAPI功能模塊.2邏輯功能模塊
Bolt主要依靠各種功能模塊來實現(xiàn)功能。所以,了解常用的功能模塊是使用Bolt的基礎(chǔ)。.3數(shù)據(jù)模塊
.4自定義數(shù)據(jù)變量(1)
Transform是UnityAPI中非常重要的類,可實現(xiàn)關(guān)于物體空間操作的功能。Bolt中Transform類別的功能模塊如圖所示。
1.
UnityAPI功能模塊——Transform類
(2)
Translate模塊常用功能有:
實現(xiàn)物體的移動、旋轉(zhuǎn)、朝向、查找層級結(jié)構(gòu)的上下級關(guān)系等(3)舉例:目標(biāo)跟蹤功能
如圖所示,圖中的邏輯結(jié)構(gòu)使用了朝向模塊LookAt,設(shè)定了一個球體“Sphere”作為目標(biāo),通過每一幀都“LookAt”目標(biāo),實現(xiàn)了物體跟蹤指向目標(biāo)的功能。1.UnityAPI功能模塊——Transform類
(1)
GameObject類承擔(dān)了所有關(guān)于游戲?qū)ο蟮牟僮鳎珺olt中GameObject類的功能模塊如圖所示。1.UnityAPI功能模塊——GameObject類
(2)
舉例:下圖中的邏輯結(jié)構(gòu)使用了GameObject類中的SetName模塊來修改物體名稱為“NewName”。又使用了SetActive模塊來修改物體的顯示狀態(tài),“Value”復(fù)選框沒有勾選,表示將該物體的顯示狀態(tài)調(diào)整為False,該物體被隱藏。所以該邏輯結(jié)構(gòu)整體的功能就是等到用戶按下C鍵后,修改游戲?qū)ο蟮拿Q為“NewName”,并隱藏該物體。1.UnityAPI功能模塊——GameObject類
(1)
Events類是關(guān)于事件處理的功能模塊,如圖所示可以看出,與前兩個類不同,Events類里面又分了很多小類。例如,在前面已經(jīng)使用過的OnKeyboardInput模塊,就是Input小類中的功能模塊。1.UnityAPI功能模塊——Events類
(2)
Events類中的OnTriggerEnter功能模塊如圖所示,圖中的邏輯結(jié)構(gòu)使用了Events類中的OnTriggerEnter功能模塊來處理物體碰撞的觸發(fā)器事件。當(dāng)有碰撞事件發(fā)生的時候,就通過Collider獲取觸發(fā)碰撞的物體,并使用Destroy模塊將該物體刪除。1.UnityAPI功能模塊——Events類
(1)邏輯功能模塊主要有兩種,一種是Control類,包含if條件判斷、for循環(huán)和while循環(huán)等內(nèi)容;另一種是Logic類,包含大于、小于、與、或、非等邏輯判斷。2.
邏輯功能模塊
(2)舉例:使用Less(邏輯小于)和Branch(分支)模塊實現(xiàn)條件判斷和分支處理功能。下圖中的邏輯結(jié)構(gòu)使用了Less、Branch這兩個邏輯功能模塊來進行數(shù)值大小的比較,以及比較結(jié)果的處理。具體的功能是,使用GetPosition和GetZ模塊獲取物體的Z軸坐標(biāo)值,使用Less模塊判斷該值是否小于1。如果該值小于1則為True,就使用SetActive模塊將物體隱藏;如果該值不小于1則為False,就使用SetActive模塊讓物體保持顯示狀態(tài)。2.
邏輯功能模塊
(1)數(shù)據(jù)是所有計算的基礎(chǔ)。Bolt中對于所有的數(shù)據(jù)類型都有對應(yīng)的模塊支持,例如,基礎(chǔ)類型Integer整數(shù)模塊和String字符串模塊、復(fù)合數(shù)據(jù)類型List模塊以及Unity中特殊的數(shù)據(jù)類型Vector3模塊等。這些模塊分散在多個類中,用搜索的方式可以更方便地找到它們。
3.
數(shù)據(jù)模塊
(2)在邏輯流程里,數(shù)據(jù)的使用方式千變?nèi)f化,數(shù)據(jù)模塊的使用方式也靈活多變,需要根據(jù)具體情況選擇合適的方式。例如,同樣是設(shè)定物體的坐標(biāo),有時是直接設(shè)定具體的數(shù)值,有時又需要將其設(shè)置為另外一個物體的坐標(biāo)值。
3.數(shù)據(jù)模塊
(3)舉例:如圖所示,最右邊的SetPosition模塊用來設(shè)定物體的坐標(biāo),數(shù)據(jù)類型是Vector3,所以它的左邊用CreateVector3模塊創(chuàng)建一個Vector3數(shù)據(jù)來和它對接。這個Vector3數(shù)據(jù)中的X和Y都以Float模塊提供的具體數(shù)字2.5為值,而Z則表示通過GetPosition模塊和GetZ模塊來獲取“Sphere”物體的Position中的Z軸坐標(biāo)值。整個過程通過OnKeyboardInput模塊觸發(fā)。3.數(shù)據(jù)模塊
(1)Bolt除了提供各種數(shù)據(jù)模塊,還支持自定義數(shù)據(jù)變量,使用其可以靈活地實現(xiàn)復(fù)雜功能。(2)和編程語言中的一樣,Bolt中的自定義變量也會區(qū)分作用范圍。打開任意一個FlowGraph,將界面最大化,自定義變量的作用范圍如圖所示。4.
自定義數(shù)據(jù)變量(3)從上頁圖可以看到,Bolt定義了5種自定義變量的作用范圍,從左到右范圍逐漸擴大。Graph:變量只在當(dāng)前FlowGraph中使用。Object:變量可以在物體的各個FlowGraph中使用。Scene:變量可以在場景的任意FlowGraph中使用。App:變量可以在工程應(yīng)用里的任意FlowGraph中使用。Saved:變量持久保存在設(shè)備上,退出工程應(yīng)用后,再次打開還可以繼續(xù)使用變量。4.
自定義數(shù)據(jù)變量(4)添加自定義數(shù)據(jù)變量的方法有兩種,一種方法是直接上上頁圖中的“+”按鈕,另一種方法是在物體上添加Variables組件,再單擊組件對應(yīng)的“+”按鈕。接著選擇具體的數(shù)據(jù)類型,并填入初始值即可。自定義數(shù)據(jù)變量如下圖所示,其中包含一個Float類型的speed變量,初始值為0;還包含一個Boolean類型的isWalk變量,因為“Value”復(fù)選框是被勾選了的,所以初始值為True。4.
自定義數(shù)據(jù)變量(5)對于自定義數(shù)據(jù)變量的獲?。℅et)和賦值(Set),可以在選擇模塊的界面中輸入變量的名稱進行搜索,即可看到“Get”和“Set”的模塊選項。變量isWalk的Get模塊和Set模塊如下面2個圖片所示。4.
自定義數(shù)據(jù)變量.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第4章可視化編程工具Bolt
4.4操作實例1:犀牛模型的動畫控制
.目錄.1犀牛模型的動畫片段和動畫控制器解析.2使用Bolt操控犀牛模型的運動
涉及動畫的場景,一般都需要使用動畫控制器。動畫控制器是常見的,只要有動畫的應(yīng)用,基本都會用到它。本節(jié)使用一個帶動畫的犀牛模型來演示使用Bolt控制動畫控制器的方法。(1)
犀牛模型的4個動畫片段如圖所示,分別是attack、die、run和walk1.
犀牛模型的動畫片段和動畫控制器解析
(2)
犀牛模型的動畫控制器如圖所示,默認(rèn)動作是walk,walk動作和attack動作可以互相轉(zhuǎn)換,從任何動作狀態(tài)都可以轉(zhuǎn)換到die動作。1.
犀牛模型的動畫片段和動畫控制器解析
(3)
動作轉(zhuǎn)換依靠“attack”和“die”這兩個Trigger類型的參數(shù)來實現(xiàn),如圖所示。run動作在本例中沒有用到。1.
犀牛模型的動畫片段和動畫控制器解析
現(xiàn)在的犀牛模型是“原地踏步”,下面來實現(xiàn)兩個主要功能。一是實現(xiàn)第三人稱的控制方式,即通過按下鍵盤上的上、下、左、右方向鍵,控制犀牛模型的前進、后退和轉(zhuǎn)向;二是通過按鍵,實現(xiàn)犀牛模型的attack動作和die動作的調(diào)用。2.
使用Bolt操控犀牛模型的運動
(1)
將犀牛模型從Project面板中拖入場景,為其添加Bolt的FlowMachine組件,單擊“New”按鈕,新建一個Macro。(2)先實現(xiàn)犀牛模型的前進、后退和轉(zhuǎn)向;打開FlowMachine組件的編輯窗口,參考4.2節(jié),使用OnKeyboardInput模塊實現(xiàn)鍵盤控制;前進功能和后退功能會使用Translate模塊,前進功能所使用的Translate模塊的Z軸數(shù)值為0.1,后退功能所使用的Translate模塊的Z軸數(shù)值則為-0.1。2.
使用Bolt操控犀牛模型的運動
(3)前進功能和后退功能的模塊組合如左所示。實現(xiàn)轉(zhuǎn)向使用Rotate模塊,根據(jù)左、右轉(zhuǎn)向,分別修改Y軸的歐拉角數(shù)值為1和-1。轉(zhuǎn)向功能的模塊組合如右圖所示。2.
使用Bolt操控犀牛模型的運動
(4)動畫控制器中Trigger類型動作轉(zhuǎn)換,是通過Animator的SetTrigger模塊實現(xiàn)的。添加OnKeyboardInput模塊和SetTrigger模塊,如圖所示,即可實現(xiàn)按下Space鍵,完成walk動作到attack動作的轉(zhuǎn)換。2.
使用Bolt操控犀牛模型的運動
(5)對于die動作,可以模擬真實游戲中游戲角色血量減少到0以后再觸發(fā)。邏輯圖如圖所示。2.
使用Bolt操控犀牛模型的運動
(6)依照流程圖,首先需要添加兩個自定義變量,一個表示犀牛的血量值,命名為LifePoint,假設(shè)初始值為10;一個表示攻擊值,命名為DamagePoint,假設(shè)初始值為3。Bolt中的變量組件如圖所示,這里的兩個變量都為整型,即圖中的Integer類型。2.
使用Bolt操控犀牛模型的運動
(7)流程圖中的“受到攻擊”,可以用OnKeyboardInput模塊模擬;“相減”使用Subtract模塊模擬;“小于等于零”的判斷使用LessOrEqual模塊模擬;判斷結(jié)果的分支結(jié)構(gòu),則使用Branch模塊模擬。
模擬減少血量來調(diào)用die動作的FlowMachine結(jié)構(gòu),如圖所示。2.
使用Bolt操控犀牛模型的運動
.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第4章可視化編程工具Bolt
4.5操作實例2:技能冷卻UI動畫制作
.目錄.1UI構(gòu)建解析.2使用Bolt實現(xiàn)冷卻動畫
技能冷卻UI動畫是游戲中常見的一種效果,如圖所示,當(dāng)某種條件達(dá)成后,就以一定的速度在UI圖標(biāo)上展現(xiàn)一個順時針或者逆時針的圖片陰影旋轉(zhuǎn)消失動畫。本節(jié)通過實現(xiàn)該功能來演示Bolt關(guān)于UI的操作方法。(1)
UI的具體功能決定了它的層次結(jié)構(gòu)。本例中技能冷卻UI的表現(xiàn)形式是:鼠標(biāo)指針劃入圖標(biāo)時,圖標(biāo)四周出現(xiàn)一個提示框;鼠標(biāo)指針劃出圖標(biāo)時,提示框消失;鼠標(biāo)單擊圖標(biāo),出現(xiàn)技能冷卻UI動畫。技能冷卻圖標(biāo)的各種狀態(tài),如圖所示。1.
UI構(gòu)建解析
鼠標(biāo)指針劃出狀態(tài)
鼠標(biāo)指針劃入狀態(tài)
技能冷卻狀態(tài)(2)因為有這樣的狀態(tài)變化,所以這個UI需要3張圖,一張是正常的圖標(biāo),一張是邊框圖,還有一張是覆蓋在圖標(biāo)上的黑色圖。其中邊框圖和黑色圖都是具有Alpha通道的帶透明度的圖片。技能冷卻圖標(biāo)的層級結(jié)構(gòu)如圖所示。在默認(rèn)的正常狀態(tài)下,將“BorderImage”和“BufferImage”2張圖片都先隱藏起來。1.
UI構(gòu)建解析
(1)在正常狀態(tài)的物體上,也就是在上頁圖中的“IconImage”物體上,添加FlowMachine組件,單擊“New”按鈕,新建一個Macro。單擊“EditGraph”按鈕打開FlowMachine的編輯窗口。2.
使用Bolt實現(xiàn)冷卻動畫(2)添加Events類里的OnPointerEnter和OnPointerExit功能模塊,以獲取鼠標(biāo)指針劃入事件和鼠標(biāo)指針劃出事件。與它們對接的都是SetActive模塊,利用“Value”屬性的不同賦值,實現(xiàn)對“BorderImage”物體,也就是邊框圖片的隱藏或顯示。提示框的功能實現(xiàn)如圖所示。2.
使用Bolt實現(xiàn)冷卻動畫(3)要實現(xiàn)UI圖片陰影旋轉(zhuǎn)消失的技能冷卻效果,需要先修改UI的Image組件屬性。單擊層級結(jié)構(gòu)中的“BufferImage”物體,按圖所示,對Image組件進行修改。其中,“ImageType”屬性改為“Filled”,“FillMethod”屬性選擇“Radial360”,這樣圖片就是以圖片中心為原點,采用360°旋轉(zhuǎn)的形式進行填充。配合設(shè)置“FillAmount”屬性的數(shù)值,就能決定填充的范圍。1代表360°,全部填充;0代表0°,全部無填充。下面主要介紹通過Bolt來修改“FillAmount”屬性。2.
使用Bolt實現(xiàn)冷卻動畫(4)根據(jù)前面說明的操作過程,先總結(jié)出技能冷卻操作的流程。實現(xiàn)技能冷卻效果的流程圖如圖所示。2.
使用Bolt實現(xiàn)冷卻動畫(5)仔細(xì)觀察上頁的流程圖,會發(fā)現(xiàn)鼠標(biāo)單擊事件的發(fā)生是瞬間的,而圖片填充屬性“FillAmount”的減少是一個會持續(xù)一段時間的過程,每一幀都將“FillAmount”減去上一幀的時間間隔“Time.DeltaTime”,而一幀的時間間隔是一個很小的數(shù)字。2.
使用Bolt實現(xiàn)冷卻動畫(6)在邏輯上,一個瞬間發(fā)生的事件只能觸發(fā)一個過程的開始,但不能維持一個過程的持續(xù)。要維持一個持續(xù)過程,需要另外定義一個布爾類型的變量來作為中間溝通的橋梁。假設(shè)這個變量名稱為“isStart”,則修改后的流程變?yōu)閮蓚€部分,修改后的實現(xiàn)技能冷卻效果的流程圖,如下頁圖所示。鼠標(biāo)單擊事件只影響布爾類型變量isStart的值,而isStart變量決定了圖片填充屬性“FillAmount”是否開始變化,并維持變化的過程,直到“FillAmount”屬性小于等于0,這個過程才結(jié)束。2.
使用Bolt實現(xiàn)冷卻動畫2.
使用Bolt實現(xiàn)冷卻動畫(7)依照修改后的流程圖,首先需要添加一個自定義變量isStart,如圖所示,“Value”復(fù)選框沒有勾選,說明其初始值設(shè)定為False。這個變量可以是全局的,也可以是局部的。本例將其放在層級結(jié)構(gòu)中的“IconImage”物體上,作為局部變量使用。2.
使用Bolt實現(xiàn)冷卻動畫(8)鼠標(biāo)單擊改變isStart變量,并將“BufferImage”物體顯示出,鼠標(biāo)單擊事件驅(qū)動改變變量和物體顯示狀態(tài)如圖所示。OnPointerDown模塊獲取鼠標(biāo)單擊事件,調(diào)用SetVariable模塊將isStart變量賦值為由Boolean模塊提供的True值,并將isStart賦值給SetActive模塊的“Value”屬性,從而將“BufferImage”物體設(shè)置為顯示狀態(tài)。2.
使用Bolt實現(xiàn)冷卻動畫(9)最后實現(xiàn)“BufferImage”的冷卻動畫。為了方便處理且減少邏輯模塊的使用,這一步驟中不使用前面創(chuàng)建的FlowGraph,而是在“BufferImage”物體上新建一個FlowGraph。完成后的冷卻動畫邏輯結(jié)構(gòu)如下頁圖所示。1號框里采用Update和GetVariable模塊,每一幀都判斷isStart變量是否為True,如果為True,就執(zhí)行3號框里的SetFillAmount模塊來設(shè)定“BufferImage”的“FillAmount”屬性,設(shè)定的值由2號框里的GetFillAmount和GetDeltaTime模塊的值相減得到。至此,整個技能冷卻的UI動畫就制作完成了。2.
使用Bolt實現(xiàn)冷卻動畫2.
使用Bolt實現(xiàn)冷卻動畫.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第5章VR開發(fā)
5.1VR開發(fā)的通用性問題
.目錄.1.VRTK開發(fā)工具
.2.
Unity中Android環(huán)境的配置
由于還處在成長階段,VR技術(shù)發(fā)展、變化非??臁2粌H硬件種類多樣,而且各種廠家和品牌的產(chǎn)品之間也有較大差異。對學(xué)習(xí)、開發(fā)和應(yīng)用造成了一定的影響。這種情況會隨著技術(shù)的進步和標(biāo)準(zhǔn)的逐步統(tǒng)一而得到解決。本節(jié)介紹一款能夠跨平臺開發(fā)的工具——VRTK,以及開發(fā)中經(jīng)常用到的Android環(huán)境配置方法。1.
VRTK開發(fā)工具
VRTK(VirtualRealityToolkit)是一款免費的開源工具包。它提供了在Unity中進行跨平臺VR開發(fā)的技術(shù),支持目前主流的VR設(shè)備。它的目標(biāo)就是提供高效、易用的內(nèi)容創(chuàng)建方式。VRTK封裝得很好,操作簡單,非常容易上手,用戶只需在場景中進行拖放即可構(gòu)建自己的虛擬世界。它甚至還提供了模擬器(Simulator),可以在計算機上模擬各種VR操作。極大地方便了開發(fā)人員,是使用Unity進行VR項目制作的利器。
可以使用下面的鏈接下載VRTK3.3版的工程文件,使用Unity直接打開工程即可使用。2.
Unity中Android環(huán)境的配置
移動平臺是VR應(yīng)用的“主戰(zhàn)場”,除了少數(shù)類似HTCVIVE需要連接計算機的設(shè)備以外,其他的VR設(shè)備都是基于iOS或者Android這樣的移動平臺。由于iOS自身的封閉性,需要借助專門的設(shè)備,不利于學(xué)習(xí),所以本章將以通用性更強的Android平臺作為VR開發(fā)制作的載體進行介紹。
在Unity中開發(fā)Android應(yīng)用必須先配置好Android開發(fā)環(huán)境。(1)在Unity2018以前的版本中需要自行手動配置。(2)對于Unity2018之后的版本,可以在UnityHub中安裝Unity時選擇自動配置Android環(huán)境,具體請看書本2.1.1小節(jié)的內(nèi)容。但是,因為軟件的穩(wěn)定性和開發(fā)習(xí)慣,目前還有非常多的個人和機構(gòu)在使用老版本的Unity進行開發(fā)工作??紤]到這種情況,下面還是介紹以下傳統(tǒng)的手動配置Android環(huán)境的方法。2.Unity中Android環(huán)境的配置——安裝配置Java環(huán)境(1)需要配置好Java開發(fā)環(huán)境。在Oracle的官網(wǎng)下載Java開發(fā)工具包JDK并安裝,安裝過程保持默認(rèn)的設(shè)置即可。JDK的安裝如圖所示。2.Unity中Android環(huán)境的配置——安裝配置Java環(huán)境(2)JDK安裝完成后,需要配置Windows操作系統(tǒng)的環(huán)境變量。在桌面上“我的電腦”圖標(biāo)上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“屬性”命令,打開界面。單擊“高級系統(tǒng)設(shè)置”,在打開的對話框中,單擊“環(huán)境變量”按鈕,進入“環(huán)境變量”對話框,新建和編輯系統(tǒng)變量。配置環(huán)境變量的流程如圖所示。2.Unity中Android環(huán)境的配置——安裝配置Java環(huán)境
(3)單擊上頁圖中的“新建”按鈕,新建系統(tǒng)變量。新建JAVA_HOME系統(tǒng)變量和設(shè)置變量值,如下圖所示。其中,變量值需要根據(jù)第1步中安裝的路徑填寫。2.Unity中Android環(huán)境的配置——安裝配置Java環(huán)境(4)再次單擊上上頁步驟(2)圖中的“新建”按鈕,新建系統(tǒng)變量。新建CLASSPATH系統(tǒng)變量和設(shè)置變量值,如下圖所示。其中,變量值需要根據(jù)第1步中安裝的路徑填寫。.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\tools.jar需要注意的是,在變量值的最前面有一個“.”2.Unity中Android環(huán)境的配置——安裝配置Java環(huán)境(5)在步驟(2)的圖中的3號框所示區(qū)域找到Path變量,單擊“編輯”按鈕,進入“編輯環(huán)境變量”對話框,單擊“新建”按鈕,新建兩個變量,如下圖所示。具體路徑,需要根據(jù)實際安裝的路徑來填寫。(6)到這里Java的環(huán)境就配置完成了。運行cmd命令,打開命令行窗口,運行“java-version”命令,如果出現(xiàn)下圖所示的信息,則說明JDK安裝、配置成功。2.Unity中Android環(huán)境的配置——AndroidSDK的安裝配置好Java開發(fā)環(huán)境后,可以進行AndroidSDK的安裝,有幾種方法都可以實現(xiàn),如可以直接下載AndroidSDK的安裝包,或者通過安裝AndroidStudio來間接地安裝AndroidSDK。如果對開發(fā)應(yīng)用程序的需求比較多,建議安裝AndroidStudio。因為這個軟件不僅可以管理AndroidSDK,而且在用Unity進行Android項目開發(fā)時,可以和它進行聯(lián)合調(diào)試。下面介紹通過安裝AndroidStudio來下載和配置AndroidSDK。2.Unity中Android環(huán)境的配置——AndroidSDK的安裝(1)在AndroidStudio的官網(wǎng)免費下載軟件包并安裝。安裝的過程中,除了需要設(shè)定軟件的安裝路徑之外,其他都保持默認(rèn)設(shè)置即可。(2)安裝完成后,啟動AndroidStudio的歡迎界面,如圖所示。2.Unity中Android環(huán)境的配置——AndroidSDK的安裝(3)單擊上頁圖中的“Configure”,在彈出的菜單中選擇“SDKManager”,打開圖所示的AndroidStudio的AndroidSDK管理界面2.Unity中Android環(huán)境的配置——AndroidSDK的安裝(4)單擊上頁圖中的“LaunchStandaloneSDKManager”,進入如左圖所示的“AndroidSDKManager”對話框。在對話框中單擊菜單“Tools”→“Settings”,打開右圖所示的設(shè)置代理服務(wù)器屬性對話框,按圖中的信息進行填寫。然后回到“AndroidSDKManager”對話框,選擇下載的AndroidAPI版本。具體選擇哪個版本并沒有嚴(yán)格規(guī)定,通常不能高于目標(biāo)手機設(shè)備的Android版本。例如,手機設(shè)備是Android7的系統(tǒng),則不能用Android8的SDK來發(fā)布App,但可以用Android6的SDK來發(fā)布。2.Unity中Android環(huán)境的配置——AndroidSDK的安裝(6)至此,計算機的Android開發(fā)環(huán)境就配置完成了.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第5章VR開發(fā)
5.2HTCVIVE平臺
.目錄.1.HTCVIVE平臺簡介
.2.
SteamVRPlugin和VRTK的下載和安裝.3.
HTCVIVE的基本設(shè)置
.4.
HTCVIVE手柄的設(shè)置.5.
移動方式的設(shè)置.6.
可交互物體的設(shè)置.7.
UI的操作
HTCVIVE是HTC和Valve聯(lián)合開發(fā)的產(chǎn)品,是目前市場上消費級VR產(chǎn)品中用戶體驗較好的產(chǎn)品之一。在SteamVR平臺上相關(guān)的應(yīng)用中,使用HTCVIVE的占了一半左右。整套HTCVIVE設(shè)備包含外接式頭顯、手柄、定位器,如圖所示。1.
HTCVIVE平臺簡介
本書所選軟件和插件版本如下:Unity2018.4SteamVRPlugin1.2.2VRTK3.3HTCVIVE手柄各按鍵名稱中英文對照如圖所示。其中,英文名稱將會在VRTK的交互設(shè)置腳本里用到。1.
HTCVIVE平臺簡介2.SteamVRPlugin和VRTK的下載和安裝(1)SteamVRPlugin可以通過Unity的AssetStore直接下載和導(dǎo)入。打開Unity軟件,通過“Window”→“AssetStore”菜單打開AssetStore,在搜索框中輸入插件的名字搜索即可找到。然后單擊“下載”按鈕,下載完成后在同一個界面里單擊“導(dǎo)入”按鈕,即可把插件導(dǎo)入工程,導(dǎo)入SteamVRPlugin插件后Unity工程里的文件結(jié)構(gòu)如圖所示。其中VRTK已經(jīng)在上一小節(jié)的PPT里介紹了下載地址。2.SteamVRPlugin和VRTK的下載和安裝(2)當(dāng)Unity工程里包含SteamVRPlugin的時候,第一次打開SteamVR時的設(shè)置對話框如圖所示,單擊“AcceptAll”按鈕即可完成默認(rèn)設(shè)置。3.HTCVIVE的基本設(shè)置在HTC上使用VRTK非常方便,按下面的步驟操作即可完成基本設(shè)置工作。(1)新建一個場景,刪除其中自帶的攝像機。(2)新建一個Plane三維物體,將其放置到坐標(biāo)原點外,命名為“floor”,作為地板。(3)新建一個空物體,將其放置到坐標(biāo)原點外,命名為“sdkmanager”,在其上添加VRTK_SDKManager組件。(4)新建一個空物體,將其放置到坐標(biāo)原點處,命名為“sdksetup”,在其上添加VRTK_SDKSetup組件;在“SDKSelection”里選擇VR平臺為“SteamVR”。如果沒有HTCVIVE設(shè)備,這里的SDK也可以選擇“Simulator”,這樣VRTK就是使用鍵盤、鼠標(biāo)來模擬VR的各種操作。3.HTCVIVE的基本設(shè)置(5)將SteamVR插件中的CameraRig和SteamVR預(yù)設(shè)體,如圖所示,作為子物體添加到sdksetup物體下。(6)在sdkmanager物體的VRTK_SDKManager組件中單擊“AutoPopulate”按鈕,將前面設(shè)置的SteamVRSDK自動填充進來。(7)為了讓頭顯的高度正常,需要將sdksetup物體的Y坐標(biāo)值修改為0.5。
經(jīng)過這些基本設(shè)置后,單擊運行按鈕,即可進入VR場景,通過頭顯就可以看到虛擬世界。4.HTCVIVE手柄的設(shè)置
在虛擬世界的操作大部分是通過HTCVIVE手柄來完成的。通過下面的步驟可以把手柄顯示出來,并完成手柄的指向操作。(1)新建空物體,命名為“vrtkscripts”,在其下建立兩個空物體作為子物體,分別命名為“l(fā)eftController”和“rightController”,并將它們拖入sdkmanager物體的VRTK_SDKManager組件的左、右控制器選項里,VRTK_SDKManager中左、右控制器的設(shè)置如圖所示。這樣設(shè)置就是告知VRTK哪兩個物體是左、右手柄的控制器。4.HTCVIVE手柄的設(shè)置
(2)在leftController和rightController物體上都添加VRTK_Pointer和VRTK_StraightPointerRenderer組件。其中,VRTK_Pointer組件的作用是讓手柄具備發(fā)出射線的功能;VRTK_StraightPointerRenderer組件的功能是以直線的形式來渲染手柄發(fā)出的射線。然后,分別將leftController和rightController物體的VRTK_StraightPointerRenderer組件作為參數(shù)導(dǎo)入對應(yīng)的VRTK_Pointer組件的“PointerRenderer”中,指定使用直線渲染的形式,設(shè)置手柄的指向渲染器PointerRenderer屬性如圖所示。此時,運行場景,可以看到兩個手柄,但是手柄還不能進行指向操作。因為現(xiàn)在還缺少手柄按鍵事件的指定。4.HTCVIVE手柄的設(shè)置
(3)在leftController和rightController物體上都添加VRTK_ControllerEvents組件,這樣兩個手柄的按鍵就有了相應(yīng)的按鍵事件;此時再運行場景,并按下手柄的Touchpad鍵,就可以看到手柄上有射線射出。按下Touchpad鍵后手柄射出的射線如圖所示。
當(dāng)射線指向帶碰撞器的物體時,顯示綠色;當(dāng)射線沒有碰到任何物體時,顯示紅色。5.
移動方式的設(shè)置受到追蹤器追蹤范圍和實際場地大小的限制,用戶戴著頭顯在虛擬世界中只能在一個比較小的范圍內(nèi)進行移動,但通常虛擬世界可能都有一個比較大的環(huán)境。那么在這個大的虛擬環(huán)境中移動,就是必要的基礎(chǔ)操作了。一般地,有兩種移動形式,一種是瞬間跳轉(zhuǎn),一種是連續(xù)平滑移動。5.
移動方式的設(shè)置——瞬間跳轉(zhuǎn)的設(shè)置
瞬間跳轉(zhuǎn),在VRTK中稱為Teleport。具體設(shè)置方法就是在vrtkscripts物體下添加一個空物體,可以命名為PlayArea,然后為其添加VRTK_BasicTeleport組件,所有屬性保持默認(rèn)設(shè)置即可。VRTK_BasicTeleport組件如圖所示。5.
移動方式的設(shè)置——瞬間跳轉(zhuǎn)的設(shè)置
這時的跳轉(zhuǎn)方式就是按住手柄的Touchpad鍵,發(fā)出射線,在射線和地面碰撞后,松開Touchpad鍵,即可瞬間跳轉(zhuǎn)到碰撞點處。
因為這時使用的射線渲染組件是VRTK_StraightPointerRenderer,所以射線為直線形式。如果使用另一個組件VRTK_BezierPointerRenderer,則射線會變?yōu)樨惾麪柷€的形式。手柄發(fā)出的貝塞爾曲線形式的射線如圖所示。5.
移動方式的設(shè)置——連續(xù)平滑移動的設(shè)置
將VRTK_TouchpadControl組件添加到場景中的CameraRig物體上,并選擇leftController或者rightController物體,將其拉入VRTK_TouchpadControl組件的“Controller”中完成設(shè)置,如圖所示。此時運行場景,按下相應(yīng)手柄的Touchpad鍵即可實現(xiàn)在場景中向前、后、左、右平滑移動。6.
可交互物體的設(shè)置
在虛擬世界中,實現(xiàn)對物體的觸碰、抓取等操作是基本需求之一。這在VRTK中是通過設(shè)置交互物體來實現(xiàn)的,具體方法如下。(1)創(chuàng)建幾個3D物體,待抓取的物體如圖所示。6.
可交互物體的設(shè)置(2)對leftController和rightController物體添加VRTK_InteractTouch和VRTK_InteractGrab組件,使手柄具有觸碰(Touch)和抓?。℅rab)功能。抓取功能的手柄按鍵默認(rèn)設(shè)置如圖所示,抓取功能是使用手柄的Grip鍵實現(xiàn)的,可以根據(jù)需要換成其他的按鍵。6.
可交互物體的設(shè)置(3)選中3D物體,單擊“Window”→“VRTK”→“SetupInteractableObject”,保持默認(rèn)設(shè)置,單擊按鈕“SetupInteractableObject”,即可自動完成所有組件和組件屬性設(shè)置,使該物體具備和手柄交互的能力?!癝etupInteractableObject”對話框如圖所示。此時可以運行場景,用手柄觸碰物體,物體上會出現(xiàn)邊框提示;按住手柄的Grip鍵,可以抓起物體,松開Grip鍵,則放下物體。7.
UI的操作UI操作是“屏幕時代”較常見的交互方式,在虛擬現(xiàn)實中,將UI的操作移植過來,用戶會感覺比較熟悉,學(xué)習(xí)VR操作的難度就會降低,從而有利于VR的推廣和普及。7.
UI的操作——三維空間中的UI
Unity中的UI元素都是放在Canvas物體下的,由Canvas物體提供UI的總體屬性。其中,屬性“RenderMode”決定了UI以何種形式進行渲染。Canvas屬性中UI渲染模式的選擇如圖所示,其默認(rèn)設(shè)置是“ScreenSpace–Overlay”,也就是將UI疊加在屏幕上。如果是這樣,那么在虛擬現(xiàn)實的三維世界里,UI就只能看,而不能被用戶用來進行交互操作。所以這里一般將其設(shè)置為“WorldSpace”,也就是將UI元素當(dāng)作三維虛擬世界里的普通物體來看待。7.
UI的操作——UI位置的調(diào)整
調(diào)整好渲染模式后,還需要將UI放置到合適的位置。這里可以只調(diào)節(jié)具體某一個UI元素,也可以將Canvas整體都進行調(diào)節(jié)。無論是調(diào)節(jié)哪個層次的物體,都是修改其RectTransform組件中坐標(biāo)、寬度和高度、比例大小等,UI的RectTransform組件如圖所示。調(diào)整過后,三維場景中的UI元素如右圖所示。7.
UI的操作——UI和HTCVIVE手柄的交互
手柄發(fā)射的射線是和UI元素交互的基礎(chǔ)。繼續(xù)給左、右手柄控制器添加兩個組件:VRTK_ControllerEvents和VRTK_UIPointer,如圖所示。
其中VRTK_ControllerEvents組件使控制器具備了處理事件交互的功能,VRTK_UIPointer組件則設(shè)置了手柄控制器上具體哪些按鍵可通過何種操作來模擬對UI元素的交互。7.
UI的操作——UI和HTCVIVE手柄的交互
配置手柄控制器按鍵對UI的操作形式如圖所示,組件規(guī)定了激活射線是通過手柄上的Touchpad鍵實現(xiàn)的,激活的形式是“HoldButton”,也就是要按住
Touchpad
鍵不放。射線選取UI元素的形式是按住手柄上的雙階段扳機,單擊UI元素則是通過按下雙階段扳機然后放開的方式來實現(xiàn)。7.
UI的操作——UI和HTCVIVE手柄的交互
最后,再給UI元素的父物體,也就是Canvas物體添加VRTK_UICanvas組件。這樣就實現(xiàn)了通過手柄發(fā)射射線對UI進行操作的功能。剩下的工作,就和普通的UI元素交互的一樣了。
經(jīng)過這樣的設(shè)置之后,UI操作上還有一個小問題,就是射線會穿過UI元素,可能會對其后面的物體產(chǎn)生影響。為了消除這種可能性,可以在UI元素后方放置一個碰撞器,來阻擋射線繼續(xù)往后延伸。.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第5章VR開發(fā)
5.3Nibiru平臺
.目錄.1.在Unity中配置Android系統(tǒng)
.2.
NibiruVR在Unity中的基本使用方法.3.
NibiruVR中交互功能的實現(xiàn)
Nibiru是國產(chǎn)的VR操作系統(tǒng)平臺,它在Android的基礎(chǔ)上針對VR一體機進行了大量優(yōu)化和改進,是國內(nèi)使用最多的VR一體機開發(fā)平臺之一。
Nibiru有完整的產(chǎn)品生態(tài)鏈。除了VR系統(tǒng)和VR一體機硬件產(chǎn)品外,它還有AR系統(tǒng)和AR眼鏡硬件產(chǎn)品、NibiruCreator內(nèi)容創(chuàng)作工具、VR/AR場景播控系統(tǒng)、RemoteRendering仿真系統(tǒng)等,是國內(nèi)比較先進的產(chǎn)品平臺。
Nibiru還提供了比較完善的開發(fā)環(huán)境,其官方網(wǎng)站維持了一個活躍的開發(fā)社群,能給開發(fā)者提供相關(guān)幫助。
(1)打開Unity軟件,單擊菜單“Edit”→“Preferences”,選擇“ExternalTools”選項卡,設(shè)置AndroidSDK和JDK的安裝路徑,如圖所示。1.
在Unity中配置Android系統(tǒng)
(2)單擊菜單“File”→“BuildSettings”,在“BuildSettings”對話框中單擊“SwitchPlatform”,選擇“Android”。在Unity的“BuildSettings”對話框中設(shè)置Android系統(tǒng)為發(fā)布目標(biāo)系統(tǒng),如圖所示。1.
在Unity中配置Android系統(tǒng)
(3)單擊上頁圖中的“PlayerSettings”按鈕,選擇“OtherSettings”選項,按照下圖設(shè)置Unity中發(fā)布AndroidApp的相關(guān)屬性。其中,“BundleIdentifier”屬性是按照“com.公司名稱.App名稱”的格式來填寫的,圖中公司名稱為“gdqy”,App名稱為Temp。“MinimumAPILevel”屬性規(guī)定了發(fā)布的App所能支持的最小Android版本。支持的最小版本越低,所能支持的設(shè)備種類就越多,但也有很多高級功能可能會不支持。支持的最高版本屬性一般不用修改,使用默認(rèn)設(shè)置即可。1.
在Unity中配置Android系統(tǒng)
1.
在Unity中配置Android系統(tǒng)
(1)需要從官網(wǎng)下載NibiruVR_SDK_Unity開發(fā)包,本書使用的是2.0.5版本。將下載的開發(fā)包NibiruVRSDK_V2.0.5.unitypackage導(dǎo)入Unity工程后,需要針對Unity的Android配置做一些設(shè)置,這樣才可正確發(fā)布Android應(yīng)用。如果只是在計算機上做實驗,則可以跳過這一步驟。具體的設(shè)置方法,是通過Unity的菜單“Edit”→“ProjectSettings”→“Graphics”,打開工程圖像設(shè)置界面,將NVR/Resources目錄下的SolidColor和UnlitTexture這兩個著色器文件,拖入“AlwaysIncludedShaders”如下頁圖所示。2.
NibiruVR在Unity中的基本使用方法
2.
NibiruVR在Unity中的基本使用方法
(2)先新建一個場景,刪除其中自帶的MainCamera,把NVR/Prefabs目錄下的MainCamera和NvrViewerMain這兩個預(yù)設(shè)體拖入場景,即完成了初始設(shè)置。此時運行場景,即可看到如左圖所示的NibiruVR初始運行效果——左右眼雙屏畫面;按住Alt鍵的同時,移動鼠標(biāo),可以模擬戴著VR頭顯轉(zhuǎn)動頭部的效果?,F(xiàn)在因為沒有參照物,移動時看不出效果??梢约尤隢VR/Prefabs目錄下的NvrSphere預(yù)設(shè)體,再次運行場景,可看到室內(nèi)環(huán)境;此時再運行場景,即可通過鍵盤和鼠標(biāo)模擬頭顯轉(zhuǎn)動來觀察這個房間了,加了房間參照物后的運行效果如右圖所示。2.
NibiruVR在Unity中的基本使用方法
(3)在NvrViewerMain預(yù)設(shè)體中,有一個NvrViewer組件可用來實現(xiàn)一些VR形式的設(shè)定,如圖所示。例如,“VRModeEnabled”控制是否以VR模式運行場景,如果不勾選該復(fù)選框,則不會出現(xiàn)上頁圖中那樣的雙目效果,而是出現(xiàn)一個普通的畫面,通過鍵盤和鼠標(biāo)模擬頭顯轉(zhuǎn)動的功能不變,這樣可以擴大畫面,有利于在計算機上觀察效果;“LockHeadTracker”控制是否鎖定頭顯;“DistortionEnabled”控制是否顯示鏡頭畸變效果。2.
NibiruVR在Unity中的基本使用方法
下面介紹兩種Nibiru頭顯中較常見的功能:視線注視交互VR頭顯按鍵交互3.
NibiruVR中交互功能的實現(xiàn)
(1)新建一個場景,刪除原有的MainCamera,把NVR/Prefabs目錄下的MainCamera和NvrViewerMain這兩個預(yù)設(shè)體拖入場景,完成初始設(shè)置。再添加一個Cube物體,作為用視線注視改變顏色的目標(biāo)物體。(2)新建一個空物體,改名為“EventSystem”,在其上添加GazeInputModule組件。添加GazeInputModule組件后,會自動添加一個EventSystem組件,交互功能相關(guān)組件如圖所示。這兩個組件定義了視線注視的各種操作。3.
NibiruVR中交互功能的實現(xiàn)——視線注視交互功能
(3)新建一個C#腳本changeColor.cs,將其作為組件賦予Cube物體。腳本內(nèi)容如下可以看到這個腳本的功能比較簡單,只有一個public類型的函數(shù)SetGazedAt(),其會根據(jù)bool類型的參數(shù)gazedAt來決定物體的材質(zhì)顏色為紅色還是白色。3.
NibiruVR中交互功能的實現(xiàn)——視線注視交互功能
(4)給Cube物體再添加一個EventTrigger組件,這個組件用來處理事件觸發(fā)的工作。單擊組件中的“AddNewEventType”按鈕,添加PointerEnter和PointerExit兩個事件,它們就是視線進入和移出Cube物體的事件。單擊事件窗口中的“+”按鈕,將Cube拖入框,兩個事件處理函數(shù)都選擇changeColor.cs腳本中的SetGazedAt()函數(shù),Cube的EventTrigger組件如下頁圖所示。這樣設(shè)置之后,就代表視線進入和移出Cube物體事件發(fā)生后的處理函數(shù)都是SetGazedAt()函數(shù)。
因為SetGazedAt()函數(shù)有一個bool類型的參數(shù),所以在圖5-39中可以看到PointerEnter事件的處理函數(shù)中該參數(shù)被勾選,代表其值為true;而PointerExit事件的處理函數(shù)中該參數(shù)沒有被勾選,代表其值為false。再結(jié)合代碼,可以看到,當(dāng)視線進入Cube物體后,PointerEnter事件發(fā)生,處理函數(shù)SetGazedAt()會根據(jù)為true的gazedAt參數(shù),把Cube的顏色改為紅色;視線移出Cube物體后,PointerExit事件發(fā)生,處理函數(shù)SetGazedAt()會根據(jù)為false的gazedAt參數(shù),把Cube的顏色改為白色。3.
NibiruVR中交互功能的實現(xiàn)——視線注視交互功能
(5)運行場景,通過按住Alt鍵并移動鼠標(biāo),模仿戴著頭顯轉(zhuǎn)動頭部的操作,來觀察視線注視交互功能。3.
NibiruVR中交互功能的實現(xiàn)——視線注視交互功能
VR頭顯上一般都有按鍵或者是觸摸板,提供了一定的交互功能。VR頭顯上的按鍵如圖所示,有音量大小調(diào)節(jié)鍵,OK鍵,上、下、左、右方向鍵等。有些廠家提供的VR一體機的手柄的功能其實和這些頭顯上的按鍵或觸摸板的功能是一樣的。3.
NibiruVR中交互功能的實現(xiàn)——VR頭顯按鍵交互功能
在Nibiru的SDK中,VR頭顯按鍵交互的實現(xiàn)和視線注視交互的實現(xiàn)方法是類似的。例如,針對前面的例子,實現(xiàn)在視線注入Cube物體的情況下,按下OK鍵,使Cube物體變大一倍的功能,方法如下。(1)打開腳本changeColor.cs,在其中添加函數(shù)SetGazedTrigger(),函數(shù)內(nèi)容如下:3.
NibiruVR中交互功能的實現(xiàn)——VR頭顯按鍵交互功能
(2)找到Cube物體,在其EventTrigger組件中,單擊“AddNewEventType”按鈕,添加PointerClick事件;單擊事件窗口中的“+”按鈕,將Cube拖入框,事件處理函數(shù)選擇changeColor.cs腳本中的SetGazedTrigger()函數(shù),新添加的PointerClick事件處理函數(shù)如圖所示。這樣設(shè)置之后,就代表在視線注入的情況下,按下OK鍵后的處理函數(shù)是SetGazedTrigger()。3.
NibiruVR中交互功能的實現(xiàn)——VR頭顯按鍵交互功能至此制作完畢,運行場景觀看效果。當(dāng)視線注入Cube的時候,單擊鼠標(biāo)左鍵,來模仿按下VR頭顯上的OK鍵,從而觀察Cube變大的效果。.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第5章VR開發(fā)
5.4OculusQuest平臺.目錄.1.Unity中OculusQuest開發(fā)包的安裝配置
.2.
OculusLink的使用.3.
虛擬場景中的基本移動.4.
加入控制手柄或手部模型.5.
加入碰撞檢測.6.
抓取物體.7.
隔空取物功能
OculusQuest是Meta(原臉書)公司旗下在虛擬現(xiàn)實方面的產(chǎn)品,在2019年5月正式發(fā)售。OculusQuest屬于一體式VR頭顯設(shè)備,OculusQuest頭顯和手柄如圖所示。其內(nèi)核是Android系統(tǒng),價格并不昂貴,有人認(rèn)為它是能夠為普通大眾打開虛擬世界大門的一款產(chǎn)品。它與其他VR頭顯產(chǎn)品主要的不同在于,它通過頭顯上分布在4個角的攝像頭和內(nèi)置算法,實現(xiàn)了六自由度的空間定位追蹤系統(tǒng),無須任何外設(shè)與線纜,擺脫了對高昂價格的計算機設(shè)備的依賴,玩家可以在虛擬世界里更加自由地行動。并且,設(shè)備整體價格大幅下降,更加有利于被普通大眾接受。
(1)配置好計算機和Unity的Android開發(fā)環(huán)境。
注意,Unity發(fā)布設(shè)置“PlayerSettings”里面的“MinimumAPILevel”必須設(shè)為“APILevel19”或者更高級別,因為OculusQuest不支持低于APILevel19的Android系統(tǒng)。1.
Unity中OculusQuest開發(fā)包的安裝配置
(2)在Unity的AssetStore中搜索并下載免費的OculusIntegration,然后將其導(dǎo)入Unity。該資源是Oculus官方提供的開發(fā)SDK。OculusIntegration下載界面如圖所示。1.
Unity中OculusQuest開發(fā)包的安裝配置
(3)在Unity中,單擊菜單“Edit”→“ProjectSettings”打開工程設(shè)置窗口,Unity中配置Oculus平臺VR開發(fā)如圖所示。在“Player”選項卡中,找到“XRSettings”,勾選“VirtualRealitySupported”復(fù)選框,然后單擊“+”按鈕,在彈出的列表中選擇“Oculus”。這樣設(shè)置之后,結(jié)合前面步驟中導(dǎo)入的OculusIntegration工具包,Unity就具備了開發(fā)Oculus平臺應(yīng)用的能力。1.
Unity中OculusQuest開發(fā)包的安裝配置
(4)從上頁圖中可以看到,有一個警告標(biāo)志,說明這時在配置上還有一些問題。這是由于Unity的一些默認(rèn)屬性設(shè)置和當(dāng)前的Oculus有一些沖突的地方。解決方法很簡單,還是在這個界面中,打開“OtherSettings”,刪除“Vulkan”選項以適應(yīng)Oculus的配置,如圖所示。1.
Unity中OculusQuest開發(fā)包的安裝配置
(5)經(jīng)過以上操作,在Unity中就準(zhǔn)備好了Oculus的開發(fā)配置。下面還需要從Oculus的官網(wǎng)生成并獲取開發(fā)App的許可證ID。
打開Oculus的官網(wǎng),注冊開發(fā)者賬號并登錄,單擊網(wǎng)頁中的“CreateNewApp”按鈕,創(chuàng)建OculusApp賬號,如上圖所示。在打開的界面中輸入要創(chuàng)建的App的名稱,Platform平臺選擇“Quest(Applab)”,然后單擊“創(chuàng)建”按鈕,如下圖所示。1.
Unity中OculusQuest開發(fā)包的安裝配置
(6)在單擊“創(chuàng)建”按鈕之后,可以在界面左側(cè)菜單欄的“API”中找到新申請到的AppID,如圖所示。1.
Unity中OculusQuest開發(fā)包的安裝配置
(7)回到Unity中,單擊菜單“Oculus”→“Platform”→“EditSettings”打開平臺設(shè)置界面,將申請到的AppID復(fù)制到其中,并取消勾選“UseStandalonePlatform”復(fù)選框,設(shè)置Unity中的OculusAppID如圖所示。1.
Unity中OculusQuest開發(fā)包的安裝配置
(8)繼續(xù)單擊菜單“Oculus”→“Tools”→“OculusPlatformTools”打開平臺工具設(shè)置界面,在其中選擇“OculusQuest”,并復(fù)制、粘貼AppID,在平臺工具設(shè)置界面中設(shè)置相關(guān)屬性如圖所示。至此,Unity中的OculusQuest開發(fā)配置就完成了。下面還需要將OculusQuest頭顯的開發(fā)者模式打開,這樣才能從Unity中將開發(fā)好的應(yīng)用導(dǎo)入OculusQuest設(shè)備。1.
Unity中OculusQuest開發(fā)包的安裝配置
(9)啟用OculusQuest頭顯,并找一臺手機,打開手機的藍(lán)牙和定位功能。然后在手機上安裝并運行Oculus官方App,在手機上打開OculusQuest頭顯的開發(fā)者模式,如圖所示。單擊“Settings”按鈕進入設(shè)置界面,手機會自動查找附近的頭顯并連接,圖中2號框所示的就是連接正常后顯示出來的頭顯名稱和信息。再單擊3號框處的“MoreSettings”按鈕,進入下一級設(shè)置界面。單擊4號框處的“DeveloperMode”按鈕,進入再下一級界面。設(shè)置打開5號框處的“開關(guān)”。這樣,OculusQuest頭顯的開發(fā)者模式就被打開了。1.
Unity中OculusQuest開發(fā)包的安裝配置
(10)將打開了開發(fā)者模式的OculusQuest頭顯用數(shù)據(jù)線與計算機相連,然后單擊Unity的菜單“File”→“BuildSettings”打開設(shè)置窗口,在“RunDevice”中可以看到與計算機相連的頭顯名稱。單擊“BuildAndRun”按鈕,就能將Unity中編輯好的場景發(fā)布到OculusQuest頭顯中運行并觀察效果了。直接從Unity中發(fā)布應(yīng)用App到OculusQuest頭顯中,如圖所示。1.
Unity中OculusQuest開發(fā)包的安裝配置
直接使用前面的方法開發(fā)Quest應(yīng)用時,會感覺很不方便,因為在Unity中直接運行應(yīng)用是看不到任何效果的。每次都只有通過單擊Unity中的“BuildAndRun”按鈕對整個工程進行發(fā)布并輸出、安裝到OculusQuest頭顯中才可以看到效果,相當(dāng)費時費力。為了解決這種問題,同時也為了能方便用戶同步計算機和OculusQuest頭顯數(shù)據(jù),Oculus給出了一套解決方案——OculusLink。2.
OculusLink的使用
OculusLink需要軟件和硬件的配合才能使用。在軟件上,OculusQuest頭顯必須升級到最新的操作系統(tǒng)版本,同時和OculusQuest相連的計算機上也要安裝最新版本的計算機版OculusApp軟件,以保證計算機和OculusQuest頭顯在軟件上的匹配。圖所示的是計算機版OculusApp軟件界面。2.
OculusLink的使用
在硬件上,首先需要一根有一端是Type-C端口的USB3.0數(shù)據(jù)線,以連接計算機和OculusQuest頭顯。而且,這根數(shù)據(jù)線要質(zhì)量比較好,以保證能實現(xiàn)大量數(shù)據(jù)的傳輸,若為一般質(zhì)量的數(shù)據(jù)線則可能會無法使用OculusLink功能。另外,對計算機的硬件要求也比較高,需要顯卡是NVIDIAGTX970或者NVIDIAGTX1060以上的配置。
當(dāng)軟硬件方面都滿足條件后,OculusLink會將Unity的編輯窗口和頭顯進行數(shù)據(jù)同步,在Unity中可以直接觀察效果,而不需要每次都發(fā)布程序到頭顯中。這樣就很大程度地提高了開發(fā)效率。2.
OculusLink的使用
(1)新建一個場景,在其中添加一個Plane作為地板,再添加一些三維物體作為參照物,簡單的三維場景如圖所示。3.
虛擬場景中的基本移動
(2)刪除場景中默認(rèn)的攝像機。在Project面板中的“Assets”→“Oculus”→“VR”→“Prefabs”中,找到OVRCameraRig預(yù)設(shè)體,將其拖入場景并擺放在合適的位置。OVRCameraRig預(yù)設(shè)體就是Oculus針對虛擬空間制作好的一個虛擬雙目攝像機,它所攜帶的OVRManager組件作為關(guān)鍵組件,決定了OVRCameraRig使用的設(shè)備種類、輸入形式、渲染屬性、追蹤屬性和混合現(xiàn)實屬性等內(nèi)容。OVRCameraRig預(yù)設(shè)體的OVRManager組件如圖所示。3.
虛擬場景中的基本移動
(3)保持預(yù)設(shè)體的默認(rèn)屬性設(shè)置,這樣就已經(jīng)實現(xiàn)了基本的Oculus的虛擬場景,可以直接發(fā)布應(yīng)用,并在頭顯中觀看效果。這時可以實現(xiàn)轉(zhuǎn)頭觀察整個場景,并且因為Oculus的追蹤功能,用戶可以在安全范圍內(nèi)走動,但是不能使用手柄功能,也沒有任何其他可以交互的東西。下面再介紹使用另外的預(yù)設(shè)體來實現(xiàn)這些功能。3.
虛擬場景中的基本移動
(1)將上一小節(jié)中的OVRCameraRig預(yù)設(shè)體刪除,換成同一目錄下的OVRPlayerController預(yù)設(shè)體。該預(yù)設(shè)體包含OVRCameraRig(作為子物體),并因為額外添加的CharacterController和OVRPlayerController組件,獲得了移動的能力。OVRPlayerController預(yù)設(shè)體的組件如圖所示。運行場景,這時用戶除了能自己走動以外,還能用左手柄的搖桿控制前后左右自由移動,這樣就擴大了用戶在虛擬世界的移動范圍。4.
加入控制手柄或手部模型
(2)和HTCVIVE一樣,Oculus也支持在虛擬場景中顯示用戶手上拿的手柄,以增加真實性。在
Project
面板中的“Assets”→“Oculus”→“VR”→“Meshes”→“OculusTouchForQuestAndRiftS”中,可以看到左、右兩個手柄的模型。將這兩個模型分別拖入
Hierarchy
面板中的OVRPlayerController預(yù)設(shè)體的LeftHandAnchor、RightHandAnchor物體下作為子物體,添加手柄模型如圖所示。4.
加入控制手柄或手部模型
運行場景,就可以看到左、右兩個控制器顯示在虛擬空間里,并且它們能跟隨著用戶拿著的真實手柄的運動而運動。OculusQuest手柄在虛擬場景中的樣子如圖所示。4.
加入控制手柄或手部模型
(3)Oculus不僅能顯示手柄,還能顯示手部模型。先刪除第2步中添加到場景中的手柄模型,然后在Project面板中的“Assets”→“Oculus”→“Avatar”→“Content”→“Prefabs”下,找到LocalAvatar預(yù)設(shè)體,將其拖入場景作為OVRPlayerController預(yù)設(shè)體下TrackingSpace物體的子物體,添加LocalAvatar預(yù)設(shè)體如左圖所示。
運行場景,就可以看到左右手模型,并且它們能跟隨著用戶手部運動而運動。顯示手的模型,如右圖所示。4.
加入控制手柄或手部模型
(1)找到場景中OVRPlayerController預(yù)設(shè)體的CharacterController組件,減小組件中“Radius”屬性的值。這是因為“Radius”屬性表示的是虛擬世界中代表用戶的虛擬人身軀的半徑,原來的默認(rèn)值是0.5,這個值太大了,經(jīng)常會使用戶感覺因為“身體太胖”而離其他物體還有一段距離就被擋住,需要將該值調(diào)得小一點,增加真實感。(2)在Project面板中找到CharacterCameraConstraint腳本,將其賦給場景中的OVRPlayerController預(yù)設(shè)體作為組件。將OVRPlayerController預(yù)設(shè)體的子物體OVRCameraRig拖入組件的“CameraRig”框中,并勾選“EnableCollision”復(fù)選框,最后將“CollideLayers”改為“Everything”,添加攝像機碰撞組件如圖所示。5.
加入碰撞檢測經(jīng)過這樣的設(shè)置之后,用戶在虛擬世界中運動時就會被障礙物擋住,不會“一穿而過”了。
(1)選取需要設(shè)置被抓功能的物體,為其添加RigidBody組件以及OVRGrabbable腳本組件,保持它們的默認(rèn)屬性即可。(2)
在Hierarchy面板中,找到OVRPlayerController下的LeftHandAnchor和RightHandAnchor物體,為它們添加SphereCollider組件,并將組件中的“Radius”屬性調(diào)整為0.05,勾選“IsTrigger”。(3)為LeftHandAnchor和RightHandAnchor物體添加OVRGrabber腳本組件,并勾選“ParentHeldObject”,以防止抓取物體并移動時產(chǎn)生物體跳躍抖動的錯誤。6.
抓取物體
(4)繼續(xù)修改RightHandAnchor物體的OVRGrabber組件。將RightHandAnchor的子物體RightControllerAnchor拖入“GripTransform”框中,再將“GrabVolumes”下的“Size”設(shè)為1,將RightHandAnchor物體本身拖入“Element0”框中,并將“Controller”設(shè)置為“RTouch”,OVRGrabber組件的屬性設(shè)置如圖所示。(5)對LeftHandAnchor物體按同樣的方式處理。然后運行場景,以實現(xiàn)抓取功能。6.
抓取物體
(1)將上個小節(jié)中修改后的OVRPlayerController物體刪除,從Project面板中將該預(yù)設(shè)體重新拖入場景,恢復(fù)到初始狀態(tài)。(2)在新添加進來的OVRPlayerController物體下創(chuàng)建一個空物體,并為這個空物體添加GrabManager和SphereCollider兩個組件。其中GrabManager組件由Oculus提供,有抓取操作的管理功能,其參數(shù)保持默認(rèn)設(shè)置即可。SphereCollider組件在這里則起到設(shè)置隔空取物的有效范圍的作用,所以需要勾選其“IsTrigger”,并將“Radius”屬性調(diào)整到合適的數(shù)值。7.
隔空取物功能
(3)新建一些可以被抓取的物體,為它們添加適當(dāng)?shù)呐鲎财?,并添加Rigidbody組件和DistanceGrabbable(遠(yuǎn)距離抓?。┙M件。它們的屬性都保持默認(rèn)設(shè)置即可。另外,為了區(qū)別于普通物體,為這些可以被抓取的物體設(shè)置“Layer”(層)屬性,設(shè)置可抓取物體的“Layer”屬性如圖所示。7.
隔空取物功能
(4)在Project面板中找到DistanceGrabHandRight和DistanceGrabHandLeft兩個預(yù)設(shè)體,將它們拖入場景,作為具有遠(yuǎn)距離抓取物體功能的虛擬手。先對代表左手的DistanceGrabHandLeft預(yù)設(shè)體做調(diào)整,找到其Hand組件的“Animator”屬性,以及DistanceGrabber組件的“GripTransform”“ParentTransform”“Player”屬性,遠(yuǎn)距離抓取的屬性設(shè)置如圖所示,并將“GrabObjectsInLayer”的值設(shè)置為被抓取物體的“Layer”屬性的序號。對于DistanceGrabHandRight預(yù)設(shè)體也做同樣的處理。然后運行場景,將手柄對準(zhǔn)可抓取物體,按住手柄的Trigger鍵,就可以遠(yuǎn)距離隔空抓取了。7.
隔空取物功能.謝謝觀看
廣東輕工職業(yè)技術(shù)學(xué)院
數(shù)字媒體技術(shù)專業(yè)第5章VR開發(fā)
5.5操作實例1:機械裝配虛擬仿真實驗
機械裝配是機械設(shè)計相關(guān)專業(yè)的必修內(nèi)容。長期以來受到場地和設(shè)備的限制,教學(xué)中存在原理講解枯燥、內(nèi)容不容易理解、設(shè)備更新緩慢、學(xué)生實操時間沒有保障等很多問題。如果在機械裝配的教學(xué)環(huán)節(jié)中引入VR元素,將在很大程度上解決上述問題。機械裝配VR仿真平臺如圖所示。
在VRTK中,有一個名字為“SnapDropZone”的預(yù)設(shè)體,具有限定物體到固定位置的功能,可以利用它來實現(xiàn)機械的順序裝配功能。下面是具體的步驟。(1)按照前面章節(jié)里介紹的方法,先配置好VRTK、HTCVI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人門面房租賃合同(含裝修及經(jīng)營權(quán)轉(zhuǎn)讓)4篇
- 二零二五年度美容院美容師品牌推廣聘用合同4篇
- 2025年度龍門吊安裝安全協(xié)議書及售后服務(wù)合同4篇
- 2025個人果園土地承包合同書制定與執(zhí)行細(xì)則4篇
- 2025版美發(fā)店消防安全檢查與整改服務(wù)合同4篇
- 2025年消防噴淋系統(tǒng)安裝及售后支持服務(wù)合同3篇
- 2025年度個人心理測評師雇傭合同4篇
- 2025年度高性能螺旋鋼管批量采購供應(yīng)合同4篇
- 2024年09月江西2024中國光大銀行南昌分行校園招考筆試歷年參考題庫附帶答案詳解
- 2024年09月江蘇浦發(fā)銀行南京分行招考(93)筆試歷年參考題庫附帶答案詳解
- C及C++程序設(shè)計課件
- 帶狀皰疹護理查房
- 公路路基路面現(xiàn)場測試隨機選點記錄
- 平衡計分卡-化戰(zhàn)略為行動
- 國家自然科學(xué)基金(NSFC)申請書樣本
- 幼兒教師干預(yù)幼兒同伴沖突的行為研究 論文
- 湖南省省級溫室氣體排放清單土地利用變化和林業(yè)部分
- 材料設(shè)備驗收管理流程圖
- 培訓(xùn)機構(gòu)消防安全承諾書范文(通用5篇)
- (完整版)建筑業(yè)10項新技術(shù)(2017年最新版)
- 第8期監(jiān)理月報(江蘇版)
評論
0/150
提交評論