HTC SteamVR Unity工具包(VRTK)之激光和移動(dòng)
2021-10-5 21:45:36??????點(diǎn)擊:
簡(jiǎn)單激光指針(VRTK_ SimplePointer)
簡(jiǎn)單指針(Simple Pointer)腳本從控制器尾部發(fā)出一個(gè)有色光束來(lái)模擬激光束。這在場(chǎng)景中指向?qū)ο蠛苡杏茫芘袛嗨赶虻膶?duì)象以及對(duì)象距控制器發(fā)出光束位置的距離。
激光束默認(rèn)按下控制器的抓握鍵(Grip)來(lái)激活。因?yàn)樗鶄陕?tīng)的事件是AliasPointer別名事件,所以這個(gè)指針開(kāi)關(guān)按鈕可以通過(guò)在 VRTK_ControllerEvents腳本參數(shù)里來(lái)改變 pointerToggleButton來(lái)選擇設(shè)置。
簡(jiǎn)單指針腳本(VRTK_ SimplePointer)添加到[CameraRig] 預(yù)制里的控制器對(duì)象上,同時(shí)添加需要VRTK_ControllerEvents腳本來(lái)監(jiān)聽(tīng)啟用和禁用光束的控制器按鈕事件。
下面是可用腳本參數(shù):
· Enable Teleport(啟用傳送):如果勾選了,在目標(biāo)設(shè)置事件中的teleport標(biāo)志位就設(shè)為true,所以傳送腳本就知道是否要行動(dòng)到新的目標(biāo)。如果這個(gè)選項(xiàng)沒(méi)有勾選的話(huà),控制器光束啟動(dòng)但是不會(huì)觸發(fā)位移。
· Point Hit Color(指針碰撞顏色):當(dāng)光束和一個(gè)有效目標(biāo)碰撞的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Pointer Miss Color(指針無(wú)碰撞顏色):當(dāng)光束沒(méi)有命中有效目標(biāo)時(shí)的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Show Play Area Cursor(顯示游玩區(qū)光標(biāo)):如果這個(gè)啟動(dòng),游玩區(qū)界限就會(huì)在光束指針的頂端顯示出來(lái),顏色和當(dāng)前指針顏色相同。
· Play Area Cursor Dimensions(游玩去光標(biāo)尺寸):決定游玩區(qū)光標(biāo)和碰撞的尺寸。如果值為零,Play Area Cursor 的尺寸將根據(jù)Play Area空間進(jìn)行校正。
· Handle Play Area Cursor Collisions(處理游玩區(qū)光標(biāo)碰撞):如果勾選,當(dāng)游玩區(qū)光標(biāo)和其他物體發(fā)生碰撞時(shí),指針顏色就會(huì)變成Pointer Miss Color的顏色且WorldPointerDestinationSet 事件將不會(huì)被觸發(fā),這將防止傳送到游玩區(qū)會(huì)發(fā)生碰撞的區(qū)域。
· Beam Always On(光束總是開(kāi)啟):如果這個(gè)勾選,光束指針總是可見(jiàn),但是設(shè)置目標(biāo)點(diǎn)事件仍然只會(huì)在所指定按鈕松開(kāi)時(shí)發(fā)出。
· Pointer Thickness(指針光束厚度):光束長(zhǎng)寬也可以在腳本里設(shè)置以及能夠開(kāi)關(guān)顯示在光柱最后的球形光柱頂端(表示光標(biāo))。
· Pointer Length(指針光束長(zhǎng)度):在停止前光束投射的距離。
· Show Pointer Tip(顯示指針頂端):切換是否光標(biāo)顯示在光束指針的尾部。
簡(jiǎn)單指針對(duì)象擴(kuò)展自VRTK_WorldPointer 抽象類(lèi)并因此發(fā)出相同的事件和有效數(shù)據(jù)。
貝塞爾曲線(xiàn)激光指針(VRTK_BezierPointer)
貝塞爾指針從控制器末端發(fā)出一個(gè)曲線(xiàn)(由游戲?qū)ο蠼M構(gòu)而成)到(任何高度的)地面上一點(diǎn)。這比簡(jiǎn)單激光指針要有用的多,因?yàn)榻K點(diǎn)能夠彎曲到玩家看不見(jiàn)的對(duì)象頂部,所以就可以傳送到各種高度的對(duì)象上。
激光束默認(rèn)按控制器上的抓握鍵Grip來(lái)激活。事件偵聽(tīng)AliasPointer別名事件,所以Pointer Toggle button可以通過(guò)在VRTK_ControllerEvents 腳本中改變Pointer Toggle button來(lái)進(jìn)行選擇設(shè)置。
貝塞爾指針腳本被添加到[CameraRig]預(yù)制里的控制器對(duì)象上,控制器對(duì)象同時(shí)需要添加VRTK_ControllerEvents腳本用來(lái)監(jiān)聽(tīng)控制器按鈕開(kāi)關(guān)光束的事件。
可用腳本參數(shù)如下:
· Enable Teleport(啟用傳送):如果勾選了,在目標(biāo)設(shè)置事件中的teleport標(biāo)志位就設(shè)為true,所以傳送腳本就知道是否要行動(dòng)到新的目標(biāo)。如果這個(gè)選項(xiàng)沒(méi)有勾選的話(huà),控制器光束啟動(dòng)但是不會(huì)觸發(fā)位移。
· Point Hit Color(指針碰撞顏色):當(dāng)光束和一個(gè)有效目標(biāo)碰撞的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Pointer Miss Color(指針無(wú)碰撞顏色):當(dāng)光束沒(méi)有命中有效目標(biāo)時(shí)的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Show Play Area Cursor(顯示游玩區(qū)光標(biāo)):如果這個(gè)啟動(dòng),游玩區(qū)界限就會(huì)在光束指針的頂端顯示出來(lái),顏色和當(dāng)前指針顏色相同。
· Play Area Cursor Dimensions(游玩去光標(biāo)尺寸):決定游玩區(qū)光標(biāo)和碰撞的尺寸。如果值為零,Play Area Cursor 的尺寸將根據(jù)Play Area空間進(jìn)行校正。
· Handle Play Area Cursor Collisions(處理游玩區(qū)光標(biāo)碰撞):如果勾選,當(dāng)游玩區(qū)光標(biāo)和其他物體發(fā)生碰撞時(shí),指針顏色就會(huì)變成Pointer Miss Color的顏色且WorldPointerDestinationSet 事件將不會(huì)被觸發(fā),這將防止傳送到游玩區(qū)會(huì)發(fā)生碰撞的區(qū)域。
· Beam Always On(光束總是開(kāi)啟):如果這個(gè)勾選,光束指針總是可見(jiàn),但是設(shè)置目標(biāo)點(diǎn)事件仍然只會(huì)在所指定按鈕松開(kāi)時(shí)發(fā)出。
· Activate Delay(激活間隔):能夠再次激活指針光束的延遲時(shí)間秒數(shù)。用來(lái)防止持續(xù)傳送。
· Pointer Length(指針光束長(zhǎng)度):在停止前光束投射的距離。
· Pointer Density(指針密度):貝塞爾曲線(xiàn)光束渲染的物體個(gè)數(shù)。這里數(shù)值太高將很可能會(huì)因?yàn)榇罅夸秩緦?duì)象來(lái)對(duì)游戲性能有負(fù)面影響。
· Show Pointer Cursor(顯示指針光標(biāo)):在光束終點(diǎn)位置的地面顯示光標(biāo)。用來(lái)看光束終點(diǎn)位置的高度很有用,它可以通過(guò)切換這個(gè)來(lái)關(guān)閉。
· Pointer Cursor Radius(指針光標(biāo)半徑):地面指針光標(biāo)的尺寸,這個(gè)值也會(huì)影響貝塞爾曲線(xiàn)光束里的對(duì)象的尺寸。半徑越大,對(duì)象尺寸越大。
· Beam Curve Offset(光束曲線(xiàn)偏移): 投射光束時(shí)應(yīng)用的高度偏移量,就算在光束徑直指向時(shí)也能產(chǎn)生一個(gè)光滑的曲線(xiàn)。
· Custom Pointer Tracer(自定義指針軌跡): 可以在這里設(shè)置一個(gè)自定義的游戲?qū)ο笥脕?lái)代替光束軌跡的默認(rèn)球體。自定義游戲?qū)ο髮⒑涂刂破鞯男D(zhuǎn)想匹配。
· Custom Pointer Cursor(自定義指針光標(biāo)): 可以在這里設(shè)置一個(gè)自定義的游戲?qū)ο笥脕?lái)代替指針光標(biāo)的默認(rèn)平柱體。
貝塞爾指針對(duì)象擴(kuò)展自VRTK_WorldPointer 抽象類(lèi)并因此發(fā)出相同的事件和有效數(shù)據(jù)。
基礎(chǔ)傳送器(VRTK_BasicTeleport)
基礎(chǔ)傳送器更新[CameraRig]在游戲世界中的x和z位置到由WorldPointerDestinationSet事件設(shè)置定位的世界指針頂端的位置。y位置從不改變,所以基礎(chǔ)傳送器不能用來(lái)上下移動(dòng)游戲?qū)ο蠖荒芩揭苿?dòng)。
基礎(chǔ)傳送器腳本被添加到[CameraRig] 預(yù)制下面并需要一個(gè)實(shí)現(xiàn)了WorldPointer 的腳本添加到另一個(gè)游戲?qū)ο笊希ㄈ鏥RTK_SimplePointer添加到控制器對(duì)象上)。
可用腳本參數(shù)如下:
· Blink Transition Speed(眨眼淡入淡出速度):可以在基礎(chǔ)傳送腳本中改變眨眼漸變速度來(lái)提供一個(gè)自定義的傳送體驗(yàn)。速度設(shè)置為0意味著沒(méi)有漸變眨眼特效呈現(xiàn)。漸變通過(guò) SteamVR Unity 插件腳本里的SteamVR_Fade.cs腳本實(shí)現(xiàn)。
· Distance Blink Delay(距離眨眼延時(shí)): 范圍從0到32,這個(gè)值決定了基于被傳送距離的眨眼過(guò)渡保持黑屏的時(shí)長(zhǎng)。值為0時(shí),任何傳送距離都不會(huì)延長(zhǎng)傳送的眨眼過(guò)渡,值為32時(shí),就算距離初始點(diǎn)很近的被傳送距離都會(huì)延長(zhǎng)傳送的眨眼過(guò)渡。這可以被用來(lái)模擬用戶(hù)傳送更遠(yuǎn)的距離花費(fèi)更長(zhǎng)時(shí)間。值為16對(duì)用戶(hù)來(lái)說(shuō)就剛好。
· Headset Position Compensation(頭盔位置補(bǔ)償): 如果勾選,傳送坐標(biāo)將會(huì)式游玩區(qū)內(nèi)頭盔的位置。如果沒(méi)有勾選,傳送坐標(biāo)將總是游玩區(qū)中間的位置,就算頭盔位置不在游玩區(qū)中間也式如此。
· Ignore Target With Tag Or Class(忽略帶有標(biāo)簽或腳本的目標(biāo)): 一個(gè)指定對(duì)象標(biāo)簽或者對(duì)象上添加的腳本名字的字符串,通知傳送器這種目標(biāo)點(diǎn)應(yīng)該被忽略,所以用戶(hù)就不能傳送到這些位置上。同時(shí)也確保指針顏色被設(shè)為丟失目標(biāo)點(diǎn)顏色。
VRTK_BasicTeleport 腳本的例子可以參見(jiàn)SteamVR_Unity_Toolkit/Examples/004_CameraRig_BasicTeleport場(chǎng)景。這個(gè)場(chǎng)景使用控制器上的VRTK_SimplePointer 腳本在按下grip按鈕時(shí)初始化一個(gè)激光指針,松開(kāi)Grip按鈕時(shí)激光指針失效,然后玩家傳送到激光指針頂端位置。
可調(diào)節(jié)高度的傳送器(VRTK_HeightAdjustTeleport)
高度調(diào)整傳送器繼承自基礎(chǔ)傳送器,它允許根據(jù)傳送位置是否在其他對(duì)象頂部來(lái)讓[CameraRig]改變y位置。
和基礎(chǔ)傳送器一樣,高度調(diào)整傳送器被添加到[CameraRig]預(yù)制并需要一個(gè)可用的世界指針。
· Distance Blink Delay(距離眨眼延時(shí)): 范圍從0到32,這個(gè)值決定了基于被傳送距離的眨眼過(guò)渡保持黑屏的時(shí)長(zhǎng)。值為0時(shí),任何傳送距離都不會(huì)延長(zhǎng)傳送的眨眼過(guò)渡,值為32時(shí),就算距離初始點(diǎn)很近的被傳送距離都會(huì)延長(zhǎng)傳送的眨眼過(guò)渡。這可以被用來(lái)模擬用戶(hù)傳送更遠(yuǎn)的距離花費(fèi)更長(zhǎng)時(shí)間。值為16對(duì)用戶(hù)來(lái)說(shuō)就剛好。
· Headset Position Compensation(頭盔位置補(bǔ)償): 如果勾選,傳送坐標(biāo)將會(huì)式游玩區(qū)內(nèi)頭盔的位置。如果沒(méi)有勾選,傳送坐標(biāo)將總是游玩區(qū)中間的位置,就算頭盔位置不在游玩區(qū)中間也式如此。
· Ignore Target With Tag Or Class(忽略帶有標(biāo)簽或腳本的目標(biāo)): 一個(gè)指定對(duì)象標(biāo)簽或者對(duì)象上添加的腳本名字的字符串,通知傳送器這種目標(biāo)點(diǎn)應(yīng)該被忽略,所以用戶(hù)就不能傳送到這些位置上。同時(shí)也確保指針顏色被設(shè)為丟失目標(biāo)點(diǎn)顏色。
· Play Space Falling(游玩區(qū)墜落):檢查是否玩家是否走出對(duì)象,即所在游玩區(qū)的位置不在對(duì)象上,然后就會(huì)自動(dòng)傳送到最近的地面上。
反過(guò)來(lái)說(shuō)Play Space Falling 選項(xiàng)是在玩家頭盔在一個(gè)對(duì)象上方時(shí)會(huì)自動(dòng)傳送到一個(gè)對(duì)象的頂部,這一點(diǎn)在模擬爬梯子時(shí)很有用,不需要使用指針光束定位。如果這個(gè)選項(xiàng)關(guān)閉,玩家就能在他們所站在的對(duì)象的同樣y高度的空中行走(也就是有一部分游玩區(qū)在對(duì)象外部)。
VRTK_HeightAdjustTeleport 腳本的例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/007_CameraRig_HeightAdjustTeleport場(chǎng)景。場(chǎng)景有許多不同高度對(duì)象,玩家可在來(lái)回走或者使用激光束爬到它們頂部。
另一個(gè)例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/010_CameraRig_TerrainTeleporting場(chǎng)景,展示了玩家也能夠在地形碰撞器上傳送。還有個(gè)例子SteamVR_Unity_Toolkit/Examples/020_CameraRig_MeshTeleporting場(chǎng)景中,顯示玩家在網(wǎng)格碰撞器上傳送。
頭盔碰撞淡出(VRTK_HeadsetCollisionFade)
頭盔碰撞淡出的目的是為了檢測(cè)用戶(hù)的VR頭盔何時(shí)碰撞到其他游戲?qū)ο蟛⒌銎聊坏揭粋€(gè)單色。這是為了處理玩家把頭放進(jìn)一個(gè)游戲?qū)ο罄锟吹綄?duì)象內(nèi)部的裁剪,這不是我們所期望的。之所以這么做,是因?yàn)槿绻婕野杨^放到不該放的地方就會(huì)淡出到一個(gè)顏色(如黑色),這就讓玩家意識(shí)到他們做錯(cuò)了什么,然后可能自然的就會(huì)后退。如果頭盔正在碰撞,那么傳送行為就被禁用來(lái)防止穿插穿墻的作弊。
使用Unity 5.3及之前版本,頭盔碰撞淡出腳本添加到[CameraRig] 預(yù)制的Camera(head)對(duì)象上。
使用Unity 5.4及之后版本,頭盔碰撞淡出腳本添加到[CameraRig] 預(yù)制下的Camera (head)里的Camera(eye)對(duì)象上。
可用腳本參數(shù)如下:
· Blink Transition Speed(眨眼淡入淡出速度):碰撞時(shí)淡入淡出速度。
· Fade Color(淡出顏色):頭盔碰撞時(shí)淡出顏色。
發(fā)出事件如下:
· HeadsetCollisionDetect: 當(dāng)用戶(hù)頭盔碰到其他游戲?qū)ο髸r(shí)發(fā)出。
· HeadsetCollisionEnded:當(dāng)用戶(hù)頭盔停止碰撞游戲?qū)ο髸r(shí)發(fā)出。
發(fā)出事件的有效載體內(nèi)容包括:
· collider: 頭盔所碰撞的游戲?qū)ο蟮呐鲎财鳌?/span>
· currentTransform: 當(dāng)前頭盔碰撞淡入淡出腳本所添加到的對(duì)象(相機(jī))的Transform。
VRTK_HeadsetCollisionFade 腳本例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/011_Camera_HeadSetCollisionFading場(chǎng)景。場(chǎng)景在游玩區(qū)周?chē)锌膳鲎驳膲Ρ?,如果玩家把頭放進(jìn)墻壁,頭盔就將漸變成黑色。
玩家呈現(xiàn)(VRTK_PlayerPresence)
VR用戶(hù)在游戲呈現(xiàn)中有身體這一概念,它通過(guò)在用戶(hù)站立在游玩區(qū)中的位置添加碰撞和剛體來(lái)實(shí)現(xiàn)。身體的碰撞和剛體將防止用戶(hù)能狗穿過(guò)墻壁或者和其他可碰撞對(duì)象穿插。碰撞體的高度由用戶(hù)頭盔所在高度決定,如果用戶(hù)下蹲,碰撞體同樣收縮,這意味著可能在低的空間去下蹲和爬行通過(guò)。
· Ignore Grabbed Collisions(忽略抓取碰撞):如果勾選,任何被控制器抓取的物品都不會(huì)和游玩區(qū)的盒碰撞體及剛體發(fā)生碰撞。這在用戶(hù)需要抓取和揮動(dòng)對(duì)象時(shí)是很有用的,因?yàn)槿绻鲎搀w激活,這些抓取的東西就會(huì)被游玩區(qū)的碰撞體彈開(kāi)。
VRTK_PlayerPresence 腳本例子可參見(jiàn)SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking場(chǎng)景。場(chǎng)景有很多墻體和斜坡,用戶(hù)可以用觸摸板來(lái)四處行走,但是不能穿過(guò)這些對(duì)象,因?yàn)樗鼈兪强膳鲎驳牟⑶覄傮w物理將不允許發(fā)生穿叉。
觸摸板移動(dòng) (VRTK_TouchpadWalking)
通過(guò)手指在觸摸板上滑動(dòng)來(lái)實(shí)現(xiàn)用這個(gè)腳本讓游玩區(qū)在游戲世界中能夠移動(dòng)。TouchpadWalking腳本用在[CameraRig]預(yù)制上,并且在用戶(hù)位置添加一個(gè)剛體和盒型碰撞來(lái)防止他們穿過(guò)其他帶碰撞的游戲?qū)ο蟆?/span>
如果Headset Collision Fade腳本已經(jīng)被添加到相機(jī)預(yù)制上,如果用戶(hù)試著和一個(gè)對(duì)象發(fā)生碰撞,那么他的位置就會(huì)被重置為最近的正常的位置。這可能發(fā)生在用戶(hù)穿過(guò)需要躬身的區(qū)域中途站了起來(lái)和頂部發(fā)生了碰撞。與其允許用戶(hù)這樣做而引起碰撞問(wèn)題,倒不如直接移動(dòng)回到一個(gè)正常的位置。這確實(shí)破壞了沉浸感,但用戶(hù)正在做的事情也是不自然的。
可用腳本參數(shù)如下:
· Left Controller:如果勾選,左控制器的觸摸板就能移動(dòng)游玩區(qū)。在運(yùn)行時(shí)可以被切換。
· Right Controller:如果勾選,右控制器的觸摸板就能移動(dòng)游玩區(qū)。在運(yùn)行時(shí)可以被切換。
· Max Walk Speed:當(dāng)觸摸板被觸摸到軸的極限時(shí)游玩區(qū)所能達(dá)到的最大移動(dòng)速度。觸摸板距離中心越近的位置被觸摸,移動(dòng)速度就越慢。
· Deceleration(減速度):當(dāng)用戶(hù)不再觸摸到觸摸板時(shí)游玩區(qū)從減速到完全停止的速度。這種減速度效果可以減緩可能遭受的移動(dòng)惡心。
VRTK_TouchpadWalking 腳本的例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking場(chǎng)景。場(chǎng)景中有很多墻壁和梯子,用戶(hù)可以用觸摸板來(lái)移動(dòng)。還有個(gè)區(qū)域只有用戶(hù)蹲下才能穿過(guò)。在俯身區(qū)域挺起身體將導(dǎo)致用戶(hù)閃回他們最近的正常位置。
VRTK_RoomExtender(游玩區(qū)空間擴(kuò)展)
這個(gè)腳本允許游玩區(qū)跟隨玩家移動(dòng)。CameraRig 只在達(dá)到定義的圈的邊緣才會(huì)移動(dòng)。目的是為了創(chuàng)造一個(gè)虛擬的更大的游玩區(qū)。測(cè)試這個(gè)腳本的demo場(chǎng)景為028_CameraRig_RoomExtender。
把腳本添加到CameraRig來(lái)使用。
可用腳本參數(shù)如下:
· Additional Movement Multiplier(額外移動(dòng)乘數(shù)): 圈邊緣的移動(dòng)放大因數(shù)。0就是不移動(dòng)CameraRig。值越高模擬的游玩區(qū)域就越大,但是也可能就越不令人舒適。
· Head Zone Radius(頭部空間半徑):游玩區(qū)不會(huì)發(fā)生移動(dòng)的圓圈尺寸,一切都正常的。如果值太低,在蹲下時(shí)就會(huì)感到不舒服。
簡(jiǎn)單指針(Simple Pointer)腳本從控制器尾部發(fā)出一個(gè)有色光束來(lái)模擬激光束。這在場(chǎng)景中指向?qū)ο蠛苡杏茫芘袛嗨赶虻膶?duì)象以及對(duì)象距控制器發(fā)出光束位置的距離。
激光束默認(rèn)按下控制器的抓握鍵(Grip)來(lái)激活。因?yàn)樗鶄陕?tīng)的事件是AliasPointer別名事件,所以這個(gè)指針開(kāi)關(guān)按鈕可以通過(guò)在 VRTK_ControllerEvents腳本參數(shù)里來(lái)改變 pointerToggleButton來(lái)選擇設(shè)置。
簡(jiǎn)單指針腳本(VRTK_ SimplePointer)添加到[CameraRig] 預(yù)制里的控制器對(duì)象上,同時(shí)添加需要VRTK_ControllerEvents腳本來(lái)監(jiān)聽(tīng)啟用和禁用光束的控制器按鈕事件。
下面是可用腳本參數(shù):
· Enable Teleport(啟用傳送):如果勾選了,在目標(biāo)設(shè)置事件中的teleport標(biāo)志位就設(shè)為true,所以傳送腳本就知道是否要行動(dòng)到新的目標(biāo)。如果這個(gè)選項(xiàng)沒(méi)有勾選的話(huà),控制器光束啟動(dòng)但是不會(huì)觸發(fā)位移。
· Point Hit Color(指針碰撞顏色):當(dāng)光束和一個(gè)有效目標(biāo)碰撞的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Pointer Miss Color(指針無(wú)碰撞顏色):當(dāng)光束沒(méi)有命中有效目標(biāo)時(shí)的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Show Play Area Cursor(顯示游玩區(qū)光標(biāo)):如果這個(gè)啟動(dòng),游玩區(qū)界限就會(huì)在光束指針的頂端顯示出來(lái),顏色和當(dāng)前指針顏色相同。
· Play Area Cursor Dimensions(游玩去光標(biāo)尺寸):決定游玩區(qū)光標(biāo)和碰撞的尺寸。如果值為零,Play Area Cursor 的尺寸將根據(jù)Play Area空間進(jìn)行校正。
· Handle Play Area Cursor Collisions(處理游玩區(qū)光標(biāo)碰撞):如果勾選,當(dāng)游玩區(qū)光標(biāo)和其他物體發(fā)生碰撞時(shí),指針顏色就會(huì)變成Pointer Miss Color的顏色且WorldPointerDestinationSet 事件將不會(huì)被觸發(fā),這將防止傳送到游玩區(qū)會(huì)發(fā)生碰撞的區(qū)域。
· Beam Always On(光束總是開(kāi)啟):如果這個(gè)勾選,光束指針總是可見(jiàn),但是設(shè)置目標(biāo)點(diǎn)事件仍然只會(huì)在所指定按鈕松開(kāi)時(shí)發(fā)出。
· Pointer Thickness(指針光束厚度):光束長(zhǎng)寬也可以在腳本里設(shè)置以及能夠開(kāi)關(guān)顯示在光柱最后的球形光柱頂端(表示光標(biāo))。
· Pointer Length(指針光束長(zhǎng)度):在停止前光束投射的距離。
· Show Pointer Tip(顯示指針頂端):切換是否光標(biāo)顯示在光束指針的尾部。
簡(jiǎn)單指針對(duì)象擴(kuò)展自VRTK_WorldPointer 抽象類(lèi)并因此發(fā)出相同的事件和有效數(shù)據(jù)。
貝塞爾曲線(xiàn)激光指針(VRTK_BezierPointer)
貝塞爾指針從控制器末端發(fā)出一個(gè)曲線(xiàn)(由游戲?qū)ο蠼M構(gòu)而成)到(任何高度的)地面上一點(diǎn)。這比簡(jiǎn)單激光指針要有用的多,因?yàn)榻K點(diǎn)能夠彎曲到玩家看不見(jiàn)的對(duì)象頂部,所以就可以傳送到各種高度的對(duì)象上。
激光束默認(rèn)按控制器上的抓握鍵Grip來(lái)激活。事件偵聽(tīng)AliasPointer別名事件,所以Pointer Toggle button可以通過(guò)在VRTK_ControllerEvents 腳本中改變Pointer Toggle button來(lái)進(jìn)行選擇設(shè)置。
貝塞爾指針腳本被添加到[CameraRig]預(yù)制里的控制器對(duì)象上,控制器對(duì)象同時(shí)需要添加VRTK_ControllerEvents腳本用來(lái)監(jiān)聽(tīng)控制器按鈕開(kāi)關(guān)光束的事件。
可用腳本參數(shù)如下:
· Enable Teleport(啟用傳送):如果勾選了,在目標(biāo)設(shè)置事件中的teleport標(biāo)志位就設(shè)為true,所以傳送腳本就知道是否要行動(dòng)到新的目標(biāo)。如果這個(gè)選項(xiàng)沒(méi)有勾選的話(huà),控制器光束啟動(dòng)但是不會(huì)觸發(fā)位移。
· Point Hit Color(指針碰撞顏色):當(dāng)光束和一個(gè)有效目標(biāo)碰撞的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Pointer Miss Color(指針無(wú)碰撞顏色):當(dāng)光束沒(méi)有命中有效目標(biāo)時(shí)的顏色。每個(gè)控制器可以有不同的顏色設(shè)置。
· Show Play Area Cursor(顯示游玩區(qū)光標(biāo)):如果這個(gè)啟動(dòng),游玩區(qū)界限就會(huì)在光束指針的頂端顯示出來(lái),顏色和當(dāng)前指針顏色相同。
· Play Area Cursor Dimensions(游玩去光標(biāo)尺寸):決定游玩區(qū)光標(biāo)和碰撞的尺寸。如果值為零,Play Area Cursor 的尺寸將根據(jù)Play Area空間進(jìn)行校正。
· Handle Play Area Cursor Collisions(處理游玩區(qū)光標(biāo)碰撞):如果勾選,當(dāng)游玩區(qū)光標(biāo)和其他物體發(fā)生碰撞時(shí),指針顏色就會(huì)變成Pointer Miss Color的顏色且WorldPointerDestinationSet 事件將不會(huì)被觸發(fā),這將防止傳送到游玩區(qū)會(huì)發(fā)生碰撞的區(qū)域。
· Beam Always On(光束總是開(kāi)啟):如果這個(gè)勾選,光束指針總是可見(jiàn),但是設(shè)置目標(biāo)點(diǎn)事件仍然只會(huì)在所指定按鈕松開(kāi)時(shí)發(fā)出。
· Activate Delay(激活間隔):能夠再次激活指針光束的延遲時(shí)間秒數(shù)。用來(lái)防止持續(xù)傳送。
· Pointer Length(指針光束長(zhǎng)度):在停止前光束投射的距離。
· Pointer Density(指針密度):貝塞爾曲線(xiàn)光束渲染的物體個(gè)數(shù)。這里數(shù)值太高將很可能會(huì)因?yàn)榇罅夸秩緦?duì)象來(lái)對(duì)游戲性能有負(fù)面影響。
· Show Pointer Cursor(顯示指針光標(biāo)):在光束終點(diǎn)位置的地面顯示光標(biāo)。用來(lái)看光束終點(diǎn)位置的高度很有用,它可以通過(guò)切換這個(gè)來(lái)關(guān)閉。
· Pointer Cursor Radius(指針光標(biāo)半徑):地面指針光標(biāo)的尺寸,這個(gè)值也會(huì)影響貝塞爾曲線(xiàn)光束里的對(duì)象的尺寸。半徑越大,對(duì)象尺寸越大。
· Beam Curve Offset(光束曲線(xiàn)偏移): 投射光束時(shí)應(yīng)用的高度偏移量,就算在光束徑直指向時(shí)也能產(chǎn)生一個(gè)光滑的曲線(xiàn)。
· Custom Pointer Tracer(自定義指針軌跡): 可以在這里設(shè)置一個(gè)自定義的游戲?qū)ο笥脕?lái)代替光束軌跡的默認(rèn)球體。自定義游戲?qū)ο髮⒑涂刂破鞯男D(zhuǎn)想匹配。
· Custom Pointer Cursor(自定義指針光標(biāo)): 可以在這里設(shè)置一個(gè)自定義的游戲?qū)ο笥脕?lái)代替指針光標(biāo)的默認(rèn)平柱體。
貝塞爾指針對(duì)象擴(kuò)展自VRTK_WorldPointer 抽象類(lèi)并因此發(fā)出相同的事件和有效數(shù)據(jù)。
基礎(chǔ)傳送器(VRTK_BasicTeleport)
基礎(chǔ)傳送器更新[CameraRig]在游戲世界中的x和z位置到由WorldPointerDestinationSet事件設(shè)置定位的世界指針頂端的位置。y位置從不改變,所以基礎(chǔ)傳送器不能用來(lái)上下移動(dòng)游戲?qū)ο蠖荒芩揭苿?dòng)。
基礎(chǔ)傳送器腳本被添加到[CameraRig] 預(yù)制下面并需要一個(gè)實(shí)現(xiàn)了WorldPointer 的腳本添加到另一個(gè)游戲?qū)ο笊希ㄈ鏥RTK_SimplePointer添加到控制器對(duì)象上)。
可用腳本參數(shù)如下:
· Blink Transition Speed(眨眼淡入淡出速度):可以在基礎(chǔ)傳送腳本中改變眨眼漸變速度來(lái)提供一個(gè)自定義的傳送體驗(yàn)。速度設(shè)置為0意味著沒(méi)有漸變眨眼特效呈現(xiàn)。漸變通過(guò) SteamVR Unity 插件腳本里的SteamVR_Fade.cs腳本實(shí)現(xiàn)。
· Distance Blink Delay(距離眨眼延時(shí)): 范圍從0到32,這個(gè)值決定了基于被傳送距離的眨眼過(guò)渡保持黑屏的時(shí)長(zhǎng)。值為0時(shí),任何傳送距離都不會(huì)延長(zhǎng)傳送的眨眼過(guò)渡,值為32時(shí),就算距離初始點(diǎn)很近的被傳送距離都會(huì)延長(zhǎng)傳送的眨眼過(guò)渡。這可以被用來(lái)模擬用戶(hù)傳送更遠(yuǎn)的距離花費(fèi)更長(zhǎng)時(shí)間。值為16對(duì)用戶(hù)來(lái)說(shuō)就剛好。
· Headset Position Compensation(頭盔位置補(bǔ)償): 如果勾選,傳送坐標(biāo)將會(huì)式游玩區(qū)內(nèi)頭盔的位置。如果沒(méi)有勾選,傳送坐標(biāo)將總是游玩區(qū)中間的位置,就算頭盔位置不在游玩區(qū)中間也式如此。
· Ignore Target With Tag Or Class(忽略帶有標(biāo)簽或腳本的目標(biāo)): 一個(gè)指定對(duì)象標(biāo)簽或者對(duì)象上添加的腳本名字的字符串,通知傳送器這種目標(biāo)點(diǎn)應(yīng)該被忽略,所以用戶(hù)就不能傳送到這些位置上。同時(shí)也確保指針顏色被設(shè)為丟失目標(biāo)點(diǎn)顏色。
VRTK_BasicTeleport 腳本的例子可以參見(jiàn)SteamVR_Unity_Toolkit/Examples/004_CameraRig_BasicTeleport場(chǎng)景。這個(gè)場(chǎng)景使用控制器上的VRTK_SimplePointer 腳本在按下grip按鈕時(shí)初始化一個(gè)激光指針,松開(kāi)Grip按鈕時(shí)激光指針失效,然后玩家傳送到激光指針頂端位置。
可調(diào)節(jié)高度的傳送器(VRTK_HeightAdjustTeleport)
高度調(diào)整傳送器繼承自基礎(chǔ)傳送器,它允許根據(jù)傳送位置是否在其他對(duì)象頂部來(lái)讓[CameraRig]改變y位置。
和基礎(chǔ)傳送器一樣,高度調(diào)整傳送器被添加到[CameraRig]預(yù)制并需要一個(gè)可用的世界指針。
可用腳本參數(shù)如下:
· Blink Transition Speed(眨眼淡入淡出速度):可以在基礎(chǔ)傳送腳本中改變眨眼漸變速度來(lái)提供一個(gè)自定義的傳送體驗(yàn)。速度設(shè)置為0意味著沒(méi)有漸變眨眼特效呈現(xiàn)。漸變通過(guò) SteamVR Unity 插件腳本里的SteamVR_Fade.cs腳本實(shí)現(xiàn)。· Distance Blink Delay(距離眨眼延時(shí)): 范圍從0到32,這個(gè)值決定了基于被傳送距離的眨眼過(guò)渡保持黑屏的時(shí)長(zhǎng)。值為0時(shí),任何傳送距離都不會(huì)延長(zhǎng)傳送的眨眼過(guò)渡,值為32時(shí),就算距離初始點(diǎn)很近的被傳送距離都會(huì)延長(zhǎng)傳送的眨眼過(guò)渡。這可以被用來(lái)模擬用戶(hù)傳送更遠(yuǎn)的距離花費(fèi)更長(zhǎng)時(shí)間。值為16對(duì)用戶(hù)來(lái)說(shuō)就剛好。
· Headset Position Compensation(頭盔位置補(bǔ)償): 如果勾選,傳送坐標(biāo)將會(huì)式游玩區(qū)內(nèi)頭盔的位置。如果沒(méi)有勾選,傳送坐標(biāo)將總是游玩區(qū)中間的位置,就算頭盔位置不在游玩區(qū)中間也式如此。
· Ignore Target With Tag Or Class(忽略帶有標(biāo)簽或腳本的目標(biāo)): 一個(gè)指定對(duì)象標(biāo)簽或者對(duì)象上添加的腳本名字的字符串,通知傳送器這種目標(biāo)點(diǎn)應(yīng)該被忽略,所以用戶(hù)就不能傳送到這些位置上。同時(shí)也確保指針顏色被設(shè)為丟失目標(biāo)點(diǎn)顏色。
· Play Space Falling(游玩區(qū)墜落):檢查是否玩家是否走出對(duì)象,即所在游玩區(qū)的位置不在對(duì)象上,然后就會(huì)自動(dòng)傳送到最近的地面上。
反過(guò)來(lái)說(shuō)Play Space Falling 選項(xiàng)是在玩家頭盔在一個(gè)對(duì)象上方時(shí)會(huì)自動(dòng)傳送到一個(gè)對(duì)象的頂部,這一點(diǎn)在模擬爬梯子時(shí)很有用,不需要使用指針光束定位。如果這個(gè)選項(xiàng)關(guān)閉,玩家就能在他們所站在的對(duì)象的同樣y高度的空中行走(也就是有一部分游玩區(qū)在對(duì)象外部)。
VRTK_HeightAdjustTeleport 腳本的例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/007_CameraRig_HeightAdjustTeleport場(chǎng)景。場(chǎng)景有許多不同高度對(duì)象,玩家可在來(lái)回走或者使用激光束爬到它們頂部。
另一個(gè)例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/010_CameraRig_TerrainTeleporting場(chǎng)景,展示了玩家也能夠在地形碰撞器上傳送。還有個(gè)例子SteamVR_Unity_Toolkit/Examples/020_CameraRig_MeshTeleporting場(chǎng)景中,顯示玩家在網(wǎng)格碰撞器上傳送。
頭盔碰撞淡出(VRTK_HeadsetCollisionFade)
頭盔碰撞淡出的目的是為了檢測(cè)用戶(hù)的VR頭盔何時(shí)碰撞到其他游戲?qū)ο蟛⒌銎聊坏揭粋€(gè)單色。這是為了處理玩家把頭放進(jìn)一個(gè)游戲?qū)ο罄锟吹綄?duì)象內(nèi)部的裁剪,這不是我們所期望的。之所以這么做,是因?yàn)槿绻婕野杨^放到不該放的地方就會(huì)淡出到一個(gè)顏色(如黑色),這就讓玩家意識(shí)到他們做錯(cuò)了什么,然后可能自然的就會(huì)后退。如果頭盔正在碰撞,那么傳送行為就被禁用來(lái)防止穿插穿墻的作弊。
使用Unity 5.3及之前版本,頭盔碰撞淡出腳本添加到[CameraRig] 預(yù)制的Camera(head)對(duì)象上。
使用Unity 5.4及之后版本,頭盔碰撞淡出腳本添加到[CameraRig] 預(yù)制下的Camera (head)里的Camera(eye)對(duì)象上。
可用腳本參數(shù)如下:
· Blink Transition Speed(眨眼淡入淡出速度):碰撞時(shí)淡入淡出速度。
· Fade Color(淡出顏色):頭盔碰撞時(shí)淡出顏色。
發(fā)出事件如下:
· HeadsetCollisionDetect: 當(dāng)用戶(hù)頭盔碰到其他游戲?qū)ο髸r(shí)發(fā)出。
· HeadsetCollisionEnded:當(dāng)用戶(hù)頭盔停止碰撞游戲?qū)ο髸r(shí)發(fā)出。
發(fā)出事件的有效載體內(nèi)容包括:
· collider: 頭盔所碰撞的游戲?qū)ο蟮呐鲎财鳌?/span>
· currentTransform: 當(dāng)前頭盔碰撞淡入淡出腳本所添加到的對(duì)象(相機(jī))的Transform。
VRTK_HeadsetCollisionFade 腳本例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/011_Camera_HeadSetCollisionFading場(chǎng)景。場(chǎng)景在游玩區(qū)周?chē)锌膳鲎驳膲Ρ?,如果玩家把頭放進(jìn)墻壁,頭盔就將漸變成黑色。
玩家呈現(xiàn)(VRTK_PlayerPresence)
VR用戶(hù)在游戲呈現(xiàn)中有身體這一概念,它通過(guò)在用戶(hù)站立在游玩區(qū)中的位置添加碰撞和剛體來(lái)實(shí)現(xiàn)。身體的碰撞和剛體將防止用戶(hù)能狗穿過(guò)墻壁或者和其他可碰撞對(duì)象穿插。碰撞體的高度由用戶(hù)頭盔所在高度決定,如果用戶(hù)下蹲,碰撞體同樣收縮,這意味著可能在低的空間去下蹲和爬行通過(guò)。
可用腳本參數(shù)如下:
· Headset Y Offset(頭盔y偏移):為用戶(hù)創(chuàng)建的盒型碰撞體的高度由用戶(hù)頭盔位置設(shè)置。如果需要碰撞體小一點(diǎn)來(lái)讓游玩區(qū)和頭盔之間留有空間的話(huà),這個(gè)值將降低生成的盒型碰撞體的高度。· Ignore Grabbed Collisions(忽略抓取碰撞):如果勾選,任何被控制器抓取的物品都不會(huì)和游玩區(qū)的盒碰撞體及剛體發(fā)生碰撞。這在用戶(hù)需要抓取和揮動(dòng)對(duì)象時(shí)是很有用的,因?yàn)槿绻鲎搀w激活,這些抓取的東西就會(huì)被游玩區(qū)的碰撞體彈開(kāi)。
VRTK_PlayerPresence 腳本例子可參見(jiàn)SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking場(chǎng)景。場(chǎng)景有很多墻體和斜坡,用戶(hù)可以用觸摸板來(lái)四處行走,但是不能穿過(guò)這些對(duì)象,因?yàn)樗鼈兪强膳鲎驳牟⑶覄傮w物理將不允許發(fā)生穿叉。
觸摸板移動(dòng) (VRTK_TouchpadWalking)
通過(guò)手指在觸摸板上滑動(dòng)來(lái)實(shí)現(xiàn)用這個(gè)腳本讓游玩區(qū)在游戲世界中能夠移動(dòng)。TouchpadWalking腳本用在[CameraRig]預(yù)制上,并且在用戶(hù)位置添加一個(gè)剛體和盒型碰撞來(lái)防止他們穿過(guò)其他帶碰撞的游戲?qū)ο蟆?/span>
如果Headset Collision Fade腳本已經(jīng)被添加到相機(jī)預(yù)制上,如果用戶(hù)試著和一個(gè)對(duì)象發(fā)生碰撞,那么他的位置就會(huì)被重置為最近的正常的位置。這可能發(fā)生在用戶(hù)穿過(guò)需要躬身的區(qū)域中途站了起來(lái)和頂部發(fā)生了碰撞。與其允許用戶(hù)這樣做而引起碰撞問(wèn)題,倒不如直接移動(dòng)回到一個(gè)正常的位置。這確實(shí)破壞了沉浸感,但用戶(hù)正在做的事情也是不自然的。
可用腳本參數(shù)如下:
· Left Controller:如果勾選,左控制器的觸摸板就能移動(dòng)游玩區(qū)。在運(yùn)行時(shí)可以被切換。
· Right Controller:如果勾選,右控制器的觸摸板就能移動(dòng)游玩區(qū)。在運(yùn)行時(shí)可以被切換。
· Max Walk Speed:當(dāng)觸摸板被觸摸到軸的極限時(shí)游玩區(qū)所能達(dá)到的最大移動(dòng)速度。觸摸板距離中心越近的位置被觸摸,移動(dòng)速度就越慢。
· Deceleration(減速度):當(dāng)用戶(hù)不再觸摸到觸摸板時(shí)游玩區(qū)從減速到完全停止的速度。這種減速度效果可以減緩可能遭受的移動(dòng)惡心。
VRTK_TouchpadWalking 腳本的例子參見(jiàn)SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking場(chǎng)景。場(chǎng)景中有很多墻壁和梯子,用戶(hù)可以用觸摸板來(lái)移動(dòng)。還有個(gè)區(qū)域只有用戶(hù)蹲下才能穿過(guò)。在俯身區(qū)域挺起身體將導(dǎo)致用戶(hù)閃回他們最近的正常位置。
VRTK_RoomExtender(游玩區(qū)空間擴(kuò)展)
這個(gè)腳本允許游玩區(qū)跟隨玩家移動(dòng)。CameraRig 只在達(dá)到定義的圈的邊緣才會(huì)移動(dòng)。目的是為了創(chuàng)造一個(gè)虛擬的更大的游玩區(qū)。測(cè)試這個(gè)腳本的demo場(chǎng)景為028_CameraRig_RoomExtender。
把腳本添加到CameraRig來(lái)使用。
可用腳本參數(shù)如下:
· Additional Movement Multiplier(額外移動(dòng)乘數(shù)): 圈邊緣的移動(dòng)放大因數(shù)。0就是不移動(dòng)CameraRig。值越高模擬的游玩區(qū)域就越大,但是也可能就越不令人舒適。
· Head Zone Radius(頭部空間半徑):游玩區(qū)不會(huì)發(fā)生移動(dòng)的圓圈尺寸,一切都正常的。如果值太低,在蹲下時(shí)就會(huì)感到不舒服。
· Debug Transform(調(diào)試Transform): 這個(gè)transform讓玩家周?chē)腃ameraRig不移動(dòng)圓圈顯示出來(lái)。在demo場(chǎng)景里就是一個(gè)在地板上的柱體。記得關(guān)閉碰撞。
聲明:文章內(nèi)容整理來(lái)源于網(wǎng)絡(luò),版權(quán)屬于原作者,如有問(wèn)題,請(qǐng)聯(lián)系我們!http://fgsense.com/AdminWater/index.asp
- 上一篇:UNITY3D 與 HTC VIVE 數(shù)據(jù)手套VR應(yīng)用開(kāi)發(fā) 2021/10/6
- 下一篇: UNIT3D更改界面字體大小顏色 2021/10/3


