Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • 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 ByteSheep · Apr 22, 2013 at 03:11 PM · rotationaxisspecific

Quaternion Rotations

Hi guys,

I've run into a bit of a problem with rotating an object in a certain way.

I'm trying to simply rotate an object around the x axis (rotating downwards and upwards) and around the global y axis (left and right) through user input.

The rotation around the local x axis works fine using:

 transform.Rotate(transform.right * Time.deltaTime * rotate_speed * InputY);

I then used the following for the y axis rotation:

 transform.Rotate(Vector3.up * Time.deltaTime * rotate_speed * InputX, Space.World);

Notice I used world space for the y rotation. (The user input is either -1 or 1)

This all works fine - I can press the up and down keys to make the object rotate on the x axis and the left and right keys to make the object rotate on the y axis.

However, when i rotate the object on both the x and y axis, the z axis also starts to change which makes the object rotate sideways.

This is really irritating, have been trying to figure out a solution the past 2 hours ;)
Sadly I don't really know much about using quaternions.. So, is there a way to either reset the z rotation each frame or a better way of only rotating along a specific axis?

Regards

Comment
Add comment
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

1 Reply

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

Answer by whydoidoit · Apr 22, 2013 at 03:14 PM

Well you could keep track of your desired rotation on X and Y in separate variables then:

    transform.rotation = Quaternion.Euler(xRotation,yRotation,0);
Comment
Add comment · Show 4 · 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 ByteSheep · Apr 22, 2013 at 03:33 PM 0
Share

Thanks for the reply, this seems like a great solution. Interestingly though the z axis will still rotate when using this code:

     var xRotation = transform.rotation.eulerAngles.x + (Time.deltaTime * rotate_speed * InputX);
     var yRotation = transform.rotation.eulerAngles.y + (Time.deltaTime * rotate_speed * InputY);
     
     transform.rotation = Quaternion.Euler(xRotation, yRotation, 0);

Do you have any idea why this could be?

avatar image whydoidoit · Apr 22, 2013 at 04:04 PM 0
Share

You have to not use transform.rotation.eulerAngles as your basic item (because gimbal lock etc can cause it to change).

$$anonymous$$eep an xRotation variable as a float etc.

avatar image ByteSheep · Apr 22, 2013 at 04:24 PM 0
Share

O$$anonymous$$ so I now have:

 xRotation += Time.deltaTime * rotate_speed * InputX;
 yRotation += Time.deltaTime * rotate_speed * InputY;
 
 transform.rotation = Quaternion.Euler(xRotation, yRotation, 0);

This seems to have fixed the problem of the object rotating sideways, but for some reason the z value is still changing between around 0 and 10.

Can't quite get my head around the reason why it is doing this, but overall the rotation now works quite nicely (Still getting bit of gimbal lock though).
Thanks for your help, my brain almost died.
Still the small question of why the z axis is not remaining at 0, but it seems like it doesn't interfere with the rotation like it did before.

avatar image whydoidoit · Apr 22, 2013 at 05:22 PM 0
Share

Well the other thing you could try is doing this:

     transform.rotation = Quaternion.AngleAxis(xRotation, Vector3.right) * Quaternion.AngleAxis(yRotation, Vector3.up);

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.

Follow this Question

Answers Answers and Comments

13 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

Related Questions

Freeze specific rotation axis of a child 2 Answers

Get rotation around (forward) axis ? 1 Answer

Object is rotating "step by step" 1 Answer

FBX model icon issues 0 Answers

Rolling a capsule lengthways, sideways and twisting with AddTorque 1 Answer


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