Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 cammymcp · Nov 04, 2016 at 10:19 AM · rotationuivrimagelock

Locking Rotation of UI Elements Relative to Canvas (VR)

I'm having trouble creating directional target indicators on the player's UI. I'm developing for HTC Vive so the UI Canvas is defined in world space as a child to the main VR camera so that it is always in view when the player moves his/her head.

Essentially, the code spawns arrows at the edges of the screen pointing to off-screen targets. The code rotates these arrows based on the angle between the centre of the screen and each target's screen-space coordinates.

     // Get screen centre
         Vector3 centre = new Vector3(Screen.width, Screen.height, 0) / 2;
     
    // Offset screen pos by centre to put (0, 0) at the centre of screen rather than bottom left
        screenPos -= centre;
     
   // Find angle for indicator rotation
       float angle =  Mathf.Atan2(screenPos.y, screenPos.x) + 90.0f;
       angle *= Mathf.Rad2Deg;
         
       // Calculate gradient using screen position
           float m = screenPos.y / screenPos.x;
     
       // Bring screen bounds in by a tenth
           Vector3 screenBounds = centre * 0.9f;
     
                     // Which side of the screen is it off?                
                    ... calculate screen position for arrow
     
                 // We now have the position in screen space to instantiate our indicator
             GameObject newIndicator = GetIndicator(); // instantiates new arrow as child of canvas
             newIndicator.transform.localPosition = screenPos;
             newIndicator.GetComponent<RectTransform> ().rotation = Quaternion.Euler (0, 0, angle);

My problem is that despite attempting to lock the rotation of the arrows on the x and y axes (always want them to be directly facing the player and just spin based on direction) the arrows will rotate in the x and y at runtime. Since they are spawned as children of the canvas I need them to stay at zero rotation relative to it, but something is changing it at runtime.

 public class IndicatorScript : MonoBehaviour {
 
     float lockRot;
     RectTransform transf;
 
     // Use this for initialization
     void Start () 
     {
         transf = GetComponent<RectTransform> ();
         lockRot = 0.0f;
     }
     
     // Update is called once per frame
     void Update () 
     {
         // Lock rotation on x and y axes to 0
         transf.rotation = Quaternion.Euler (lockRot, lockRot, transform.rotation.eulerAngles.z);
     }
 }

Any help would be appreciated!

Comment
Add comment · Show 1
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 pfreema1 · Jun 07, 2017 at 09:10 PM 0
Share

Hey did you ever figure this one out? I've run into a similar problem.

1 Reply

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

Answer by cammymcp · Jun 10, 2017 at 10:19 AM

Thanks @pfreema1 for the comment reminding me of this question. I did figure this out and it was due to the fact that I was editing the transform.rotation property of the arrow. This value is its global rotation, which messes up when its parent rotates.

What you want to edit is its localRotation property, this is its rotation relative to its parent. I simply didn't know that this one existed until it was pointed out to me!

Hope this helps others with this problem.

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Rotate world space UI element on Z axis towards gameobject. 0 Answers

Simple way to fit rotated UI element to parent 2 Answers

Rotate world space UI element on Z axis towards gameobject. 1 Answer

Fade in with CrossFadeAlpha 1 Answer

Changes(made by a script) to my Image are not visible in either the Gameview or the Scene View, but are visible in the Inspector. 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