Question by
wolfenstien98 · Jun 15, 2016 at 08:18 PM ·
c#cameracamera-movement
How to improve smooth camera script.
I've been making a script for making a camera orbit around game object. But it has some problems, that I'm hoping you guys can help me with fixing them.
When the camera is rotated too much to the side it skips around to rotating the other way around.
When the GameObject isn't at (0, 0, 0) the cameras path is not circular.
When the camera isn't on 0 in the Y axis it doesn't stay in the same spot on the Y axis
Here is the Script
using UnityEngine;
using System.Collections;
public class CameraOrbit : MonoBehaviour {
public GameObject target;
public float speedX = 7.5f;
public float speedY = 5.0f;
public float scrollSpeed = 500.0f;
public float radius = 20.0f;
public float radiusMin = 10.0f;
public float radiusMax = 25.0f;
public float angleX = 0.0f;
public float angleY = 0.0f;
public float yMax = 1.0f;
public float yMin = -1.0f;
void Update() {
if (Input.GetMouseButton(0)) {
angleX -= Input.GetAxis("Mouse X") * Time.deltaTime * speedX;
angleY -= Input.GetAxis("Mouse Y") * Time.deltaTime * speedY;
}
radius -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * scrollSpeed;
angleX += Input.GetAxis("Horizontal") * Time.deltaTime * speedX;
angleY += Input.GetAxis("Vertical") * Time.deltaTime * speedY;
radius = Mathf.Clamp(radius, radiusMin, radiusMax);
angleY = Mathf.Clamp(angleY, yMin, yMax);
float x = Mathf.Cos(angleX) * radius + target.transform.position.x;
float y = Mathf.Sin(angleY) * (radius / Mathf.PI) + target.transform.position.y;
float z = Mathf.Sin(angleX) * radius + target.transform.position.z;
transform.position = Vector3.Slerp(transform.position, new Vector3(x, y, z), Time.deltaTime * 3.5f);
transform.LookAt(target.transform);
}
}
Comment