Implementing Advanced Touch Controls
To handle multi-touch input, you’ll extend the basic touch control script to include pinch-to-zoom functionality.
- Script for Advanced Camera Movement:
using UnityEngine;
public class TouchCameraController : MonoBehaviour
{
public Camera cam;
private Vector2[] oldTouchPositions = { null, null };
private Vector2 oldTouchVector;
private float oldTouchDistance;
void Update()
{
if (Input.touchCount == 0)
{
oldTouchPositions[0] = null;
oldTouchPositions[1] = null;
}
else if (Input.touchCount == 1)
{
if (oldTouchPositions[0] == null || oldTouchPositions[1] != null)
{
oldTouchPositions[0] = Input.GetTouch(0).position;
oldTouchPositions[1] = null;
}
else
{
Vector2 newTouchPosition = Input.GetTouch(0).position;
cam.transform.position += transform.TransformDirection((Vector3)((oldTouchPositions[0] - newTouchPosition) * cam.orthographicSize / cam.pixelHeight * 2f));
oldTouchPositions[0] = newTouchPosition;
}
}
else
{
if (oldTouchPositions[1] == null)
{
oldTouchPositions[0] = Input.GetTouch(0).position;
oldTouchPositions[1] = Input.GetTouch(1).position;
oldTouchVector = (Vector2)(oldTouchPositions[0] - oldTouchPositions[1]);
oldTouchDistance = oldTouchVector.magnitude;
}
else
{
Vector2 screen = new Vector2(cam.pixelWidth, cam.pixelHeight);
Vector2[] newTouchPositions = { Input.GetTouch(0).position, Input.GetTouch(1).position };
Vector2 newTouchVector = newTouchPositions[0] - newTouchPositions[1];
float newTouchDistance = newTouchVector.magnitude;
cam.transform.position += transform.TransformDirection((Vector3)((oldTouchPositions[0] + oldTouchPositions[1] - screen) * cam.orthographicSize / screen.y));
cam.orthographicSize *= oldTouchDistance / newTouchDistance;
cam.transform.position -= transform.TransformDirection((newTouchPositions[0] + newTouchPositions[1] - screen) * cam.orthographicSize / screen.y);
oldTouchPositions[0] = newTouchPositions[0];
oldTouchPositions[1] = newTouchPositions[1];
oldTouchVector = newTouchVector;
oldTouchDistance = newTouchDistance;
}
}
}
}
- Attach the Script to the Camera:
- Select the Main Camera in the Hierarchy window.
- Drag the
TouchCameraControllerscript onto the Main Camera in the Inspector window. - Ensure the Camera component is assigned to the
camvariable in the script.