您的位置:首页 > 其它

HTC Vive VR房产项目开发二(开关门)

2017-07-15 21:24 330 查看
一、新建一个空物体,重命名为Door,将门作为Object的子物体,玻璃作为门的子物体,将门的位置和大小信息拷贝到空物体上



二、当手柄接触门时打开

1、创建一个脚本door继承自VRTK_InteractableObject(当挂载到物体上时会用于父类VRTK_InteractableObject所有的方法),并添加到物体Door上

脚本内容:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK;
using DG.Tweening;

public class Door : VRTK_InteractableObject {

private bool isOpen = false;

//重写Start,该方法已经过时,使用后不会调用,使用下面的方法代替
//public override void StartUsing(GameObject currentUsingObject)
//{
//base.StartUsing(currentUsingObject);
//transform.rotation = Quaternion.Euler(new Vector3(3,140,0));
//Debug.LogError("Start Using......................");
//}

public override void StartUsing(VRTK_InteractUse currentUsingObject = null)
{
base.StartUsing(currentUsingObject);
//transform.rotation = Quaternion.Euler(new Vector3(-90,140,90));//三个参数分别是最终位置时物体x,y,z轴上的旋转角度,该方法没有缓动效果

if (isOpen)
{
//transform.DORotate(new Vector3(-90, 0, 90), 1.5f) 通过1.5s的时间旋转到x,y,z轴分别为0,0,0的位置
//SetEase(Ease.OutBounce)  设置回弹类型
//transform.DORotate(new Vector3(-90,0,90),1.5f).SetEase(Ease.OutBounce);

//transform.DORewind(true);
transform.DORotate(new Vector3(-90, 0, -270), 1.5f).SetEase(Ease.OutBounce);

}
else
{
//transform.DORotate(new Vector3(-90, 140, 90), 1.5f) 通过1.5s的时间旋转到x,y,z轴分别为0,0,0的位置
//SetEase(Ease.OutBounce)  设置回弹类型
// transform.DORewind(true);

transform.DORotate(new Vector3(-90, 140, 90), 1.5f).SetEase(Ease.OutBack);

}
isOpen = !isOpen;
}

}
挂载到Door上,并且勾选isUsable



2、给左右手柄都添加以下组件





3、勾选VRTK_Pointer下的Interact With Object,这时当指针移动到门上并且按下扳机键的时候,可以开关门



4、运行后的结果

指针指到门上,并按下扳机键,门由关闭变成打开





门打开的时候,指针指到门上,并按下扳机键,门关闭



门关闭的时候,手柄移动到门上,按下扳机键后门打开



门开启的时候手柄碰到门并按下扳机键,门由开启变成关闭

开启状态



关闭状态



三、抓取物体

1、选中物体,点击Window-->VRTK-->SetUp Interactable Object,设置完成后点击Setup Selected object(s)



2、勾选Precision Grap的复选框(精确抓取)



注:

1、参考资料:http://edu.manew.com/course/344/learn#lesson/5751

2、遇到的问题:VRTK的脚本方法不调用

复写了该方法,但是并没有调用,并且方法下面有波浪线标注



原因:方法过时了,已经被新的方法替代了。当鼠标移动到方法名上时会提示新的方法名

解决办法:使用新的方法替代老的方法。如把上面的方法改为下面的方法,就可以正常调用了



3、物体没有进行旋转

原因:物体的static属性被勾选了,此时物体不会参与任何关于运动的行为


解决办法:取消勾选static复选框,此时就可以正常运行了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: