ExtendRealityLtd / ExtendRealityLtd/VRTK

New Feature: VRTK_ObjectLerp (lerp an VRTK_InteractableObject on grab).

Open
#1,433 16 comments 3 reactions 0 assignees View on GitHub
feature help wanted
Dominant language
C#
Stars
3.7k
Forks
974
PR merge metrics
No merged PRs in 30d

Description

**Overview**

General idea is to add new functionality that smoothly animates an object into position when you grab it. This will be an optional / extra script that you can attach to an `VRTK_InteractableObject`, providing a slightly different mechanic and visual from the existing immediate grab.

**Code In-progress**

- Created a new script class called `VRTK_ObjectLerp` that smoothly handles the lerp position and rotation of an object over time.
- You can attach this script to an `VRTK_InteractableObject`, which then will set itself up to use the `VRTK_ObjectLerp`.
- When an object is grabbed by `VRTK_InteractGrab` this class checks on the grabbing `VRTK_InteractableObject` to see if there is a valid / configured `VRTK_ObjectLerp` available, and if the object is set to `lerpTransformOnGrab`.
- If the `VRTK_InteractableObject` is setup to lerp on grab, then rather than complete the grab as normal, the `VRTK_InteractGrab` method calls back to a new method on the `VRTK_InteractableObject` that will start the lerp to position, i.e. `StartLerpTransformOnGrab`.
- The `VRTK_InteractableObject` will then call the `VRTK_ObjectLerp` to start a coroutine for the lerp to position, i.e. `DoObjectTranslation`.

**Not yet done, to be confirmed:**

- Once the `DoObjectTranslation` method completes, callback / notify the `VRTK_InteractableObject` that it's done.
- The `VRTK_InteractableObject` then calls the `VRTK_InteractGrab` script to grab the object again. Only this time it will tell the `VRTK_InteractGrab` somehow that we don't need to lerp, just do a normal / immediate grab.

**Other things to consider, as per our chat on Slack:**

- What to do if the object is ungrabbed mid-way, before completion:
: Move the object back to the start position.
: Or if it's pass the half way point complete the lerp.
: Or just drop the object where it is.
: Perhaps a combination, could have settings to specificy what you want to happen.
- From @bddckr: "Should work with every grab mechanic, but I think currently some of these things take at least 1 frame, so would be visible. Maybe instantiate a temporary copy and turn of visibility and collisions etc.":
: Not sure I understand what this is referencing yet.. perhaps I'll see this issue once the base code I've explained above is working.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.