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
3
Question by Element Zero · Oct 29, 2013 at 12:47 PM · touchsmoothmove an object

Moving object smoothly to touch location

A couple of days ago I've started learning how to use Unity for mobile games. In order to do that I'm trying to make a simple game in which a cube moves smoothly to wherever the user touches the screen. I came up with the following code:

 public float speed = 0.02f;

 void Update () {
     if (Input.touchCount > 0) {
         if (Input.GetTouch(0).phase == TouchPhase.Stationary || Input.GetTouch(0).phase == TouchPhase.Moved) {
             // Move cube smoothly to touch location
             transform.position = Vector3.Lerp(transform.position, new Vector3(Input.GetTouch(0).position.x * speed, Input.GetTouch(0).position.y * speed, 0), 5);
         }
     }
 }

However, when I touch the screen the cube simply disappears. I presume its moving to a location off screen but I don't understand why. I've been searching around for an answer for a while now but I can't seem to find any good solutions.

EDIT:

So I found the solution and its working perfectly. For anybody with the same problem:

 void Update () {
     if (Input.touchCount > 0) {
         // The screen has been touched so store the touch
         Touch touch = Input.GetTouch(0);
         
         if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved) {
             // If the finger is on the screen, move the object smoothly to the touch position
             Vector3 touchPosition = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 10));                
             transform.position = Vector3.Lerp(transform.position, touchPosition, Time.deltaTime);
         }
     }
 }
Comment
Add comment · Show 2
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 falconer · Oct 12, 2014 at 04:03 AM 0
Share

This article by The Game Contriver helped me solve this... $$anonymous$$ove Object To Tap/Click Position

avatar image nonehill · Nov 04, 2014 at 08:54 AM 0
Share

Awesome! I tried to find solution over 24 hours until I found this. Thank you!

1 Reply

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

Answer by meat5000 · Oct 29, 2013 at 12:51 PM

Firstly, you are feeding screen coordinates in to your Lerp.

Try the ScreenToWorldPoint and other camera functions. Use it to convert a screen position into a world space coordinate.

Secondly, you use Lerp incorrectly. the t factor only works between 0 and 1. 0 Represents to 'from' field, 1 represents the 'to' field and values between 0->1 return a point between from and to. As you have t set to 5 it will simply return the 'to' value straight away as anything >1 is read as 1.

Comment
Add comment · Show 4 · 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
avatar image Element Zero · Oct 29, 2013 at 01:16 PM 0
Share

Ok I think I implemented your answer but the same problem still occurs. Could you take a look at my edit and tell me if I'm doing something wrong?

avatar image Crystalline · Oct 29, 2013 at 01:46 PM 0
Share

Its because you are telling the object to follow touch posiiton, XYZ, since you are 2D you must delete an axis.

avatar image Element Zero · Oct 29, 2013 at 01:53 PM 0
Share

But I include 0 as the z-position to make it a Vector3 so that should not be a problem right? Do you mean I should use transform.position = Vector2.Lerp(transform.position, touch.position, Time.deltaTime)? I'm using that now but the same problem still occurs. And any ideas on how to use ScreenToWorldPoint with a Vector2?

avatar image meat5000 ♦ · Oct 29, 2013 at 02:53 PM 0
Share

touch.position is in screen space. Use the function I linked to retrieve the world space position underneath the screen position.

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

21 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

Related Questions

Camera not moving 'smoothly' on drag. 2 Answers

Moving object with finger move 1 Answer

camera smooth stop (continuously sliding), on touch end 0 Answers

Inertia Scrolling Touch 1 Answer

How can i drag objects smoothly with touch? Please help me with this code! 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