- Home /
Mouse Orbit with up/down based on target's up/down
Not sure if the title really explains what I mean.
I have a Mouse Orbit script that orbits the target. Which works fine.
But the object it targets is a spaceship. And in space there is no real up or down. So I want the camera to base it's up or down to the ships.
It works if I'm not moving the camera. It will then follow the ship just fine.
But once I start moving it, it flips to it's normal up/down.
Hope I'm making myself understandable here.
Here's the code:
var target : Transform;
var distance = 75;
var xSpeed = 1;
var ySpeed = 50;
var yMinLimit = -20;
var yMaxLimit = 80;
var distanceMin = 3;
var distanceMax = 100;
private var x = 0.0;
private var y = 0.0;
private var z = 0.0;
@script AddComponentMenu("Camera-Control/Mouse Orbit")
function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
z = angles.z;
// Make the rigid body not change rotation
//if (rigidbody)
// rigidbody.freezeRotation = true;
}
function LateUpdate () {
if (target && Input.GetMouseButton(0)) {
x += Input.GetAxis("Mouse X") * xSpeed * distance* 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
//y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, 0);
distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel")*5, distanceMin, distanceMax);
var hit : RaycastHit;
if (Physics.Linecast (target.position, transform.position, hit)) {
distance -= hit.distance;
}
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.rotation = rotation;
transform.position = position;
}
}
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);
}
It's a modified standard MouseOrbit code that comes with Unity. I have also tried a few different variations. And Google. Nothing has worked so far.
Also, another note. Eventough it's not massively important. I can live with it. When I start moving the camera, it stops rotating with the ship.
For example, if I turn left. The camera would also turn left. But not if I'm holding now the mouse button to move the camera. It will still follow the ship, just not turn with the ship. But as said, I can live with that.
I just want to make it follow the same up/down the ship have.
Thanks!
Your answer
Follow this Question
Related Questions
Mouse Orbit snapping issues 0 Answers
Mouse/Wacom stylus drag not working. 1 Answer
orbit mouse camera animation movement script 1 Answer
Camera orbit with mouse orbit - limits 1 Answer
Ray camera to Terrain goes Wrong. 1 Answer