注意:VRTK官方已經(jīng)在準(zhǔn)備3.0版本宣蔚,這里講的是2.2.1這個(gè)版本弄企。簽出代碼的時(shí)候戏挡,注意checkout到2.2.1這個(gè)tag下面货徙。
008_Controller_UsingAGrabbedObject 使用已抓住的物體
這個(gè)場(chǎng)景演示了如何使用已經(jīng)抓住的物體左权,比如我們撿起了一把手槍拿在手里(按下Grip鍵),然后點(diǎn)擊Trigger鍵進(jìn)行發(fā)射子彈痴颊。該場(chǎng)景中還有一個(gè)玩具盒子赏迟,拿起之后執(zhí)行use操作,上面的膠囊體可以旋轉(zhuǎn)蠢棱。
其實(shí)關(guān)于如何使用物體锌杀,前面的文章中已經(jīng)介紹過了,這里再簡(jiǎn)單介紹一下吧泻仙。
要自定義使用物體的行為糕再,需要從VRTK_InteractableObject類繼承,重寫基類的Start玉转、Update突想、StartUsing、StopUsing等函數(shù)究抓。我們先來看Gun類的實(shí)現(xiàn)猾担。
最重要的就是StartUsing函數(shù)中調(diào)用FireBullet函數(shù)。該函數(shù)實(shí)例化了一個(gè)子彈刺下,然后對(duì)子彈的剛體施加了一定的力绑嘹,發(fā)射出去,經(jīng)過了一段時(shí)間之后銷毀該對(duì)象橘茉。
再看看Whirlygig類怎么實(shí)現(xiàn)的:
該類中在StartUsing的時(shí)候工腋,設(shè)置了一個(gè)旋轉(zhuǎn)速度蛤克,并在StopUsing的時(shí)候設(shè)置成0,這實(shí)現(xiàn)了按住Trigger的時(shí)候膠囊體是一直旋轉(zhuǎn)的夷蚊,松開的時(shí)候就停止了。該類重寫了Update函數(shù)髓介,保證每一幀都會(huì)根據(jù)旋轉(zhuǎn)速度進(jìn)行一定量的旋轉(zhuǎn)惕鼓。So easy!
009_Controller_BezierPointer 貝塞爾指針
該場(chǎng)景主要演示了如何在場(chǎng)景中使用貝塞爾曲線的指針唐础,傳送器還是前面文章中提到過的可適應(yīng)高度的傳送器箱歧。由貝塞爾曲線生成的激光束并不是直線,而是貝塞爾曲線一膨,該功能允許用戶在看不到物體頂部的情況下爬到上面呀邢。效果示意圖如下:
VRTK_BezierPointer類
該場(chǎng)景中最大的變化就是用BezierPointer替換了SimplePointer。BezierPointer從控制器頂端發(fā)出一條曲線指向地面豹绪,這在地面高度不一致的時(shí)候進(jìn)行傳送比較有用价淌,因?yàn)檫@樣可以直接把用戶傳送到看不到的物體頂部。通過按住控制器上面的觸摸板可以激活光束瞒津,可以通過VRTK_ControllerEvents腳本中的參數(shù)更改默認(rèn)按鍵蝉衣。BezierPointer腳本可以添加到[CameraRig]下面的控制器對(duì)象上,控制器對(duì)象需要VRTK_ControllerEvents腳本巷蚪,因?yàn)樗枰O(jiān)聽控制器的按鍵事件來開啟或者關(guān)閉光束病毡。也可以把BezierPointer腳本添加到其他對(duì)象上,讓其他對(duì)象發(fā)射光束屁柏。
下面看一下BezierPointer類的主要參數(shù)啦膜。
Pointer Length: 發(fā)射的指針光束的長(zhǎng)度。這基本上就是從控制器位置能夠指到的距離淌喻。
Pointer Density: 在貝塞爾曲線中渲染線段的數(shù)量僧家。數(shù)量過高的話,會(huì)影響性能裸删。
Show Pointer Cursor: 光束指向地面上的時(shí)候會(huì)顯示一個(gè)游標(biāo)啸臀,能看到光束終點(diǎn)的位置非常有用,可以使用這個(gè)參數(shù)開關(guān)烁落。
Pointer Cursor Radius: 地面上指針的大小半徑乘粒。這個(gè)數(shù)字也影響貝塞爾曲線中物體的大小,半徑越大伤塌,物體越大灯萍。
Pointer Cursor Match Target Rotation: 如果是true的話,游標(biāo)將會(huì)旋轉(zhuǎn)來匹配目標(biāo)表面的角度每聪;如果是false的話旦棉,游標(biāo)總是水平的齿风。
Beam Curve Offset: 光束曲線高度偏移量。
Beam Height Limit Angle: 在曲線高度光束高度受限制之前绑洛,控制器的最大角度救斑。小一些的角度設(shè)置會(huì)使光束彎曲下來,并防止光束投射到天空上真屯。
Custom Pointer Tracer: 自定義指針路徑對(duì)象脸候,默認(rèn)是個(gè)圓球。自定義的對(duì)象將會(huì)匹配控制器的旋轉(zhuǎn)绑蔫。
Custom Pointer Cursor: 自定義的指針游標(biāo)运沦,默認(rèn)是個(gè)平面的圓。
Layers To Ignore: 指定要忽略投射的層配深。
Valid Teleport Location Object: 在允許傳送的情況下携添,要顯示的自定義對(duì)象。
Rescale Pointer Tracer: 根據(jù)貝塞爾曲線的長(zhǎng)度篓叶,重新縮放指針路徑對(duì)象烈掠。