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
1
Question by BANANEUHBA · Dec 12, 2012 at 03:14 AM · c#rotationangle

Getting the rotation of an object does not return correct rotation

So I have a box with script BoxScript on it. BoxScript looks like this:

 void Update () {
 float fdegree = radianToDegree(transform.rotation.y);
 Debug.Log(fdegree);
 }
     
 float radianToDegree(float angle){
 return angle * (180.0f / Mathf.PI);
 }

Whenever I run the script and turn the box using the editor in game it does not display what the real degree is. Can someone help me with this?

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
7

Answer by aldonaletto · Dec 12, 2012 at 03:37 AM

This is a recurrent problem in Unity: the Inspector fool us by showing transform.localEulerAngles under the caption Rotation - almost everybody (me included) thinks at first that transform.rotation holds the rotation angles around the world axis, but it doesn't: transform.rotation is a quaternion, and its XYZW components form a normalized Vector4 - thus none of them can even dream about be greater than 1.
Ok, you could replace transform.rotation.y by transform.localEulerAngles.y and forget about Mathf.PI (localEulerAngles returns degrees directly), but this probably would return weird values at certain ranges - that's because the conversion quaternion->euler may return several different XYZ combinations, all of them correct, but frequently different from what we expect. A simple example: the Euler angles (0,180,0) mean the object rotated 180 degrees around the Y axis, but the same rotation could be achieved with the Euler angles (180,0,180) and several other combinations - and Unity often returns the "wrong" combination.
As a rule of thumb, if the other angles are 0, you will get the expect results (kind of, because an object rotated -10 degrees may return 350 instead of -10). A possible solution, which works even when there are small angles in X and Z, is the following:

 float AngleAboutY(Transform obj){
   Vector3 objFwd = obj.forward;
   float angle = Vector3.Angle(objFwd, Vector3.forward);
   float sign = Mathf.Sign(Vector3.Cross(objFwd, Vector3.forward).y);
   return angle * sign;
 }

Vector3.Angle returns the absolute angle between the two vectors (in the plane formed by them), and the Y sign of the cross product of both vectors is used to correct its polarity (swap the Cross arguments if the polarity is opposed to what you expect).
If the angles about X and/or Z are different from zero, the result will get progressively more wrong - thus, try to keep these angles at zero.

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.

Follow this Question

Answers Answers and Comments

11 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

Related Questions

Flip over an object (smooth transition) 3 Answers

Having Trouble with Vector3.Angle 1 Answer

How to smoothly rotate an object through just one axis 1 Answer

Calc angle. 1 Answer

Applying force with respect to angle with the ground? 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