[转]VRTK☀️五、与物体交互

目录

🟥 基础配置

🟧 交互方式

1️⃣ Touch

2️⃣ Grab

🚩 抓取功能实现

🚩 物体抓取位置和抓取方向设置

🚩 Use

🟨 实现功能

1️⃣ 抓取/触摸/Use时,物体代替控制器

2️⃣ 交互时物体震动反馈

🟩 快捷配置

🟦 获取射线选中的物体

🟪 物体高亮


🟥 基础配置

1、基础配置

传送门

2、物体配置:

给要交互的物体挂载 VRTK_InteractableObject、Collider、VRTK_ChildOfControllerGrabAttach

该组件标明该物体可交互、在该组件配置该物体下面的三种交互方式。

3、手柄配置:

a、给右手添加 VRTK_InteractGrab(用于Touch、Grab)。

该脚本自动添加 VRTK_InteractTouch、VRTK_ControllerActions、VRTK_ControllerEvents

b、(可选)右手添加 VRTK_InteractUse

🟧 交互方式

1️⃣ Touch

效果:手柄触摸触发事件

基础效果,不会像下面Grab、Use一样,可以取消勾选IsUseable来使这些功能不发挥作用。

TouchHighlightColor:触摸时高亮的颜色

AllowTouchControllers:能被左手或右手交互

2️⃣ Grab

效果:手柄抓取触发事件

🚩 抓取功能实现

再给物体添加脚本 VRTK_ChildOfControllerGrabAttach,赋值给GrabAttachMechanicScripts属性。意味着抓取时该物体成为手的子物体。

IsGrabbable:勾选,下面配置的属性才会发挥作用。下同

HoldButtonToGrab:

勾选:按下Grab键,抓取起该物体。松开,该物体就掉落

不勾选:按一下,抓起来。再按一下,掉下来。

StayGrabbedOnTeleport:勾选,瞬移过程中仍能拿着该物体。否则,瞬移时该物体会松开。

ValidDrop:拿着物体,当按下手柄上Grap键时,由下面属性控制该物体怎样释放。

Bo_Drop:释放遵从 HoldButtonToGrab

Drop_Anywhere:释放在任何地方,类似扔出效果(得有rigidbdoy)

Drop_ValidSnapDropZone:放到可用的区域里面(当物体与该区域重叠,就释放在那)

GrabAttachMechanicScripts:抓取机制,作为抓取手柄子物体、实现攀爬效果等。后面文章讲解。

SecondaryGrabActionScripts:另一个手柄的抓取机制。可跟上面属性配合,可实现更丰富抓取效果。如双手持放、拖拉缩放等。

🚩 物体抓取位置和抓取方向设置

VRTK_ChildOfControllerGrabAttach脚本设置该属性:

PrecisionGrab:是否采用精确抓取。不勾选,抓取时该物体坐标与手柄坐标相同,吸附效果。勾选,在什么地方抓取,就在什么地方拿起来。

RightSnapHandle:实现抓取位置、方向设置(需取消上精确抓取属性)。在该物体下新建一个空物体赋值给这个属性。设置该空物体的Transform,即可设置抓取该物体时的方位。下方LeftSnapHandle是左手的设置。(可在运行时设置该空物体旋转方位属性,达到要求)

🚩 Use

效果:手柄射线选中实现效果

是自己重写上述Touch和Grab效果,在抓取的各个阶段,实现自己想要的功能。

🟨 实现功能

1️⃣ 抓取/触摸/Use时,物体代替控制器

即抓取某物体后,手柄被替换成了该物体。

a、首先完成上述物体抓取/触摸/Use的相关配置

b、给物体再添加 VRTK_InteractControllerAppearance 

HideControllerOnGrab:抓取后,抓取的控制器消失

HideDelayOnGrab:延迟x秒,控制器消失

2️⃣ 交互时物体震动反馈

a、首先完成上述物体抓取/触摸/Use的相关配置

b、给物体再添加 VRTK_InteractHaptics

Srrength、Duration、Interval分别是:力度、持续时间、间隔时间。

🟩 快捷配置

即不用自己挂代码、赋值属性,快速实现配置物体上述属性的方法:

选中物体,Windows——VRTK——SetupInteractableObject,将该对话框成为标签,能看到全部内容。

🟦 获取射线选中的物体

    //赋值右手
    public VRTK_Pointer vRTK_Pointer;
 
    private void Start()
    {
        vRTK_Pointer.DestinationMarkerEnter += enter;
    }
 
    void enter(object sender,DestinationMarkerEventArgs e)
    {
        print(e.target.name);
    }

🟪 物体高亮

效果1:手柄碰到物体,该物体整体高亮

a、新建Cube,选中Cube,Windows——VRTK——SetupInteractableObject,设置高亮颜色即可

b、现在手柄碰到该Cube,该Cube即可高亮

效果2:物体边缘高亮

物体挂载 VRTK_OutlineObjectCopyHighlighter,边缘高亮宽度Thickness设为0.5。

大家还有什么问题,欢迎在下方留言!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值