- Home /
How can I fix the touch orbit rotation?
I already searched for an answer, but I can't find how to fix my script... I want my camera to orbit around an object sliding with touch, it already happens but the camera get off the rotation and keep changing the axis during the rotation and passing through the object... can anyone identify the error in my java script?
var target : Transform;
private var x:float;
private var y:float;
var xSpeed:float;
var ySpeed:float;
var pinchSpeed:float;
var distance:float = 10;
var minimumDistance:float = 5;
var maximumDistance:float = 100;
var yMinLimit = 0;
var yMaxLimit = 60;
var cameraSpeed =1.0;
private var touch:Touch;
private var lastDist:float = 0;
private var curDist:float = 0;
private var gameCamera:Camera;
function Start ()
{
gameCamera = Camera.main;
var angles= transform.eulerAngles;
x = angles.y;
y = angles.x;
if (rigidbody)
rigidbody.freezeRotation = true;
}
function Update ()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
Application.Quit();
}
if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
//One finger touch does orbit
touch = Input.GetTouch(0);
x += touch.deltaPosition.x * xSpeed * 0.02;
y -= touch.deltaPosition.y * ySpeed * 0.02;
}
if (Input.touchCount > 1 && (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved))
{
//Two finger touch does pinch to zoom
var touch1 = Input.GetTouch(0);
var touch2 = Input.GetTouch(1);
curDist = Vector2.Distance(touch1.position, touch2.position);
if(curDist > lastDist)
{
distance -= Vector2.Distance(touch1.deltaPosition, touch2.deltaPosition)*pinchSpeed/10;
}
else{
distance += Vector2.Distance(touch1.deltaPosition, touch2.deltaPosition)*pinchSpeed/10;
}
lastDist = curDist;
}
if(distance <= minimumDistance)
{
//minimum camera distance
distance = minimumDistance;
}
if(distance >= maximumDistance)
{
//maximum camera distance
distance = maximumDistance;
}
//Sets rotation
var rotation = Quaternion.Euler(y, x, 0);
//Applies rotation and position
transform.rotation = rotation;
//Sets zoom
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
//smoth!!!!!!
transform.position = Vector3.Lerp (transform.position, position, cameraSpeed*Time.deltaTime);
transform.LookAt(target.position);
y = ClampAngle(y, yMinLimit, yMaxLimit);
}
static function ClampAngle (angle : float, min : float, max : float) {
if (angle < -360)
angle += 360;
if (angle > 360)
angle -= 360;
return Mathf.Clamp (angle, min, max);
}
Comment