steamvr_gazetracker(凝視)
凝視是一種在沒有手柄等輸入裝置的情況下,可以通過眼睛盯著某個物體看來與物體進行互動的體驗。
我們只需要將個輔組類新增到我們想要凝視的物體上,比如選單等,就可以實現凝視的功能。現在我們來看看凝視的實現原理。
void update () rigidbody rigidbody = pointer.addcomponent();
rigidbody.iskinematic = true;
} else {
if(collider) {
object.destroy(collider);
/8,設定雷射束的材質/
material newmaterial = new material(shader.find(「unlit/color」));
newmaterial.setcolor("_color", color);
pointer.getcomponent().material = newmaterial;
public virtual void onpointerin(pointereventargs e) {
if (pointerin != null) pointerin(this, e);
public virtual void onpointerout(pointereventargs e) {
if (pointerout != null) pointerout(this, e);
// update is called once per frame
void update () {
/第一次呼叫時將holder設為active/
if (!isactive) {
isactive = true;
this.transform.getchild(0).gameobject.setactive(true);
/將雷射束的最遠距離設為100公尺/
float dist = 100f;
/獲取當前物體(手柄)上的steamvr_trackedcontroller指令碼/
steamvr_trackedcontroller controller = getcomponent();
/構造一條射線/
ray raycast = new ray(transform.position, transform.forward);
raycasthit hit;
bool bhit = physics.raycast(raycast, out hit);
/射線命中物體後移出,說明物體不在命中,呼叫onpointerout的通知/
if(previouscontact && previouscontact != hit.transform) {
pointereventargs args = new pointereventargs();
if (controller != null) {
args.controllerindex = controller.controllerindex;
args.distance = 0f;
args.flags = 0;
args.target = previouscontact; onpointerout(args);
previouscontact = null;
/射線命中物體,呼叫onpointerin的通知/
if(bhit && previouscontact != hit.transform) {
pointereventargs argsin = new pointereventargs();
if (controller != null) {
argsin.controllerindex = controller.controllerindex;
argsin.distance = hit.distance;
argsin.flags = 0;
argsin.target = hit.transform;
onpointerin(argsin);
previouscontact = hit.transform;
if(!bhit) {
previouscontact = null;
/如果命中物體距離大於100,則無效,否則有效/
if (bhit && hit.distance < 100f) {
dist = hit.distance;
if (controller != null && controller.triggerpressed) {
/當按下扳機鍵時,將光束的粗細增大5倍,長度會設為dist,通過這種方法讓光線不會穿透物體/
pointer.transform.localscale = new vector3(thickness * 5f, thickness * 5f, dist);
else {
/沒按下扳機或者當前控制器沒有新增steamvr_trackedcontroller時,顯示原始粗細的光束/
pointer.transform.localscale = new vector3(thickness, thickness, dist);
/將光束的位置設在光束長度的一半的位置,使得光束看起來是從手柄發出來的/
pointer.transform.localposition = new vector3(0f, 0f, dist/2f);
看完了steamvr_laserpointer的**,我們就知道了雷射束實現的原理,其實雷射束實現起來還是蠻簡單的,但是在vr的互動中,使用起來非常的方便。
unity steamVR 學習隨筆3
指令碼 1.interactedable 該指令碼用於和手柄產生反饋,專案中需要和手柄產生互動的物體都需要加入該指令碼。2.interactedable hover events 該指令碼用於執行物體被手柄選中後的互動操作。方法 3.interactedable button events 該指令碼...
unity steamVR學習隨筆6
一 直接抓取 1.控制手柄抓取基礎 1.向互動的目標物體掛載指令碼vrtk interactable object並新增碰撞體 vrtk interactable object指令碼解析 2.控制器抓取物體時消失 3.控制手柄震動 向互動物體新增vrtk interact haptics指令碼 vr...
外掛程式中的this
q jquery外掛程式的寫法,網上查到有兩種 第一種 function jquery 第二種 function jquery 請問這兩張有什麼區別?貌似第一種用的人多,但我看jq原始碼中是第二種 a fn.pluginname function opt 就是為jquery的prototype定義了...