中文字幕无码a片久久,亚洲日韩在线观看浪潮,人人超人人超碰超国产二区,国产人妻久久一区二区,国产人妻久久一区二区

福感科技有限公司 歡迎您!
技術(shù)支持
聯(lián)系方式

    地址:北京市平谷區(qū)馬坊鎮(zhèn)金河北街17號(hào)院3號(hào)樓7層712

    電話:010-89968230

    網(wǎng)站:http://0743119.com

你的位置:首頁 > 技術(shù)支持

UNITY3D 與 HTC VIVE 數(shù)據(jù)手套VR應(yīng)用開發(fā)

2020-10-12 20:53:00??????點(diǎn)擊:

目前很多VR用戶使用UNIYT3D做VR應(yīng)用開發(fā)時(shí),新版本的SteamVR1.2.1在Unity5.4.4下狂報(bào)錯(cuò),這是因?yàn)関ive的sdk SteamVR在升級(jí),會(huì)有些改動(dòng)。

下面的內(nèi)容是在以下環(huán)境完成的 unity5.6.2f1

1、導(dǎo)入SDK:SteamVR Plugin和Vive Input Utility
2、將CamerRag拖入場(chǎng)景

3、添加拾取對(duì)象

添加一個(gè)3d對(duì)象,并添加腳本BasicGrabbables即可,則物體可以被拾取。物體要被拾取,還需要添加剛體組件

4、添加觸碰對(duì)象

添加一個(gè)3d對(duì)象,默認(rèn)即可觸碰

5、添加接觸效果

在3d物體上添加腳本MaterialChanger,設(shè)置其參數(shù)

Normal:默認(rèn)貼圖

Heightlight:觸碰后的貼圖

Pressed:按下按鈕時(shí)的貼圖

Heighlight Button:指定按鈕,默認(rèn)是Trigger

6、運(yùn)行

觸碰拾取對(duì)象時(shí),顯示綠色,

按下按鍵后,變紅色,可以移動(dòng)旋轉(zhuǎn)物體

觸碰對(duì)象可以觸碰,按下按鍵變紅色,但無法移動(dòng)和轉(zhuǎn)動(dòng)

7、事件響應(yīng)

vive支持以下事件

  • IColliderEventHoverEnterHandler
  • IColliderEventHoverExitHandler
  • IColliderEventPressDownHandler
  • IColliderEventPressUpHandler
  • IColliderEventPressEnterHandler
  • IColliderEventPressExitHandler
  • IColliderEventClickHandler
  • IColliderEventDragStartHandler
  • IColliderEventDragUpdateHandler
  • IColliderEventDragEndHandler
  • IColliderEventDropHandler
  • IColliderEventAxisChangedHandler
使用方法,新建腳本如下,并把腳本添加到游戲?qū)ο?,即可?/span>
  1. using System.Collections;  
  2. using System.Collections.Generic;  
  3. using UnityEngine;  
  4. using HTC.UnityPlugin.ColliderEvent; 
  5. public class viveLearn : MonoBehaviour,IColliderEventHoverEnterHandler {  
  6.  public void OnColliderEventHoverEnter(ColliderHoverEventData eventData){  
  7.  Debug.Log ("hover");  
  8.  }  
  9. }  

如何把數(shù)據(jù)手套集成到VIVE開發(fā)應(yīng)用里?

1.首先建立一個(gè)UNITY3D工程, 導(dǎo)入HTC VIVE開發(fā)包
2.導(dǎo)入WISEGLOVE數(shù)據(jù)手套的U3D開發(fā)包

在U3D的資源列表里可以看到項(xiàng)目里有WISEGLOVE_RIGHTARM.CS腳本和WISEGLOVE數(shù)據(jù)手套的調(diào)用插件程序。

3. 把WISEGLOVE的調(diào)用腳本拖到場(chǎng)景內(nèi)的主相機(jī)/ 或者其他物體上,并選擇好數(shù)據(jù)手套端口號(hào)(可以在控制面板->設(shè)備管理器)。


4. OK, 現(xiàn)在已經(jīng)建立好了UNITY3D+VIVE環(huán)境下數(shù)據(jù)手套的功能配置。

5. 數(shù)據(jù)手套的主要源碼片段

//初始化數(shù)據(jù)手套

void Start () {
ret_angle=new float[19];//存儲(chǔ)傳感器角度值,適合WISEGLOVE5WISEGLOVE14WISEGLOVE15WISEGLOVE18WISEGLOVE19傳感器手套

armsensor = new float[12];   //帶有手臂跟蹤功能擴(kuò)展的數(shù)據(jù)手套專用
feedback = new byte[5];      //帶有力反饋功能能擴(kuò)展的數(shù)據(jù)手套專用
openstate = wgInitManu(port);  //打開數(shù)據(jù)手套端口,并對(duì)手套標(biāo)定變量初始化
Debug.Log("open state:"+ openstate.ToString());
}
//這里是刷新程序片段
void Update () {

if (openstate == 1) {
    wgGetAngle (ret_angle); //讀取數(shù)據(jù)手套的角度值
    wgGetQuat (armsensor); //讀取數(shù)據(jù)手套的手臂跟蹤傳感器值
}

//模型手臂旋轉(zhuǎn)
model_uparm_right.rotation   = &armsensor[0];
model_forearm_right.rotation =  &armsensor[4];
model_hand_right.rotation     =  &armsensor[8];
//模型手關(guān)節(jié)旋轉(zhuǎn),以大拇指關(guān)節(jié)為例
Thumb_R.rotation = Quaternion.Euler (0,-ret_angle [0] ,0) ;
Thumb_R1.rotation= Quaternion.Euler(0,-ret_angle [1] ,0) ;
Thumb_R2.rotation= Quaternion.Euler(0,-ret_angle [2] ,0) ;
....此處省略其他手指的設(shè)置

//數(shù)據(jù)手套的力反饋測(cè)試設(shè)置
if (Input.GetKey (KeyCode.Alpha1)) {
feedback [0] = 16; feedback [1] = 0;feedback [2] = 0;feedback [3] = 0;feedback [4] = 0;
wgSetFeedBack(feedback);
}
if (Input.GetKey (KeyCode.P)) {
feedback [0] = 0; feedback [1] = 0;feedback [2] = 0;feedback [3] = 0;feedback [4] = 0;
wgSetFeedBack (feedback);
}

//按下R鍵,開始標(biāo)定
if (Input.GetKey (KeyCode.R)) {
    wgResetHand();  //標(biāo)定數(shù)據(jù)手套的手指?jìng)鞲衅?/span>
    wgResetArm();  //標(biāo)定數(shù)據(jù)手套的手臂跟蹤傳感器
}
if (Input.GetKey (KeyCode.Q)) {
Application.Quit(); //禁止自動(dòng)標(biāo)定    //0 - 自動(dòng)標(biāo)定
}
}
void OnDestroy () {
if (openstate == 1) {
wgClose ();//程序退出時(shí),關(guān)閉數(shù)據(jù)手套調(diào)用資源,并釋放所有申請(qǐng)的內(nèi)存資源
openstate =0;
Debug.Log ("Glove is closed!");
}
else 
Debug.Log ("Glove is NOT closed!");
}
//數(shù)據(jù)手套的手勢(shì)定義實(shí)現(xiàn)過程
//獲取WISEGLOVE數(shù)據(jù)手套當(dāng)前的手勢(shì),例如:0x1f-石頭 0x17-剪子, 0x00-布, 0x1c-OK
int CheckGloveStatus()
{
int gesture = 0; //0x1f;  // b1 1111
//大拇指第0位,...小指第4位
if (ret_angle [0] > 150 / 2)
gesture += 0x01;  // 
if (ret_angle [1] > 270 / 2)
gesture += 0x02;  // 
if (ret_angle [2] > 270 / 2)
gesture += 0x04;  // 
if (ret_angle [3] > 270 / 2)
gesture += 0x08;  // 
if (ret_angle [4] > 270 / 2)
gesture += 0x10;  // 
return gesture;
}

}

6. 本U3D工程源碼

如需要本U3D工程源碼,請(qǐng)聯(lián)系我們。

Copyright 2019 0743119.com

福感科技有限公司 版權(quán)所有 All Rights Reserved

京ICP備20002031號(hào)

010-89968230