- Home /
 
Touch swiper still rotating camera over a button
Hello!
i used a tutorial to create a swiper scrip to control my players rotation and the camera's rotation, problem is that even when over a GUI the screen is still rotating, if i swipe across a button.
can any one help i'm not sure what i'm doing wrong.
     using System.Collections;
     using System.Collections.Generic;
     using UnityEngine.EventSystems;
     using UnityEngine;
     
     public class Swiper : MonoBehaviour
     {
         public static Swiper instance;
         private Touch initTouch = new Touch();
         public Camera cam;
     
         private float rotX = 0f;
         private float rotY = 0f;
         private Vector3 origRot;
     
         public float rotSpeed = 0.5f;
         public float dir = -1;
     
     
     
         // Start is called before the first frame update
         void Start()
         {
             instance = this;
             origRot = cam.transform.eulerAngles;
             rotX = origRot.x;
             rotY = origRot.y;
         }
     
         // Update is called once per frame
         void FixedUpdate()
         {
                 foreach (Touch touch in Input.touches)
                 {
                     if (touch.phase == TouchPhase.Began)
                     {
                         initTouch = touch;
                     }
                     else if (touch.phase == TouchPhase.Moved)
                     {
                         //swiping
                         float deltaX = initTouch.position.x - touch.position.x;
                         float deltaY = initTouch.position.y - touch.position.y;
                         rotX -= deltaY * Time.deltaTime * rotSpeed * dir;
                         rotY += deltaX * Time.deltaTime * rotSpeed * dir;
                         rotX = Mathf.Clamp(rotX, -20f, 20f);
                         rotY = Mathf.Clamp(rotY, -20f, 20f);
 
                                         //changing the rotation for the character
                         WorldInteraction.instance.rigidbody.transform.localEulerAngles = new Vector3(0, rotY, 0);
                         cam.transform.eulerAngles = new Vector3(rotX, rotY, 0f);
                     }
                     else if (touch.phase == TouchPhase.Ended)
                     {
                         initTouch = new Touch();
                     }
     
                 }
         
         }
     }
 
              Answer by darksider2000 · May 17, 2020 at 12:59 PM
Hello,
You need to make a check whether or not your touch is over a ui element, and then your code will decide if it should rotate the camera.
Inside your foreach loop and before processing the touches make a check for if the current touch is over ui:
 foreach (Touch touch in Input.touches)
 {
       // This function will check if the touch with index fingerId is over an
       // EventSystems UI Object.
       if(!IsPointerOverGameObject(touch.fingerId)
       {
              // Here you make your initTouch, moving phase and everything else
              // you might need to rotate the camera.
       }
 }
 
              Your answer
 
             Follow this Question
Related Questions
The problem with the touch-control orbit view in the scene 0 Answers
Help with cameras and enabling/disabling GUItextures? 1 Answer
Camera being disabled by any GUI button 2 Answers
Camera Switching or Scene Changes? 3 Answers
Problem making a ruler 1 Answer