Git Product home page Git Product logo

vivegrip's Introduction

Vive Grip

Vive Grip helps you to highlight, grab, and interact with game objects using SteamVR. It leverages Unity's physics engine with a simple interface that abstracts the powerful ConfigurableJoint component. Examples are included for creating weighted objects, levers, dials, guns, and more.

See the package directory for package details, quick start instructions, and tutorials.

See the examples directory for example usage and scenes.

See the API doc for the code tools summarized.

See the Releases directory for unitypackage files.

Why use Vive Grip?

  • Fully supports Unity's physics systems for realistic interactions
  • Intuitive set up with plenty of configurable Inspector options
  • Supports HTC Vive, Oculus Rift, Windows Mixed Reality, and more
  • Extensive plugin system to do custom logic on interactions and grab events
  • Joyful experience for both devs and players

If you like Vive Grip and want to show your support, please check out the Asset Store page. It's an easy way to show your appreciation and get stable updates with Asset Store integration. I also love it when you leave a rating or review because it helps other people find the project.

vivegrip's People

Contributors

fpga68k avatar jscott avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vivegrip's Issues

Design two-handed interactions

You can grab a single object with multiple grip points. This isn't necessarily bad but it might be really weird in some situations as well. You can end up with floating objects when two joints are attached.

Should new joints override the old ones? Perhaps vice versa? Maybe reduce the grip radius so it doesn't end up floating without fumbling? It definitely needs more research.

Messages not sent when destroying scripts

When you press the button in the hand will become stuck in "primed" mode because the grip point never unhighlights the object.

This similarly happens when you pull the bubbler away from your hand when you're triggering it. The old grip never gets the chance to tell it to stop and you can drop it while it's still firing.

Rename to "VR Grip"

I've tested this with Oculus Rift+Touch and it works. I should probably change the name to make that obvious. Marketing is important! Or so I hear.

I cannot move a object

I have tested your script in many objects and it worked well. But today I try to grab a bird model, this model settings are the same as other objects, but I cannot grab it and it won't become highlight when I touch it.
bird
Could you give me any advice? Thank you very much!

`enabled` hasn't really been fully considered for Vive Grip objects

What happens if you disable a ViveGrip_Interactable or ViveGrip_Grabbable component? Do they stop sending messages? Or maybe merely stop doing the default behaviour? Or maybe we just leave it entirely up to the user's custom code? Probably that middle one. Either way it's far reaching enough that a little research and design needs to be done. I bet its not entirely consistent or predictable right now, whatever it currently does.

Sticky grip

Sometimes the grip won't let go. This is particularly visible with the lever example for some reason.

ViveGrip_Grabber is the only object script that isn't attached to the object

Highlighting is easy to enable or disable because it's on the object that will likely toggle it. Grabbing isn't so easy because it's on the Grip Point and the only access you have is through the method that triggers it. There's no reason that "grabbing" and object couldn't be the object attaching itself to the Grip Point. Needs more investigation whether this is sane or not.

On the flip side, it's difficult to disable a ViveGrip_Highlighter because it doesn't exist until the game runs. The highlight extender example gets around this by polling forever which isn't great. This might be another issue in itself but it seems related in consideration.

grab object and move player question

When using Controller grab object and using other Controller move player(myself avatar),The object fell off and did not move with the player. what should I do? thanks!

Snap to Orientation does nothing when Apply Grip Rotation is disabled

if (grabbable.applyGripRotation) {
  ViveGrip_JointFactory.SetAngularDrive(joint, desiredObject.mass);
}
if (grabbable.snapToOrientation) {
  ViveGrip_JointFactory.SetTargetRotation(joint, desiredObject, grabbable.localOrientation, controllerRotation);
}

The angular drive never gets set if we don't apply grip rotation. If this is intentional then I should probably present the option as an enum (No Rotation, Grip Rotation, Grip Rotation + Set Orientation) to avoid a confusing permutation. If this isn't intentional then it needs fixing.

Gentle rotations instead of snapping to orientation

Anchors should be able to handle rotations around an anchor with nice slerp animations. Similar to anchor #1, I just couldn't get the complexities of ConfigurableJoint figured out at the time. This should be addressed again because the snapping is violent and is likely to toss stacked objects around.

Custom mesh for grip collision object

Right now I use "Grip Sphere" because it's easy and performant. However, some users might want the option of using a custom mesh because it's going to be a lot more accurate and intuitive for their custom Grip Point. This should be pretty easy, you just need to swap out the Collider, and could be another customization option on the Grip Point.

Multiple configurable anchors

Sometimes you have multiple handles or need to flip things around depending on the hand. Anchors already pair with orientation configuration so why not have a proper ViveGrip_Anchor script on your ViveGrip_Grabbable object that gets detected automatically? It'd be a cleaner implementation than a drop down at the minor expense of being less immediately obvious.

Lever anchor misleading

I have a suspicion that the anchor of the lever in the demo scene is actually a bit broken. I don't think it's large enough or rotates properly with the object or something. Needs looking into.

Rotations

Aren't handled terribly well. The close attachment means that rotating your controller is really the only way to strongly rotate an object. That's weird when it comes to levers and wheels.

Add a FAQ in files somewhere

I've had people come to me with issue #11 more than once. The way SketchUp handles things makes it especially likely to happen. To make my life easier, I should probably include this somewhere. Unfortunately I can't rely on the wiki because Asset Store users will never see it. Maybe a FAQ.md?

Two grips on one object has weird side effects

There are so many weird problems cropping up around two hands grabbing a single object:

  • Floating objects
  • Sticking interaction triggers
  • Vibrations not working for a controller

And many more if I actually looked for them, I bet. It's probably best to just disable grabbable while being held.

Motor feedback

I can probably do something with the motor to make it feel better to pick things up. The archery demo in the Lab is a great example.

How to integrate with Valve's InteractionSystem?

Valve have updated their SteamVR plugin with their own InteractionSystem which enables controller hint text, UI menu interactions, teleportation locomotion and also grabbing and throwing. However, their grabbing and throwing does not respect Unity physics like this implementation does (all of Valve's throwable objects pass through world geometry when you hold them).

If you want to take advantage of what their InteractionSystem offers, you need to use their new camera rig, and this seems to break ViveGrip.

I watched your Youtube tutorial and added the Vive Grip_Controller Handler and Vive Grip_Grip Point to the Attach_ControllerTip of both Hand1 and Hand2 in the new rig. I also added the Steam VR_Tracked Object to the hands (something no longer required in the InteractionSystem) and assigned them to the Vive Grip_Controller Handler. I then tried to move a few objects in your example scene, but nothing happened (even if I added the new interactable script to them to get Valve's highlights, etc).

Perhaps I missed a step in the above procedure or perhaps there is another source of the incompatibility. Any assistance would be greatly appreciated!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.