前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >VRTK☀️五、与物体交互

VRTK☀️五、与物体交互

作者头像
星河造梦坊官方
发布2024-08-15 18:25:38
发布2024-08-15 18:25:38
12200
代码可运行
举报
运行总次数:0
代码可运行

🟥 基础配置

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,将该对话框成为标签,能看到全部内容。

🟦 获取射线选中的物体

代码语言:javascript
代码运行次数:0
复制
    //赋值右手
    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。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🟥 基础配置
  • 🟧 交互方式
    • 1️⃣ Touch
    • 2️⃣ Grab
      • 🚩 抓取功能实现
      • 🚩 物体抓取位置和抓取方向设置
      • 🚩 Use
  • 🟨 实现功能
    • 1️⃣ 抓取/触摸/Use时,物体代替控制器
    • 2️⃣ 交互时物体震动反馈
  • 🟩 快捷配置
  • 🟦 获取射线选中的物体
  • 🟪 物体高亮
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档