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