- 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