- Home /
Help with camera movement using mobile input
I have this script that is attached to my camera. It makes the camera navigate around a specified GameObject. The only problem I have is, it can only make the camera orbit on the X axis when I drag from either left or right, I want to also be able to orbit on the Y axis when I drag up/down.
Here's the code I'm working on:
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
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 > 0)
{
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.
float yDif = touch.position.y - oldInputPosition.y;
if (!naturalMotion){xDif *= -1;yDif *= +1;}
if (xDif != 0){camParent.transform.Rotate (Vector3.up * xDif * tumbleSensitivity);}
if (yDif != 0){camParent.transform.Rotate (Vector3.right * yDif * tumbleSensitivity);}
oldInputPosition = touch.position;
}
}
if (touch.phase == TouchPhase.Ended && touch.fingerId == 0)
{
oldInputPosition = touch.position;
}
}
}
Comment
Your answer
Follow this Question
Related Questions
How to rotate the camera with twist gesture 0 Answers
Rotate Camera around object with touch 0 Answers
Rotate Camera around Object 2 Answers
rotate camera on mobile 1 Answer
How can I fix the touch orbit rotation? 0 Answers