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();
    				}
    
    			}
    	
    	}
    }

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.
      }
}