查看: 1940|回复: 3

[制作] unity VR手柄选择物体旋转脚本

[复制链接]

3

主题

1

听众

95

积分

设计初学者

Rank: 1

纳金币
11
精华
0
发表于 2018-3-29 09:25:23 |显示全部楼层
本次悬赏总金额:20 元宝 | 剩余悬赏金额:20 元宝 | 去赏金大厅看看

只允许悬赏会员本人发放悬赏元宝 | 只允许版主或管理员收回悬赏元宝
还没有会员获得悬赏奖励,加油,快来争头奖!

要求:

1、手柄选择单个物体或多个物体的组合。

2、物体随着手柄进行上下左右旋转。

3、按一下手柄的某个键后,物体回到初始状态。


回复

使用道具 举报

146

主题

3

听众

1503

积分

助理设计师

Rank: 4

纳金币
1422
精华
4
发表于 2018-3-30 09:32:05 |显示全部楼层
我以前用的是Steam_VR_TK配合铰链关节与固定关节。

具体方法:

在要旋转的阀门上套一个BoxCollider,并且加上固定关节,VRTK_InteractableObject脚本,刚体。阀门自身物体添加铰链关节,刚体。
物体结构

104751d3tya8a2a38r2aj8.jpg.thumb.jpg

body为阀门下面的主体,switch为阀门,Cube为包裹在阀门上的碰撞。  
104711xz46p4n9qen00266.jpg.thumb.jpg

body上需要添加的组件。
104711aguouh7uujyuwjyo.jpg.thumb.jpg

switch上需要添加的组件
104711thrh8d39pp938wrb.jpg.thumb.jpg

Cube上需要添加的组件。
104711ij8wi8wodijbl55f.jpg.thumb.jpg
回复

使用道具 举报

172

主题

2

听众

5778

积分

高级设计师

Rank: 6Rank: 6

纳金币
5587
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

发表于 2018-3-30 09:35:46 |显示全部楼层
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class lalala : MonoBehaviour  
  5. {  
  6.     #region Value File  
  7.     [SerializeField]  
  8.     SteamVR_TrackedObject trackedObj;  
  9.   
  10.     /// <summary>  
  11.     /// 想要移动的物体  
  12.     /// </summary>  
  13.     [SerializeField]  
  14.     Transform moveObj;  
  15.   
  16.     //当前位置  
  17.     float currentPos = 0;  
  18.     //距离差  
  19.     float disCurrent = 0;  
  20.   
  21.     //Y轴距当前位置  
  22.     float currentPosY = 0;  
  23.     //距离差  
  24.     float disCurrentY = 0;  
  25.   
  26.     [Tooltip("设置旋转角度,默认为100")]  
  27.     public float setRotateAngle = 100.0f;  
  28.     [Tooltip("设置上下移动距离,默认为0.5")]  
  29.     public float setMoveDistance = 0.5f;  
  30.     #endregion  
  31.     #region MonoMathod  
  32.     private bool isOnin = false;  
  33.     // Use this for initialization  
  34.     void Start()  
  35.     {  
  36.   
  37.     }  
  38.   
  39.     // Update is called once per frame  
  40.     void Update()  
  41.     {  
  42.   
  43.         currentPos = this.transform.position.x;  
  44.         currentPosY = this.transform.position.y;  
  45.   
  46.         var decive = SteamVR_Controller.Input((int)trackedObj.index);  
  47.   
  48.         if ((decive.GetPress(SteamVR_Controller.ButtonMask.Trigger))&&isOnin)  
  49.         {  
  50.   
  51.             //moveObj.position = new Vector3(0, this.transform.position.y, 0);  
  52.             //moveObj.rotation = Quaternion.LookRotation(this.transform.position);  
  53.             //moveObj.Rotate(new Vector3(0, 0, 0));  
  54.             if (disCurrent > 0.001f)  
  55.             {  
  56.                 print(111111);  
  57.                 moveObj.Rotate(-Vector3.up * Time.deltaTime * setRotateAngle);  
  58.             }  
  59.             else if (disCurrent == 0)  
  60.             {  
  61.                 return;  
  62.             }  
  63.             else if (disCurrent < -0.001f)  
  64.             {  
  65.                 moveObj.Rotate(Vector3.up * Time.deltaTime * setRotateAngle);  
  66.             }  
  67.   
  68.             //----------------------  
  69.             //if (disCurrentY > 0.005f)  
  70.             //{  
  71.             //    moveObj.Translate(Vector3.up * Time.deltaTime * setMoveDistance);  
  72.             //}  
  73.             //else if (disCurrentY == 0)  
  74.             //{  
  75.             //    return;  
  76.             //}  
  77.             //else if (disCurrentY < -0.005f)  
  78.             //{  
  79.             //    moveObj.Translate(-Vector3.up * Time.deltaTime * setMoveDistance);  
  80.             //}  
  81.         }  
  82.     }  
  83.   
  84.     void FixedUpdate()  
  85.     {  
  86.         disCurrent = this.transform.position.x - currentPos;  
  87.         //disCurrentY = this.transform.position.y - currentPosY;  
  88.     }  
  89.   
  90.     void Awake()  
  91.     {  
  92.         trackedObj = GetComponent<SteamVR_TrackedObject>();  
  93.     }  
  94.     #endregion  
  95.     private void OnTriggerEnter(Collider collision)  
  96.     {  
  97.   
  98.         isOnin = true;  
  99.     }  
  100.     private void OnTriggerExit(Collider other)  
  101.     {  
  102.         isOnin = false;  
  103.     }  
  104. }  
复制代码
这是用HTC VIVE 旋转物体的脚本 试试
回复

使用道具 举报

3

主题

1

听众

95

积分

设计初学者

Rank: 1

纳金币
11
精华
0
发表于 2018-4-2 10:01:51 |显示全部楼层
那个姐姐 发表于 2018-3-30 09:35
这是用HTC VIVE 旋转物体的脚本 试试

不好意思 这个脚本只能左右旋转  我要的是任意角度旋转的代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号  

GMT+8, 2019-10-15 23:52 , Processed in 0.122100 second(s), 35 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部