- Home /
Touch input problem
Hello I am making a little configurator. I want to build it for my android device. The little problem is about the touch input. I use one finger swipe to orbit camera and two for pinch zoom. The problem is that when I interact with any of my gui elements, whether it is a slider or a button, I still orbit my cam. How can I disable the touch check for certain areas of my screen? Or maybe layer mask for my rayTrace for selection.. What is the right way to do that? Here is my cam script:
using UnityEngine; using System.Collections;
public class TouchControls : MonoBehaviour {
public float tumbleSensitivity = 0.3f; //NB. This value should be adjusted until a natural result is achieved. It affects the amount the camera will tumble around the object as a swipe takes place.
public Transform pivotPoint; //this should be the location the camera tumbles around
public bool naturalMotion = true; //this determines whether a left swipe will make the camera tumble clockwise or anticlockwise around the object
private GameObject camParent; //this will be the rotating parent to which the camera is attached. Rotating this object will have the effect of making the camera a specified location.
private Vector2 oldInputPosition; //records the position of the finger last update
public float perspZoomSpeed = 0.5f;
void Start ()
{
Transform originalParent = transform.parent; //check if this camera already has a parent
camParent = new GameObject ("camParent"); //create a new gameObject
camParent.transform.position = pivotPoint.position; //place the new gameObject at pivotPoint location
transform.parent = camParent.transform; //make this camera a child of the new gameObject
camParent.transform.parent = originalParent; //make the new gameobject a child of the original camera parent if it had one
}
// Update is called once per frame
void Update ()
{
//TOUCH
if (Input.touchCount == 2)
{
Touch touchZero = Input.GetTouch(0);
Touch touchOne = Input.GetTouch(1);
Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
float deltaMagDiff = prevTouchDeltaMag - touchDeltaMag;
camera.fieldOfView += deltaMagDiff * perspZoomSpeed;
camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 12.0f, 50.0f);
}
if(Input.touchCount < 2)
{
foreach (Touch touch in Input.touches)
{
if (touch.phase == TouchPhase.Began && touch.fingerId == 0)
{
oldInputPosition = touch.position;
}
if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)
{
if (touch.fingerId == 0)
{
float xDif = touch.position.x - oldInputPosition.x; //this calculates the horizontal distance between the current finger location and the location last frame.
if (!naturalMotion){xDif *= -1;}
if (xDif != 0){camParent.transform.Rotate (Vector3.up * xDif * tumbleSensitivity);}
oldInputPosition = touch.position;
}
}
if (touch.phase == TouchPhase.Ended && touch.fingerId == 0)
{
oldInputPosition = touch.position;
}
}
}
//MOUSE
if (Input.GetMouseButtonDown(1))
{
oldInputPosition = Input.mousePosition;
}
if (Input.GetMouseButton(1))
{
float xDif = Input.mousePosition.x - oldInputPosition.x;
if(!naturalMotion){xDif *= -1;}
if(xDif != 0){camParent.transform.Rotate(Vector3.up * xDif * tumbleSensitivity);}
oldInputPosition = Input.mousePosition;
}
if (Input.GetMouseButtonUp (1))
{
oldInputPosition = Input.mousePosition;
}
}
}
Your answer
Follow this Question
Related Questions
I need touch input example 1 Answer
Help In Making a SphereCast for 3D Tire! Working RayCast Script included! 0 Answers
android touch optimization issue 1 Answer
How to enable multiple button presses on a touchscreen virtual button control scheme 1 Answer
Converting Input.getAxis("Horizontal") to touch screen input. 0 Answers