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 poolts · May 27, 2016 at 10:18 PM · transformscalepinch

Scale Transform Axes (Non-uniform) With Pinch

Hi all,

I'm trying to scale a transform axes non-uniformly with pinch gesture. At the moment I've managed to do it uniformly by pinching anywhere on the screen, but I want it to scale in the x, y or z dependant on where you pinch around the gameobject.

So for instance if your fingers were to start diagonally to the gameobject and you were to pinch outwards the gameobject would increase scale both in the x and y (see image below) and visa-versa if you were to move them inwards. Futhermore, if your fingers were to start perfectly vertical to the gameobject it would only scale in the y axis.

alt text

I'm guessing I need to get the dot product between the gameobject transform and the vector between finger 1 and 2 and based on that scale in the different axes, but I'm not sure if this is the best way to go about it. Note, we can disregard the z axis for this question.

Any help would be most appreciated.

Here's my code so far (which does uniform scale):

 if(Input.touchCount == 2)
 {
     float deltaMagnitudeDiff = 0f;
 
     // Store both touches.
     Touch touchZero = Input.GetTouch(0);
     Touch touchOne = Input.GetTouch(1);
 
     // Find the position in the previous frame of each touch.
     Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
     Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
 
     // Find the magnitude of the vector (the distance) between the touches in each frame.
     float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).sqrMagnitude;
     float touchDeltaMag = (touchZero.position - touchOne.position).sqrMagnitude;
 
     deltaMagnitudeDiff = -(prevTouchDeltaMag - touchDeltaMag) * 0.1f;
 
     transform.localScale = Vector3.Lerp(transform.localScale, transform.localScale * deltaMagnitudeDiff, Time.deltaTime);
 } 

pinchexample.png (20.2 kB)
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
0

Answer by elenzil · May 27, 2016 at 11:13 PM

interesting. i guess i would take the unit axis vector for each of XYZ (ie Vector3.Right, Vector3.Up, etc) and project those into 2D screenspace, and then DOT each of those vectors with your finger vector, and build a non-uniform scale in local-space with the results.

looks like unity doesn't supply a routine for transforming a vector from local to screen-space, but you could do it with Camera.WorldToScreenPoint if you also project a 4th point, the origin. (Vector3.Zero).

to account for the scaling which the axes vectors will undergo, i'd also consider uniformly scaling the 3 projected axes vectors so that the largest of them has unit-length. ie, find which one is longest, and scale all three of them by 1/magnitude(the longest one). you would do this before the dot-product.

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

48 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

Related Questions

Setting pivot to the middle of two touches - 2D project 0 Answers

Gradually scale platform? 4 Answers

Can the insides of a gameObject affect its transform? 0 Answers

GameObject Scale as World Coordinates (Units)? 1 Answer

How to export .OBJ from Editor with rescaled mesh? 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