- Home /
Camera orbit with mouse orbit - limits
Hi folks!
I'm trying to make a camera rotation system to rotate around a sphere with the mouse, and I started with the mouse orbit script found in the stardard assets.
The limitation of this script is than when I'm on the top of the sphere and move left and right, the camera doesn't shift but spin around itself.
I need a system that maintain the same behaviour on every position.
Any ideas?
Tnx a lot :)
Update: Here is an example of what I wanna do http://www.youtube.com/watch?v=OouBzirUZww&feature=related
Answer by deadshot · Oct 22, 2014 at 06:22 AM
using UnityEngine;
using UnityEngine;
using System.Collections;
//[AddComponentMenu("Camera-Control/Mouse drag Orbit with zoom")]
public class rotateonmouse : MonoBehaviour
{
public Transform target;
public float distance = 5.0f;
public float xSpeed = 120.0f;
public float ySpeed = 120.0f;
public float yMinLimit = -20f;
public float yMaxLimit = 80f;
public float distanceMin = .5f;
public float distanceMax = 15f;
public float smoothTime = 2f;
float rotationYAxis = 0.0f;
float rotationXAxis = 0.0f;
float velocityX = 0.0f;
float velocityY = 0.0f;
// Use this for initialization
void Start()
{
Vector3 angles = transform.eulerAngles;
rotationYAxis = angles.y;
rotationXAxis = angles.x;
// Make the rigid body not change rotation
if (rigidbody)
{
rigidbody.freezeRotation = true;
}
}
void LateUpdate()
{
if (target)
{
if (Input.GetMouseButton(1))
{
velocityX += xSpeed * Input.GetAxis("Mouse X") * 0.02f;
velocityY += ySpeed * Input.GetAxis("Mouse Y") * 0.02f;
}
rotationYAxis += velocityX;
rotationXAxis -= velocityY;
rotationXAxis = ClampAngle(rotationXAxis, yMinLimit, yMaxLimit);
Quaternion fromRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 0);
Quaternion toRotation = Quaternion.Euler(rotationXAxis, rotationYAxis, 0);
Quaternion rotation = toRotation;
Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
Vector3 position = rotation * negDistance + target.position;
transform.rotation = rotation;
transform.position = position;
velocityX = Mathf.Lerp(velocityX, 0, Time.deltaTime * smoothTime);
velocityY = Mathf.Lerp(velocityY, 0, Time.deltaTime * smoothTime);
}
}
public static float ClampAngle(float angle, float min, float max)
{
if (angle < -360F)
angle += 360F;
if (angle > 360F)
angle -= 360F;
return Mathf.Clamp(angle, min, max);
}
}
There is something wrong with this code... You don't use fromRotation for nothing?
Your answer
Follow this Question
Related Questions
Smooth transition of camera targets 2 Answers
Rotating object with GUI Elements present 2 Answers
Mouse/Wacom stylus drag not working. 1 Answer
orbit mouse camera animation movement script 1 Answer
Mouse Orbit snapping issues 0 Answers