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 /
  • Help Room /
avatar image
0
Question by Mattorious · Jul 14, 2020 at 04:29 PM · uimathanglesradial

Dragging a circle with mouse input into worldspace UI - Getting the correct angles

Howdy folks, I'm struggling with what should be a pretty simple math problem.

I'm essentially trying to create a system to drag a handle in a radial UI element that's positioned in world space. Hopefully, you can kinda see what I mean in this gif:

GIF

So, it's a bit hard to see in the gif, but the problem seems to be that every frame the angle flip flops between two angles on the circle. So, somewhere in the code the math is almost working, because I'm getting a passable result minus the flip-flopping in the positions. I'm thinking that there's maybe an extraneous calculation happening here every other frame causing the rotation to jump back somehow. But I can't find anything in the code that would cause that, so I'm kinda at a loss.

I'm using eulerangles here instead of quaternions cause they're easier to understand conceptually.

This is the code that calculates the angle I'm looking for based on the mouse input. I have a bad habit of not marking up code until I need to show it to someone, so it might be a bit confusing. If you have any questions please let me know.

 using UnityEngine;
 using System.Collections;
 using UnityEngine.EventSystems;
 using UnityEngine.UI;
 
 public class RadialSlider: MonoBehaviour
 {
     //angle of dragged mouse drag input
     public float angle;
 
     //player controlled camera input
     public CameraMouseInput mouseInput;
 
     //ui element we're outputting angles to
     public DegreeIndicator dI;
 
     //checking if lclick is held down
     public ClickHeld cH;
 
     Camera mainCam;
     // mainloop
     public void Update()
     {
         mainCam = Camera.main;
         var input = FindObjectOfType<StandaloneInputModule>();
         
         if(input != null ) //if input exists
         {                
             if (cH.held) //if player is holding down lclick
             {
                 mouseInput.CanOrbit = false;                    
                 Vector2 localPos; // Mouse position  
                 
                 //Suspected problem with this line in particular
                 RectTransformUtility.ScreenPointToLocalPointInRectangle(GetComponent<RectTransform>(),  Input.mousePosition, mainCam, out localPos);
 
                 //localPos = Input.mousePosition;
                 // local pos is the mouse position.
                 angle = (Mathf.Atan2(-localPos.y, localPos.x) * 180f / Mathf.PI + 180f);
 
                 //assigning angle to UI indicator
                 dI.desiredAngle = (int)(angle);
                 
                 //currentValue = angle;
                 //Debug.Log(localPos+" : "+angle);    
             }
             else
                 mouseInput.CanOrbit = true;    
         }
         else
             UnityEngine.Debug.LogWarning( "Could not find GraphicRaycaster and/or StandaloneInputModule" );        
     }
 }

I've adapted the code from this wonderful person's work. Without them I probably wouldn't have gotten so far.

Thanks so much for any help! I appreciate all that you amazing people do for this community :)

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

0 Replies

· Add your reply
  • Sort: 

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

300 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 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

Math: How to rotate a wheel by drag&drop (Canvas, 2D)? 0 Answers

Rotating a game object to match the surface of a 2D Line 0 Answers

How to detect when an object is within an arc? 2 Answers

How to tell if a RectTransform is within the visible area of a ScrollRect 1 Answer

Image fillAmount from 0.9 to 1 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