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
2
Question by urwrldn3d · Jun 06, 2012 at 09:28 PM · c#touchscreenorbit

Mouse orbit on a touchscreen

I've got my script working on the touchscreen and it orbits very nicely. Just one slight problem - After I've swiped or made a movement, then remove my finger from the touchscreen and replace my finger in a different spot on the screen the camera moves to that spot. If I touch generally in the same location that I removed my finger from, the camera will move ever so slightly. So basically the camera is moving wherever I touch the screen. I'd like it to not start moving until I start dragging (Just like the mouse performs on the pc).

Can anyone help me out with this? Thanks y'all.

 using UnityEngine;
 
 using System.Collections;
 
  
 
 public class CameraMove : MonoBehaviour {
 
 public Transform target;
 
 public float distance= 1.5f;
 
 public int cameraSpeed= 5;
 
  
 
 public float xSpeed= 175.0f;
 
 public float ySpeed= 75.0f;
 
 public float pinchSpeed;
 
 private float lastDist = 0;
 
 private float curDist = 0;
 
  
 
 public int yMinLimit= 10; //Lowest vertical angle in respect with the target.
 
 public int yMaxLimit= 80;
 
  
 
 public float minDistance= .5f; //Min distance of the camera from the target
 
 public float maxDistance= 1.5f;
 
  
 
 private float x= 0.0f;
 
 private float y= 0.0f;
 
 private Touch touch;
 
  
 
 void  Start (){
 
     Vector3 angles= transform.eulerAngles;
 
     x = angles.y;
 
     y = angles.x;
 
  
 
    // Make the rigid body not change rotation
 
       if (rigidbody)
 
       rigidbody.freezeRotation = true;
 
 }
 
  
 
 void  Update (){
 
     if (target && camera) {
 
  
 
    //Zooming with mouse
 
    distance += Input.GetAxis("Mouse ScrollWheel")*distance;
 
    distance = Mathf.Clamp(distance, minDistance, maxDistance);
 
  
 
   
 
     if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) 
 
     {
 
         //One finger touch does orbit
 
         touch = Input.GetTouch(0);
 
         x += touch.deltaPosition.x * xSpeed * 0.02f;
 
         y -= touch.deltaPosition.y * ySpeed * 0.02f;
 
     }
 
     if (Input.touchCount > 1 && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)) 
 
     {
 
         //Two finger touch does pinch to zoom
 
         var touch1 = Input.GetTouch(0);
 
         var touch2 = Input.GetTouch(1);
 
         curDist = Vector2.Distance(touch1.position, touch2.position);
 
         if(curDist > lastDist)
 
         {
 
             distance += Vector2.Distance(touch1.deltaPosition, touch2.deltaPosition)*pinchSpeed/10;
 
         }else{
 
             distance -= Vector2.Distance(touch1.deltaPosition, touch2.deltaPosition)*pinchSpeed/10;
 
         }
 
  
 
         lastDist = curDist;
 
     }
 
      //Detect mouse drag;
 
    if(Input.GetMouseButton(0))   {
 
    
 
         x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
 
         y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;       
 
       }
 
       y = ClampAngle(y, yMinLimit, yMaxLimit);
 
               
 
         Quaternion rotation= Quaternion.Euler(y, x, 0);
 
         Vector3 vTemp = new Vector3(0.0f, 0.0f, -distance);
 
         Vector3 position= rotation * vTemp + target.position;
 
          
 
    transform.position = Vector3.Lerp (transform.position, position, cameraSpeed*Time.deltaTime);
 
       transform.rotation = rotation;      
 
     }
 
 }
 
  
 
 static float  ClampAngle ( float angle ,   float min ,   float max  ){
 
    if (angle < -360)
 
       angle += 360;
 
    if (angle > 360)
 
       angle -= 360;
 
    return Mathf.Clamp (angle, min, max);
 
 }
 
  
 
 }
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 urwrldn3d · Jun 06, 2012 at 09:51 PM 0
Share

No problemo.... Just hope someone can help me figure this one out.

avatar image Fattie · Jun 06, 2012 at 09:53 PM 0
Share

Done! :) But please TIC$$anonymous$$ and VOTE for any helpful answers! :--)

2 Replies

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

Answer by Fattie · Jun 06, 2012 at 09:52 PM

Ahh !

you're ALSO got

 if(Input.GetMouseButton(0))

in there.

That's no good. Because, for convenience, Input.GetMouseButton ALSO works with touch on iPads!!!!!

That's your only problem. Your code here

 if (Input.touchCount == 1 && etc...

is correct for touchscreens. But your mouse code is ALSO working with touchscreens, screwing you up!

it's that simple.

Hope it helps!


To be clear, just comment away this whole sectipn..

 if(Input.GetMouseButton(0))   {
         x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;
         y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;       
       }

Comment
Add comment · Show 3 · 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 urwrldn3d · Jun 06, 2012 at 10:11 PM 0
Share

Hey man, thanks so much... I'm really new to all of this, so I'm trying to comment out the part of the script you say I don't need. Can you just confirm for me which lines that I don't need? Thanks!

avatar image Fattie · Jun 07, 2012 at 06:16 AM 0
Share

sure! hope it helps

avatar image urwrldn3d · Jun 07, 2012 at 03:02 PM 0
Share

Thanks Fattie, that worked PERFECT!

avatar image
0

Answer by victorafael.com · Jun 06, 2012 at 10:17 PM

You can create a boolean isDragging on the class...

 bool isDragging = false;

and check on the Update:

 isDragging = Input.touchCount == 0;

and replace:

 if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) 
 {
     //One finger touch does orbit
     touch = Input.GetTouch(0);
     x += touch.deltaPosition.x * xSpeed * 0.02f;
     y -= touch.deltaPosition.y * ySpeed * 0.02f;
 }

for:

 if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) 
 {
   if(isDragging){
     //One finger touch does orbit
     touch = Input.GetTouch(0);
     x += touch.deltaPosition.x * xSpeed * 0.02f;
     y -= touch.deltaPosition.y * ySpeed * 0.02f;
   }
   isDragging = true;
 }
Comment
Add comment · Show 2 · 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 urwrldn3d · Jun 06, 2012 at 10:45 PM 0
Share

thanks... I'm not at the office anymore. Will try this in the A$$anonymous$$ to see if it will work.

avatar image Fattie · Jun 07, 2012 at 06:17 AM 0
Share

just for the record, that wouldn't work ! you're never unsetting the boolean, and there's no reason to do it anyway

the problem was just that he accidentally left in the $$anonymous$$ouse commands (which in fact also affect the touch commands)

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

6 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

The name 'Joystick' does not denote a valid type ('not found') 2 Answers

Distribute terrain in zones 3 Answers

Multiple Cars not working 1 Answer

How can I play audio while a non player controlled object is moving and stops playing when object stands still? 1 Answer

Player lives script help 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