1、使用手柄点击,按下Trigger键触发
2、使用激光指针悬停在物体上,按下Trigger键
2019.06.26更新:
写了一套逻辑,只要勾选isHTC,自动帮你把UI从PC版转成VR版。取消勾选,程序回到PC版。
2、给要捡起的cube进行配置(2-4完成射线触碰物体变色,实现选中状态)(5也要做第4步)(红色必做!)
3、给手柄控制器进行配置,完成射线选中效果。
a、添加VRTK_Interact Use
b、勾选VRTK_Pointer的Interact With Object。实现射线与物体的交互,可出现选中效果。
若不勾选,则只实现手柄触碰到之后才交互。
4、添加VRTK_InteractUse_UnityEvents
5、给要交互的物体添加Collider,挂载自己定义的事件的新脚本
注意:因为4步以前我们添加了射线击中变黄事件,自动添加了VRTK_InteractableObject组件,而我们下面方法继承了VRTK_InteractableObject该组件,因此一定要先删除原先添加的组件!
我们也可删掉通过自动配置自动添加的组件,直接添加我们写的代码,这一个脚本也能实现功能!
using UnityEngine;
using UnityEngine.UI;
using VRTK;
public class Skode_BtnSelect : VRTK_InteractableObject
{
// 开始使用:默认扣动扳机键
public override void StartUsing(GameObject currentUsingObject)
{
base.StartUsing(currentUsingObject);
#region 自定义
var value = GetComponent<Button>().onClick;
if (value != null)
{
value.Invoke();
}
#endregion
}
// 停止使用:默认松开扳机键
public override void StopUsing(GameObject previousUsingObject)
{
base.StopUsing(previousUsingObject);
#region 自定义
#endregion
}
}
Hold Button To Use:
如果勾选,控制器上的使用(use)按钮需要被持续按下来保持使用/(“需要长时间按下,来触发Use事件”——来自某牛)Use Only if Grabbed:当被抓取的时候,属性才能被使用 Pointer Activates Use Action:(“只要激光击中物体,不需要Trigger的按下,就是可以使用的。不勾选,则只有按下时,才可激活Use事件”——来自某牛)/(勾选该选项,不勾选Hold Button To Use,当指针在对象上的时候就会运行对象的StartUsing方法)关于横线删除:网上博客都说的是删除文字内容,但我实际测试结果是: 1、同时勾选HoldButtonToUse和PointerActivatesUseAction,只要当激光射线第一次指到该物体时,立刻触发且仅触发一次use事件,不需长按,没有重复触发。 2、只勾选HoldButtonToUse,并不需要长按Trigger,还是只要按下就触发 希望有了解的朋友确认问题。
需要注意的是:右手手柄按下扳机键点击物体想触发Use事件,要在此时关闭瞬移效果
原先:右手手柄按下圆盘键激光击中物体,按下扳机键,触发Use事件。当松开圆盘键时,还会传送到物体位置
希望:松开圆盘键后,不要传送到物体位置。
关闭方法0:
设置传送限制规则。
关闭方法1:
右手手柄VRTK_InteractUse_UnityEvents——Toggle为false
单纯实现与UI Collider的交互,直接用上面的“与物体的交互”就OK了,但要实现UI Scroll View的滑动效果,则还要: 1、先完成与物体交互手柄的操作步骤,UI上可不添加Interactable
2、在想要交互的手柄上,比如RightController,添加VRTK_UIPointer、VRTK_ControllerUIPointerEvents_ListenerExample脚本。
3、在想要交互的Canvas上挂载VRTK_UICanvas组件
这时我们会发现我们虽然能实现效果,但是射线穿透UI了。这是因为虽然VRTK_UICanvas在Canvas上自动生成了Boxcollider,但是我们Canvas里面的内容不和Canvas在一个平面。这导致射线检测不到碰撞器,穿透了。所以我们:
要不然就把下面的物体放在和Canvas同一个平面上;
要不然注释掉给canvas添加collider的代码,自己给不同位置的UI添加collider。
实现效果:按下圆盘键触发激光,按下Grab键将物体吸附在激光顶端。(不勾选,使用Use方法抓取物体,是使用的Trigger键)
注意:你要用自己继承了VRTK_InteractableObject的脚本,记得配置如下选项(用VRTK配置生成的则自动配置好了)
1、勾选右手VRTK_Pointer——GrabToPointerTip
2、去掉要抓取物体的右手吸附点。
若是设置了吸附点,则不会吸附在射线顶端,而是实现吸附点的抓取。
大家还有什么问题,欢迎在下方留言!