Hello everyone, I am 5kyLegend and I’m pretty new with Unity. I made a Sphere object (called MainCharacter) move (with success), and a camera (called myCamera) that follows the sphere, and that rotates using the mouse. The problem is this: when the camera changes position, the Sphere doesn’t follow Camera direction (if I press “Up” the Sphere goes up for the level, not at the camera’s up). I hope you understood what am I trying to say, and… Well, thank you!
If it could be useful, here you have the code I’m using:
var target : Transform;
var distance = 10.0;
var cameraSpeed = 5;
var xSpeed = 175.0;
var ySpeed = 75.0;
var yMinLimit = 20; //Lowest vertical angle in respect with the target.
var yMaxLimit = 80;
var minDistance = 5; //Min distance of the camera from the target
var maxDistance = 20;
private var x = 0.0;
private var y = 0.0;
function Start () {
var angles = transform.eulerAngles;
x = angles.y;
y = angles.x;
// Make the rigid body not change rotation
if (rigidbody)
rigidbody.freezeRotation = true;
}
function LateUpdate () {
if (target camera) {
//Zooming with mouse
distance += Input.GetAxis("Mouse ScrollWheel")*distance;
distance = Mathf.Clamp(distance, minDistance, maxDistance);
//Detect mouse drag;
if(Input.GetMouseButton(0)) {
x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
}
y = ClampAngle(y, yMinLimit, yMaxLimit);
var rotation = Quaternion.Euler(y, x, 0);
var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
transform.position = Vector3.Lerp (transform.position, position, cameraSpeed*Time.deltaTime);
transform.rotation = rotation;
}
}
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);
}
translationVertical = Input.GetAxis ("Vertical");
translationVertical = translationVertical * cameraSpeed;
translationVertical *= Time.deltaTime;
translationHorizontal = Input.GetAxis ("Horizontal");
translationHorizontal = translationHorizontal * cameraSpeed;
translationHorizontal *= Time.deltaTime;
var cameraRelative : Vector3 = camera.main.transform.TransformDirection (0, 0, -1);
rigidbody.position -= Vector3((cameraRelative.x * translationVertical), 0,(cameraRelative.z * translationVertical) );
cameraRelative = camera.main.transform.TransformDirection (-1, 0, 0);
rigidbody.position -= Vector3((cameraRelative.x * translationHorizontal), 0,(cameraRelative.z * translationHorizontal) );