• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by toxxicxmodz · Nov 11, 2018 at 07:48 PM · rotationvrquaternionsteamrotation detection

Rotate object based on rotation of SteamVR Controller?

I am trying to make a dial on a machine (similar to ones you may find on a stove), where the user can rotate it, but only on one axis (in this case, the Z axis) and cannot move it from its location. Here is an image of my dial:

image

It should be noted that the scale of the model is 100, and it is a child of an empty GameObject whose scale is 1, which is a child of a model whose scale is 0.0075.

Here is the code I have so far:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Valve.VR.InteractionSystem;
 [RequireComponent(typeof(Interactable))]
 public class Dial914 : MonoBehaviour
 {
     Hand playerHand;
     [SerializeField] Rigidbody dial;
     // Use this for initialization
     void Start()
     {
     }
 
     private void HandAttachedUpdate()
     {
         dial.MoveRotation(Quaternion.Euler(0, 0, -playerHand.transform.rotation.z * transform.localScale.z)); //I actually don't know why we have to negate the hand rotation here, but it works
     }
 
     protected virtual void OnAttachedToHand(Hand hand)
     {
         playerHand = hand;
     }
 }



This mostly works, but you can only rotate it halfway around and it starts to get buggy if you try to go further than that.

Here is a gfycat of the result:

https://gfycat.com/DelectableOffensiveAllosaurus

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image toxxicxmodz · Nov 11, 2018 at 07:50 PM 0
Share

Here is an image of the dial in the inspector:

image

avatar image clint205 · Jan 31, 2019 at 02:01 AM 0
Share

@toxxicxmodz Hello! Can you go into a little more detail on how you ended up getting this working correctly. I've been struggling trying to get an accurate working dial for some time now. I tried your above code and it still produced an odd result.. it would stop rotating after a certain point.. plus the dial is always reset in this case to the position of the hand when ever you grab it again.. finally.. if you actually move your hand around (side to side, up and down) it will cause the dial to spin as well.

Really wanting an easy way to use the S$$anonymous$$mVR Interaction System with a Dial. Very surprised this isnt an included script.

2 Replies

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by toxxicxmodz · Nov 11, 2018 at 10:15 PM

Found the answer:

 Vector3 eulerRotation = new Vector3(0, 0, playerHand.transform.eulerAngles.z);
 
 transform.rotation = Quaternion.Euler(eulerRotation);
Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
1

Answer by clint205 · Jan 31, 2019 at 02:01 AM

@toxxicxmodz Hello! Can you go into a little more detail on how you ended up getting this working correctly. I've been struggling trying to get an accurate working dial for some time now. I tried your above code and it still produced an odd result.. it would stop rotating after a certain point.. plus the dial is always reset in this case to the position of the hand when ever you grab it again.. finally.. if you actually move your hand around (side to side, up and down) it will cause the dial to spin as well.

Really wanting an easy way to use the SteamVR Interaction System with a Dial. Very surprised this isnt an included script.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

157 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Using a VR controller as a joystick 0 Answers

How to compare two rotations from children objects 1 Answer

HTC Vive Controller Twist - Extracting Angular Velocity On The Correct Axis 0 Answers

Set a rotation relative to position between two objects. 0 Answers

How to write a script to disable position and rotation tracking for VR 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges