- 轉(zhuǎn)載 :原文鏈接:http://www.chinaar.com/ZYJC/1434.html
貝塞爾指針從控制器末端發(fā)出一個曲線(由游戲?qū)ο蠼M構(gòu)而成)到(任何高度的)地面上一點。這比簡單激光指針要有用的多,因為終點能夠彎曲到玩家看不見的對象頂部,所以就可以傳送到各種高度的對象上。
激光束默認(rèn)按控制器上的抓握鍵Grip來激活。事件偵聽AliasPointer別名事件,所以Pointer Toggle
button可以通過在VRTK_ControllerEvents 腳本中改變Pointer Toggle button來進(jìn)行選擇設(shè)置。
貝塞爾指針腳本被添加到[CameraRig]預(yù)制里的控制器對象上,控制器對象同時需要添加VRTK_ControllerEvents腳本用來監(jiān)聽控制器按鈕開關(guān)光束的事件。
可用腳本參數(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)和碰撞的尺寸。如果值為零,Play Area 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)平柱體。
貝塞爾指針對象擴(kuò)展自VRTK_WorldPointer 抽象類并因此發(fā)出相同的事件和有效數(shù)據(jù)。
VRTK_BezierPointer腳本的例子參見SteamVR_Unity_Toolkit/Examples/009_Controller_BezierPointer場景,它被連同Height
Adjust Teleporter腳本一起使用,來顯示怎樣可以不需要看到對象的頂部就能使用曲線指針來傳送到不同高度的對象上。
另一個例子可以參見SteamVR_Unity_Toolkit/Examples/012_Controller_PointerWithAreaCollision場景,這里演示了一個開啟了游玩區(qū)光標(biāo)和碰撞檢測的貝塞爾指針怎樣被用來穿過游戲區(qū)域,但是不允許傳送到墻壁或者其他對象的區(qū)域而導(dǎo)致游玩區(qū)讓玩家穿進(jìn)墻壁。
貝塞爾曲線生成的代碼是另一個腳本,位置在SteamVR_Unity_Toolkit/Scripts/Helper/CurveGenerator.cs,這基本是受Catlike
Coding的教程和代碼的啟發(fā)(http://catlikecoding.com/unity/tutorials/curves-and-splines/)。