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 yusufdemir2012 · Sep 27, 2021 at 04:07 PM · transformscale

Adjusting custom 2D transform gizmos to work with rotated shapes

I am trying to coding 2D transform gizmos with Rotate and Scale options. There are only two button. One is for rotate the object and another one is for scale the object in local space:

https://gfycat.com/celebratedpleasantharborporpoise

If rotation z (angle) of the target shape is equal to 0, then there is no problem. But if I rotate the object, then local scaling is not working correctly (As you can see in gif).

My Code:

 using UnityEngine;
 
 public class Test : MonoBehaviour
 {
     //Shape
     [Header("Shape")]
     public Transform shapeTransform;
 
     //Rotate
     [Header("Rotate")]
     public RectTransform rotateButtonRectTransform;
     private Vector3 rotateButtonDragOffset;
     private bool rotateButtonDown;
 
     //Scale
     [Header("Scale")]
     public RectTransform scaleButtonOriginRectTransform;
     public RectTransform scaleButtonRectTransform;
     public float scaleMultiplier = 0.005f;
     private Vector3 scaleButtonDragOffset;
     private Vector3 oldScale;
     private Vector3 scaleButtonPosition;
     private bool scaleButtonDown;
 
     //General
     public RectTransform handleTransform;
 
     public void OnRotateButtonDown()
     {//Firing by EventTrigger
         rotateButtonDragOffset = rotateButtonRectTransform.position - Input.mousePosition;
         rotateButtonDown = true;
     }
 
     public void OnRotateButtonUp()
     {//Firing by EventTrigger
         rotateButtonDown = false;
     }
 
     public void OnScaleButtonDown()
     {//Firing by EventTrigger
         scaleButtonDragOffset = scaleButtonRectTransform.position - Input.mousePosition;
         oldScale = shapeTransform.localScale;
         scaleButtonPosition = scaleButtonRectTransform.position;
         scaleButtonDown = true;
     }
 
     public void OnScaleButtonUp()
     {//Firing by EventTrigger
         scaleButtonDown = false;
         scaleButtonRectTransform.position = scaleButtonPosition;
     }
 
     private void Update()
     {
         //Rotate
         if (rotateButtonDown)
         {
             Vector3 targetPosition = Input.mousePosition + rotateButtonDragOffset;
             Vector3 pos = Vector3.Normalize(targetPosition - handleTransform.position);
             handleTransform.eulerAngles = new Vector3(0f, 0f, Mathf.Atan2(-pos.x, pos.y)) * Mathf.Rad2Deg;
 
             //Set rotation of shape
             var eulerAngles = shapeTransform.eulerAngles;
             eulerAngles.z = handleTransform.eulerAngles.z;
             shapeTransform.eulerAngles = eulerAngles;
         }
 
         //Scale
         if (scaleButtonDown)
         {
             scaleButtonRectTransform.position = Input.mousePosition + scaleButtonDragOffset;
 
             Vector3 dif = scaleButtonPosition - scaleButtonRectTransform.position;
 
             Vector2 scale = new Vector2(
                 oldScale.x + (dif.x * scaleMultiplier),
                 oldScale.y + (-1f * (dif.y * scaleMultiplier))
                 );
 
             //Set scale of shape
             shapeTransform.localScale = new Vector3(scale.x, scale.y, 1f);
         }
 
         //Scale and rotate gizmo
         ScaleAndRotateGizmo();
     }
 
     private void ScaleAndRotateGizmo()
     {
         var distance = Vector3.Distance(scaleButtonOriginRectTransform.position, scaleButtonRectTransform.position);
         scaleButtonOriginRectTransform.localScale = new Vector3(1f, distance * 0.004f, 1f);
         Vector3 targetPosition = scaleButtonRectTransform.position;
         Vector3 pos = Vector3.Normalize(targetPosition - scaleButtonOriginRectTransform.position);
         scaleButtonOriginRectTransform.eulerAngles = new Vector3(0f, 0f, Mathf.Atan2(-pos.x, pos.y)) * Mathf.Rad2Deg;
     }
 }


[1]: https://gfycat.com/celebratedpleasantharborporpoise

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

164 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

Related Questions

Problems with scale and rotation 2 Answers

Scale script don´t work 0 Answers

How do I set the global scale of an object in a transform hierachy? 3 Answers

Scaling width/height of a character's head/body 5 Answers

How can i get the total scale of an object? 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