(一)VRTK_ SimplePointer(直線簡單激光指針)
*** ? Enable Teleport(啟用傳送):如果勾選了寇窑,在目標(biāo)設(shè)置事件中的teleport標(biāo)志位就設(shè)為true,所以傳送腳本就知道是否要行動到新的目標(biāo)。如果這個選項沒有勾選的話松邪,控制器光束啟動但是不會觸發(fā)位移携狭。
*** ? Point Hit Color(指針碰撞顏色):當(dāng)光束和一個有效目標(biāo)碰撞的顏色缸兔。每個控制器可以有不同的顏色設(shè)置旧找。
*** ? Pointer Miss Color(指針無碰撞顏色):當(dāng)光束沒有命中有效目標(biāo)時的顏色溺健。每個控制器可以有不同的顏色設(shè)置。
*** ? Show Play Area Cursor(顯示游玩區(qū)光標(biāo)):如果這個啟動钦讳,游玩區(qū)界限就會在光束指針的頂端顯示出來矿瘦,顏色和當(dāng)前指針顏色相同。
*** ? Play Area Cursor Dimensions(游玩去光標(biāo)尺寸):決定游玩區(qū)光標(biāo)和碰撞的尺寸愿卒。如果值為零缚去,PlayArea Cursor 的尺寸將根據(jù)Play Area空間進(jìn)行校正。
? Handle Play Area Cursor Collisions(處理游玩區(qū)光標(biāo)碰撞):如果勾選琼开,當(dāng)游玩區(qū)光標(biāo)和其他物體發(fā)生碰撞時易结,指針顏色就會變成Pointer Miss Color的顏色且WorldPointerDestinationSet 事件將不會被觸發(fā),這將防止傳送到游玩區(qū)會發(fā)生碰撞的區(qū)域柜候。
*** ? Beam Always On(光束總是開啟):如果這個勾選搞动,光束指針總是可見,但是設(shè)置目標(biāo)點事件仍然只會在所指定按鈕松開時發(fā)出渣刷。
*** ? Pointer Thickness(指針光束厚度):光束長寬也可以在腳本里設(shè)置以及能夠開關(guān)顯示在光柱最后的球形光柱頂端(表示光標(biāo))鹦肿。
*** ? Pointer Length(指針光束長度):在停止前光束投射的距離。
*** ? Show Pointer Tip(顯示指針頂端):***切換是否光標(biāo)顯示在光束指針的尾部辅柴。
(二)VRTK_ControllerEvents(控制器事件)
當(dāng)一個控制器按鈕被按下箩溃,腳本發(fā)出一個事件表明按鈕被按下了,這使得其他腳本去監(jiān)聽這個事件而不需要實現(xiàn)任何控制器邏輯碌嘀。腳本也有一個公共的布爾類型的按下狀態(tài)變量涣旨,允許被其他腳本查詢按鈕是否被按下。當(dāng)一個控制器按鈕被釋放股冗,腳本也發(fā)送一個事件表示按鈕被釋放了霹陡。控制器觸摸板有兩個狀態(tài)止状,既可以用戶只把手指放到壓力傳感板上來觸摸烹棉,也可以用戶在板上按下去直到發(fā)出聲響來點擊∏影蹋控制器事件腳本同時分別處理觸摸板觸摸和點擊事件峦耘。
控制器上有兩個按鈕軸:
*** · 觸摸板觸摸位置,位置的x和y值基于觸摸板當(dāng)前被觸摸位置旅薄。
· 扳機按鈕辅髓,有個基于扳機鍵被按下去程度的x值。***
當(dāng)觸摸板的軸或者扳機鍵的軸值改變時少梁,會有兩個額外的事件發(fā)出洛口,這可以被用來確定兩個軸的變化來進(jìn)行精確控制,如用觸摸板來移動角色凯沪,或者知道扳機鍵被按下程度第焰。
觸摸板的軸由變量TouchpadAxis 記錄,在所有控制器事件的腳本中更新妨马。
扳機鍵的軸由變量buttonPressure 記錄挺举,在所有控制事件腳本中更新杀赢。
任何其他按鈕按壓只記錄一個為1或者0按鈕壓力,因為所有其他按鈕都是數(shù)字量(要么就是點擊要么就沒有)湘纵,但扳機是一個可以記錄不同按鈕壓力的模擬量脂崔。
軸值變化的精確度可以由腳本中的axisFidelity 參數(shù)來決定,默認(rèn)值為1梧喷。
值只要超過2就可能會產(chǎn)生靈敏過度的結(jié)果砌左。
(三)VRTK_BezierPointer(貝塞爾曲線激光指針)
可用腳本參數(shù)如下:
*** Enable Teleport(啟用傳送):如果勾選了,在目標(biāo)設(shè)置事件中的teleport標(biāo)志位就設(shè)為true铺敌,所以傳送腳本就知道是否要行動到新的目標(biāo)汇歹。如果這個選項沒有勾選的話,控制器光束啟動但是不會觸發(fā)位移偿凭。
*** Point Hit Color(指針碰撞顏色):當(dāng)光束和一個有效目標(biāo)碰撞的顏色产弹。每個控制器可以有不同的顏色設(shè)置。
Pointer Miss Color(指針無碰撞顏色):當(dāng)光束沒有命中有效目標(biāo)時的顏色弯囊。每個控制器可以有不同的顏色設(shè)置取视。
*** Show Play Area Cursor(顯示游玩區(qū)光標(biāo)):如果這個啟動,游玩區(qū)界限就會在光束指針的頂端顯示出來常挚,顏色和當(dāng)前指針顏色相同作谭。
*** Play Area Cursor Dimensions(游玩去光標(biāo)尺寸):(決定游玩區(qū)光標(biāo)和碰撞的尺寸。如果值為零奄毡,PlayArea Cursor 的尺寸將根據(jù)Play Area空間進(jìn)行校正折欠。
*** Handle Play Area Cursor Collisions(處理游玩區(qū)光標(biāo)碰撞):***如果勾選,當(dāng)游玩區(qū)光標(biāo)和其他物體發(fā)生碰撞時吼过,指針顏色就會變成Pointer Miss Color的顏色且WorldPointerDestinationSet 事件將不會被觸發(fā)锐秦,這將防止傳送到游玩區(qū)會發(fā)生碰撞的區(qū)域。
Beam Always On(光束總是開啟):如果這個勾選盗忱,光束指針總是可見酱床,但是設(shè)置目標(biāo)點事件仍然只會在所指定按鈕松開時發(fā)出。
Activate Delay(激活間隔):能夠再次激活指針光束的延遲時間秒數(shù)趟佃。用來防止持續(xù)傳送扇谣。
Pointer Length(指針光束長度):在停止前光束投射的距離。
Pointer Density(指針密度):貝塞爾曲線光束渲染的物體個數(shù)闲昭。這里數(shù)值太高將很可能會因為大量渲染對象來對游戲性能有負(fù)面影響罐寨。
Show Pointer Cursor(顯示指針光標(biāo)):在光束終點位置的地面顯示光標(biāo)。用來看光束終點位置的高度很有用序矩,它可以通過切換這個來關(guān)閉鸯绿。
Pointer Cursor Radius(指針光標(biāo)半徑):地面指針光標(biāo)的尺寸,這個值也會影響貝塞爾曲線光束里的對象的尺寸。半徑越大瓶蝴,對象尺寸越大毒返。
Beam Curve Offset(光束曲線偏移): 投射光束時應(yīng)用的高度偏移量,就算在光束徑直指向時也能產(chǎn)生一個光滑的曲線舷手。
*** Custom Pointer Tracer(自定義指針軌跡): ***可以在這里設(shè)置一個自定義的游戲?qū)ο笥脕泶婀馐壽E的默認(rèn)球體拧簸。自定義游戲?qū)ο髮⒑涂刂破鞯男D(zhuǎn)想匹配。
Custom Pointer Cursor(自定義指針光標(biāo)): 可以在這里設(shè)置一個自定義的游戲?qū)ο笥脕泶嬷羔樄鈽?biāo)的默認(rèn)平柱體聚霜。
(四)VRTK_BasicTeleport(基礎(chǔ)傳送器)
基礎(chǔ)傳送器更新[CameraRig]在游戲世界中的x和z位置到由WorldPointerDestinationSet事件設(shè)置定位的世界指針頂端的位置狡恬。
? Blink Transition Speed(眨眼淡入淡出速度):可以在基礎(chǔ)傳送腳本中改變眨眼漸變速度來提供一個自定義的傳送體驗珠叔。速度設(shè)置為0意味著沒有漸變眨眼特效呈現(xiàn)蝎宇。漸變通過 SteamVR Unity 插件腳本里的SteamVR_Fade.cs腳本實現(xiàn)。
*** ? Distance Blink Delay(距離眨眼延時):*** 范圍從0到32祷安,這個值決定了基于被傳送距離的眨眼過渡保持黑屏的時長姥芥。值為0時,任何傳送距離都不會延長傳送的眨眼過渡汇鞭,值為32時凉唐,就算距離初始點很近的被傳送距離都會延長傳送的眨眼過渡。這可以被用來模擬用戶傳送更遠(yuǎn)的距離花費更長時間霍骄。值為16對用戶來說就剛好台囱。
*** ? Headset Position Compensation(頭盔位置補償): 如果勾選,傳送坐標(biāo)將會式游玩區(qū)內(nèi)頭盔的位置读整。如果沒有勾選簿训,傳送坐標(biāo)將總是游玩區(qū)中間的位置,就算頭盔位置不在游玩區(qū)中間也式如此米间。
*** ? Ignore Target With Tag Or Class(忽略帶有標(biāo)簽或腳本的目標(biāo)): 一個指定對象標(biāo)簽或者對象上添加的腳本名字的字符串强品,通知傳送器這種目標(biāo)點應(yīng)該被忽略,所以用戶就不能傳送到這些位置上屈糊。同時也確保指針顏色被設(shè)為丟失目標(biāo)點顏色的榛。
(五)VRTK_HeightAdjustTeleport(可調(diào)節(jié)高度的傳送器)
高度調(diào)整傳送器繼承自基礎(chǔ)傳送器,它允許根據(jù)傳送位置是否在其他對象頂部來讓[CameraRig]改變y位置逻锐。
和基礎(chǔ)傳送器一樣夫晌,高度調(diào)整傳送器被添加到[CameraRig]預(yù)制并需要一個可用的世界指針。
可用腳本參數(shù)如下:
Blink Transition Speed(眨眼淡入淡出速度):可以在基礎(chǔ)傳送腳本中改變眨眼漸變速度來提供一個自定義的傳送體驗昧诱。速度設(shè)置為0意味著沒有漸變眨眼特效呈現(xiàn)慷丽。漸變通過 SteamVR Unity 插件腳本里的SteamVR_Fade.cs腳本實現(xiàn)。
*** · Distance Blink Delay(距離眨眼延時): ***范圍從0到32鳄哭,這個值決定了基于被傳送距離的眨眼過渡保持黑屏的時長要糊。值為0時,任何傳送距離都不會延長傳送的眨眼過渡,值為32時锄俄,就算距離初始點很近的被傳送距離都會延長傳送的眨眼過渡局劲。這可以被用來模擬用戶傳送更遠(yuǎn)的距離花費更長時間。值為16對用戶來說就剛好奶赠。
*** · Headset Position Compensation(頭盔位置補償): ***如果勾選鱼填,傳送坐標(biāo)將會式游玩區(qū)內(nèi)頭盔的位置。如果沒有勾選毅戈,傳送坐標(biāo)將總是游玩區(qū)中間的位置苹丸,就算頭盔位置不在游玩區(qū)中間也式如此。
***· Ignore Target With Tag Or Class(忽略帶有標(biāo)簽或腳本的目標(biāo)) : ***一個指定對象標(biāo)簽或者對象上添加的腳本名字的字符串苇经,通知傳送器這種目標(biāo)點應(yīng)該被忽略赘理,所以用戶就不能傳送到這些位置上。同時也確保指針顏色被設(shè)為丟失目標(biāo)點顏色扇单。
· Play Space Falling(游玩區(qū)墜落):檢查是否玩家是否走出對象商模,即所在游玩區(qū)的位置不在對象上,然后就會自動傳送到最近的地面上蜘澜。
(六)VRTK_HeadsetCollisionFade(頭盔碰撞淡出)
頭盔碰撞淡出的目的是為了檢測用戶的VR頭盔何時碰撞到其他游戲?qū)ο蟛⒌銎聊坏揭粋€單色施流。
這是為了處理玩家把頭放進(jìn)一個游戲?qū)ο罄锟吹綄ο髢?nèi)部的裁剪,這不是我們所期望的鄙信。
之所以這么做瞪醋,是因為如果玩家把頭放到不該放的地方就會淡出到一個顏色(如黑色),這就讓玩家意識到他們做錯了什么装诡,然后可能自然的就會后退银受。如果頭盔正在碰撞,那么傳送行為就被禁用來防止穿插穿墻的作弊慎王。
頭盔碰撞淡出腳本添加到[CameraRig] 預(yù)制下的Camera (head)里的Camera(eye)對象上蚓土。
可用腳本參數(shù)如下:
· Blink Transition Speed(眨眼淡入淡出速度):碰撞時淡入淡出速度。
· Fade Color(淡出顏色):頭盔碰撞時淡出顏色赖淤。發(fā)出事件如下:
*** · HeadsetCollisionDetect: 當(dāng)用戶頭盔碰到其他游戲?qū)ο髸r發(fā)出蜀漆。
*** · HeadsetCollisionEnded:當(dāng)用戶頭盔停止碰撞游戲?qū)ο髸r發(fā)出。發(fā)出事件的有效載體內(nèi)容包括:
*** · collider:*** 頭盔所碰撞的游戲?qū)ο蟮呐鲎财鳌?br>
*** · currentTransform:*** 當(dāng)前頭盔碰撞淡入淡出腳本所添加到的對象(相機)的Transform咱旱。
(七)VRTK_PlayerPresence(玩家呈現(xiàn))
VR用戶在游戲呈現(xiàn)中有身體這一概念确丢,它通過在用戶站立在游玩區(qū)中的位置添加碰撞和剛體來實現(xiàn)。
身體的碰撞和剛體將防止用戶能狗穿過墻壁或者和其他可碰撞對象穿插吐限。
碰撞體的高度由用戶頭盔所在高度決定鲜侥,如果用戶下蹲,碰撞體同樣收縮诸典,這意味著可能在低的空間去下蹲和爬行通過描函。
· Headset Y Offset(頭盔y偏移):為用戶創(chuàng)建的盒型碰撞體的高度由用戶頭盔位置設(shè)置。如果需要碰撞體小一點來讓游玩區(qū)和頭盔之間留有空間的話,這個值將降低生成的盒型碰撞體的高度舀寓。
*** · Ignore Grabbed Collisions(忽略抓取碰撞):***如果勾選胆数,任何被控制器抓取的物品都不會和游玩區(qū)的盒碰撞體及剛體發(fā)生碰撞。這在用戶需要抓取和揮動對象時是很有用的互墓,因為如果碰撞體激活必尼,這些抓取的東西就會被游玩區(qū)的碰撞體彈開。
(八)VRTK_TouchpadWalking(觸摸板移動)
TouchpadWalking腳本用在[CameraRig]預(yù)制上篡撵,并且在用戶位置添加一個剛體和盒型碰撞來防止他們穿過其他帶碰撞的游戲?qū)ο蟆?/p>
可用腳本參數(shù)如下:
*** · Left Controller:如果勾選判莉,左控制器的觸摸板就能移動游玩區(qū)。在運行時可以被切換育谬。
*** · Right Controller:如果勾選券盅,右控制器的觸摸板就能移動游玩區(qū)。在運行時可以被切換斑司。
*** · Max Walk Speed:當(dāng)觸摸板被觸摸到軸的極限時游玩區(qū)所能達(dá)到的最大移動速度渗饮。觸摸板距離中心越近的位置被觸摸但汞,移動速度就越慢宿刮。
*** · Deceleration(減速度):當(dāng)用戶不再觸摸到觸摸板時游玩區(qū)從減速到完全停止的速度。這種減速度效果可以減緩可能遭受的移動惡心私蕾。
(九)VRTK_RoomExtender(游玩區(qū)空間擴展)
這個腳本允許游玩區(qū)跟隨玩家移動僵缺。
CameraRig只在達(dá)到定義的圈的邊緣才會移動。目的是為了創(chuàng)造一個虛擬的更大的游玩區(qū)踩叭。
測試這個腳本的demo場景為028_CameraRig_RoomExtender磕潮。把腳本添加到CameraRig來使用。
可用腳本參數(shù)如下:
*** Additional Movement Multiplier(額外移動乘數(shù)): ***圈邊緣的移動放大因數(shù)容贝。0就是不移動CameraRig自脯。值越高模擬的游玩區(qū)域就越大,但是也可能就越不令人舒適斤富。
*** Head Zone Radius(頭部空間半徑):***游玩區(qū)不會發(fā)生移動的圓圈尺寸膏潮,一切都正常的。如果值太低满力,在蹲下時就會感到不舒服焕参。
***Debug Transform(調(diào)試Transform): ***這個transform讓玩家周圍的CameraRig不移動圓圈顯示出來。在demo場景里就是一個在地板上的柱體油额。記得關(guān)閉碰撞叠纷。
(十)VRTK_InteractableObject(可交互對象)
可交互對象腳本被添加到需要用(如控制器)來交互的任何游戲?qū)ο笊稀?br>
Touch Interactions 觸摸交互
?HighlightOnTouch:如果勾選,這個對象在控制器觸摸它時就會高亮潦嘶。
?TouchHighlightColor:對象被觸摸時高亮的顏色涩嚣。顏色可以被任何全局的設(shè)置顏色來覆寫(例如InteractTouch腳本)。
?RumbleOnTouch:控制器觸碰對象時觸發(fā)振動反饋,x表明時長航厚,y表明震動強度校摩。(x和y將來會被自定義編輯器代替)。
Grab Interactions 抓握交互
?IsGrabbale:決定對象是否能被抓握阶淘。
?IsDroppable:決定對象在被控制器抓握后能否被放下衙吩。如果沒有勾選,一旦用控制器按鈕拾起了物品就不能放下了溪窒。但是如果抓握的機制是關(guān)節(jié)(Fixed_Joint)的話坤塞,當(dāng)對象受力足夠大之后關(guān)節(jié)斷開,物品也就被放下了澈蚌。所以最好使用控制器子物體的抓握機制(Child_Of_Controller)來防止這種情況摹芙。
?HoldButtonToGrab:如果勾選,控制器就需要持續(xù)按住設(shè)置為抓握的按鈕來保持抓握狀態(tài)宛瞄。如果沒有勾選浮禾,抓握的按鈕切換抓握行為通過按下一次抓取,再按一次釋放份汗。
?OnGrabCollisionDelay:當(dāng)對象被第一次抓取時延遲碰撞的作用的時間量盈电。這在防止游戲?qū)ο蟊蛔トr卡到另外一個物體時很有用。
?GrabSnapType(抓取對齊方式):這個設(shè)置了當(dāng)對象被抓取時的對齊方式
Sinmple_Snap:把抓取的對象的中心位置放到控制器的附加點上(默認(rèn)是控制器的tip)
Rotation_Snap:調(diào)整抓取的對象到一個指定旋轉(zhuǎn)杯活,由Vector3類型的SnapToRotation變量提供匆帚。
Precision_Snap:沒有把對象的位置對齊到控制器,而是用控制器觸摸對象時的點來拾起對象(就像真實生活中用手拿起東西一樣)旁钧。
Handle_Snap:允許一個空的GameObject作為可交互對象的子物體來用作參考對齊點吸重。抓取時,空GameObject的旋轉(zhuǎn)和位置用來定位抓取的可交互物體到控制器歪今。
?SnapToRotation:表示歐拉角的Vector3變量嚎幸,決定在對齊時相對于控制器的對象的旋轉(zhuǎn)。在拾取槍或劍的時候很有用寄猩,對控制器的相對旋轉(zhuǎn)對便于使用是很重要的嫉晶。
?SnapToPosition:一個Vector3變量,決定對象對齊控制器時的相對位置焦影。
?SnapHanlde:一個由空游戲?qū)ο筇峁┑腡ransform车遂,它必須是被抓取物品的子物體并用作一個被拾取物品相對于進(jìn)行抓取的控制器的旋轉(zhuǎn)和位置的定位點。
?RumbleOnGrab:控制器抓取對象時觸發(fā)振動反饋斯辰,x表明時長舶担,y表明震動強度。(x和y將來會被自定義編輯器代替)彬呻。
Grab Mechanics 抓握機制
?GrabAttachType:這決定了抓取的物品在被抓取時怎樣被添加到控制器上衣陶。
FixedJoint(固定關(guān)節(jié)):用一個固定的關(guān)節(jié)把對象附加到控制器上柄瑰,意味著附加對象以完全1:1的方式追蹤控制器的位置和旋轉(zhuǎn)。
springJoint(彈性關(guān)節(jié)):用一個彈性關(guān)節(jié)把對象添加到控制器上剪况,意味著物體和控制器之間有一些彈性教沾,彈力驅(qū)動物體。在想要牽引一個物體而不是直接把物體對齊到控制器上是很有效的译断。就感覺物體有運動阻力一般授翻。
TrackObject(追蹤對象):不是通過關(guān)節(jié)來把對象附加到控制器上,而是確保對象追蹤控制器的方向孙咪,這適用于鉸鏈?zhǔn)疥P(guān)節(jié)堪唐。
***ChildOfController(控制器子物體):****簡單地讓對象成為抓取控制器的子物體,所以自然地追蹤了控制器運動位置翎蹈。
?DetachThreshold(分離閾值):當(dāng)對象從被抓取的控制器分離時的力值淮菠。如果控制器試著施加一個高于這個閾值的力到對象上(從另一個對象上拉它或者推它到另一個對象),然后保持對象到抓取控制器的關(guān)節(jié)就將斷開并且對象將不能再被抓起了荤堪。這在TrackedObject抓取機制下也有效合陵,只是這個值確定斷開抓取錢控制器可以離對象多遠(yuǎn)。
?SpringJointStrength(彈簧關(guān)節(jié)力):彈簧力保持對象到控制器澄阳。小數(shù)值將意味著彈簧很松并且對象需要一個更大的力去移動拥知,大數(shù)值就意味著彈簧很緊,小點的力就可以移動它寇荧。
?SpringJointDamper(彈簧關(guān)節(jié)阻尼):彈簧的阻尼量在使用彈簧關(guān)節(jié)抓取機制下有效举庶。在移動被關(guān)節(jié)的交互對象時执隧,值越高震動效果越小揩抡。
?ThrowMuliplier(投擲倍數(shù)):值用來乘以給定對象被扔出時的速度值。這還可以被用來連同InteractGrab腳本的ThrowMultiplier來讓對象被扔的比平常更遠(yuǎn)(或者輸入的值小于1就扔的很近)镀琉。
Use Interactions 使用交互
?IsUsable(是否可用):決定對象是否可以被使用?HoldButtonToUse:如果勾選峦嗤,控制器上的使用(use)按鈕需要被持續(xù)按下來保持使用。如果沒有勾選屋摔,use按鈕用一次按鈕按下來啟動使用和再一次按下來停止使用烁设。
?PointerAvtivatesUseAction:如果勾選,當(dāng)一個世界光束指針(由控制器投射)碰到了交互對象钓试,如果對象的HoldButtonToUse沒有勾選的話装黑,當(dāng)指針在對象上的時候就會運行對象的StartUsing方法,指針移開失效就會運行StopUsing方法弓熏。這個選項在被勾選以后恋谭,為了防止在用一個指針來使用對象時發(fā)生不必要的傳送,就不會拋出目標(biāo)點設(shè)置(DestinationSet)事件挽鞠。
?RumbleOnUse:控制器觸碰對象時觸發(fā)振動反饋疚颊,x表明時長狈孔,y表明震動強度。(x和y將來會被自定義編輯器代替)材义。
下面的事件是被發(fā)送的:
?InteractableObjectTouched:當(dāng)另一個對象碰到當(dāng)前對象時發(fā)出事件均抽。
?InteractableObjectUntouched:當(dāng)其他對象停止觸碰當(dāng)前對象時發(fā)出事件。
?InteractableObjectGrabbed:當(dāng)其他對象(如控制器)抓握當(dāng)前對象時發(fā)出事件其掂。?InteractableObjectUngrabbed:當(dāng)其他對象停止抓握當(dāng)前對象時發(fā)出事件油挥。
?InteractableObjectUsed:當(dāng)其他對象(控制器)使用當(dāng)前對象時發(fā)出事件。
?InteractableObjectUnused:當(dāng)其他對象停止使用當(dāng)前對象時發(fā)出事件款熬。
發(fā)出的事件有效信息載體包涵:?interactingObject:初始化交互的對象(如控制器)喘漏。
腳本基本是提供一個簡單的機制來區(qū)分游戲世界中的對象是否能被抓取或者使用,最好是把這個腳本看做是一個基類來派生出功能更豐富的腳本华烟。
VRTK_InteractableObject的例子可以看005場景翩迈。這個場景還在控制器上使用了VRTK_InteractTouch和VRTK_InteractGrab腳本,來展示一個交互對象怎樣被抓取和對齊到控制器以及在游戲世界中扔出盔夜。
另外一個例子在場景013负饲。這個場景展示了更多對象,可以被按住按鈕抓取或者切換按鈕點擊來抓取的對象喂链,還有對象通過切換它們的Using狀態(tài)來展示多種物品可同時被開啟返十。
(十一)VRTK_InteractTouch(觸摸交互對象)
觸摸交互腳本被添加到[CameraRig] 預(yù)制里的控制器對象上。
可用參數(shù)如下:
*** ? Hide Controller On Touch: 當(dāng)有效觸碰發(fā)生時隱藏控制器模型
*** ? Hide Controller Delay:觸摸隱藏控制器之前的等待秒數(shù)椭微。
*** ? Global Touch Highlight Color: ***如果交互對象被觸碰就能高亮顯示洞坑,沒有設(shè)置本地顏色的話就使用全局顏色。
發(fā)出事件如下:
? ControllerTouchInteractableObject:當(dāng)有效對象被碰到時發(fā)出
? ControllerUntouchInteractableObject: 當(dāng)一個有效對象不再被觸碰時發(fā)出發(fā)出事件有效
載體信息包含:
? controllerIndex(控制器序號):正在交互的控制器的序號
***? Target(目標(biāo)): ***控制器正在交互的對象的GameObject
(十二)VRTK_InteractGrab(抓取交互對象)
交互抓取腳本被添加到[CameraRig] 預(yù)制里的控制器對象上蝇率,并且需要添加VRTK_ControllerEvents腳本用來監(jiān)聽抓取和釋放交互游戲?qū)ο蟮目刂破靼粹o事件迟杂。
它監(jiān)聽AliasGrabOn和AliasGrabOff 事件來確定對象合適應(yīng)該被抓取和釋放埃儿÷荽粒控制器對象也需要添加VRTK_InteractTouch 腳本用來確定何時一個可交互對象被觸摸到。
只有有效的被觸摸對象才能被抓取缺前。如果控制器觸碰到一個包含VRTK_InteractableObject腳本并且isGrabbable 標(biāo)志位設(shè)置為真的游戲?qū)ο蠊荆搶ο缶涂梢员蛔ト ?/p>
如果有效可交互對象是可抓取的监氢,按下控制器上所設(shè)置的抓取按鈕(默認(rèn)是Trigger按鈕)將抓取和對齊對象到控制器上,并且直到抓取按鈕松開才會被釋放藤违。
當(dāng)控制器抓取按鈕松開時浪腐,如果可交互對象是可抓取的,它將會被按一定速率沿著控制器松開時的方向進(jìn)行推動顿乒,這就模擬了對象投擲议街。可交互對象需要碰撞體用來激活觸發(fā)和一個剛體用來拾取它們并在游戲世界中四處移動它們淆游。)
可用腳本參數(shù)如下:
? Controller Attach Point:控制器模型上用來吸附抓取的對象的剛體點(默認(rèn)為tip)
? Hide Controller On Grab:當(dāng)有效抓取發(fā)生時隱藏控制器模型傍睹。
? Hide Controller Delay:在抓取時隱藏控制器之前的等待時間秒數(shù)隔盛。
*** ? Grab Precognition(預(yù)先抓取):8** 在抓取按鈕按下時和控制器正在抓取某個東西時之間時間量拾稳。例如吮炕,如果一個對象下落過快,因為人的反應(yīng)時間可能很難及時按下抓取按鈕來抓住對象访得。這個值越高意味著抓取鍵可以越提前在控制器碰到對象以及碰撞發(fā)生前按下龙亲,如果抓取鍵仍然被按下(如果抓取對象需要持續(xù)按鍵抓取的話),則抓取動作就會成功悍抑。
*** ? Throw Multiplier(投擲乘數(shù)):用來乘以對象被扔出時速度的量鳄炉。在放大 CameraRig 來模擬能夠把物體扔的更遠(yuǎn)時是很有用的。
*** ? Create Rigid Body When Not Touching:如果勾選搜骡,當(dāng)抓取按鈕按下時拂盯,如果控制器沒有碰到一個可交互的對象,那么添加到控制器上的剛體就允許控制器去推動周圍其他的剛體對象记靡。
發(fā)出事件如下:
? ControllerGrabInteractableObject: 當(dāng)有效對象被抓取時發(fā)出
? ControllerUngrabInteractableObject: 當(dāng)有效對象從抓取到放開時發(fā)出
發(fā)出事件有效載體信息包含:
***? controllerIndex: ***正在交互的控制器序號
***? target: ***控制器正在交互的對象的GameObject
VRTK_InteractGrab的例子可以參見005場景谈竿。場景演示了抓取掛有VRTK_InteractableObject 腳本的可交互對象。對象可拾起可拋出摸吠。
更復(fù)雜一點的例子可以參見場景013空凸,這里演示了每個控制器都能單獨抓取和使用對象并且對象也可以被同時切換它們的使用狀態(tài)。014場景演示了不同的對齊抓取的對象到控制器上的機制寸痢。
(十三)VRTK_InteractUse(使用可交互對象)
交互使用腳本被添加到[CameraRig] 預(yù)制里的控制器對象上呀洲,并且需要添加VRTK_ControllerEvents腳本用來監(jiān)聽使用和停止使用交互游戲?qū)ο蟮目刂破靼粹o事件。
它監(jiān)聽AliasUseOn 和AliasUseOff 事件來確定對象合適應(yīng)該被使用和停止使用啼止。
控制器對象也需要添加VRTK_InteractTouch腳本來決定何時可交互對象被觸碰道逗。
只有有效的觸碰對象才能被使用。如果控制器觸碰到一個包含VRTK_InteractableObject 腳本且isUsable標(biāo)志位設(shè)置為真族壳,這個對象就能被使用憔辫。
可用腳本參數(shù)如下:
? Hide Controller On Use:當(dāng)有效使用動作開始時隱藏控制器模型
*** ? Hide Controller Delay:***在使用之前,隱藏控制器的等待時間秒數(shù)
發(fā)出事件如下:
? ControllerUseInteractableObject: 當(dāng)一個有效對象開始被使用時發(fā)出? ControllerUnuseInteractableObject: 當(dāng)一個有效對象停止被使用時發(fā)出
發(fā)出的事件的有效載體信息包含:
? controllerIndex: 正在交互的控制器序號
? target: 控制器正在交互的對象的GameObject
例子參見006場景仿荆,模擬打開一扇門和關(guān)上。地上也有一個立方體可以被抓取來展示可交互對象怎么被使用或者抓取
另一個例子可參見008場景坏平,它展示了對象可以用一個按鈕抓取并用另一個按鈕使用拢操。
(十四)VRTK_ObjectAutoGrab(自動抓取可交互對象)
通過把VRTK_ObjectAutoGrab腳本加到控制器上并指定應(yīng)該默認(rèn)抓取的對象,來讓特定控制器能自動抓取可交互對象舶替。
自動抓取對象腳本添加到[CameraRig] 預(yù)制里的控制器對象上令境,控制器對象還需要添加VRTK_InteractGrab 腳本。
可用腳本參數(shù)如下:
*** ? Object To Grab(抓取的對象):在游戲開始時被控制器抓取的游戲?qū)ο螅ㄔ趫鼍盎蛘哳A(yù)制里)顾瞪。
*** ? Clone Grabbed Object(復(fù)制被抓取對象):如果勾選舔庶,Object To Grab(抓取的對象)將被復(fù)制到一個新對象并添加到控制器上抛蚁,而被復(fù)制的對象留在場景里。這在兩個控制器都需要抓取同樣的對象時是需要的惕橙,因為單個對象不能被不同的控制器同時抓取瞧甩。如果被抓取的對象是一個預(yù)制就也需要被復(fù)制,因為它需要存在于場景中被抓取弥鹦。
例子參見026場景肚逸。這里每個控制器自動抓取了一把劍,同時為了防止劍被扔掉彬坏,劍被永久的添加到用戶的控制器上