- Home /
Spherical Movement follow Camera jittery movement.
I have a scene where the player is able to walk 360 degrees around a spherical planet. It is kept on the sphere using transforms and is oriented using cross product vectors. The movement directions are camera relative.
My problem is the camera which follows the player and determines the relative directions, movement is jittery when moving and rotating.
I am aware that Lerp and Smooth functions should be used but I need help in implementing them into my current situation.
If anyone could point me in the right direction I would greatly appreciate it. Thanks in advance.
Here is my current code for the camera movement.
public class TP_SphericalCamera : MonoBehaviour {
public string tag = "Player"; //replacing with Player target Gameobject
public GameObject targetLookat; //the target the main camera will focus on.
private Vector3 cameraOffset;
public float cameraSpeed = 1.0f;
public float cameraRotationSpeed = 30.0f;
public float distanceCameraIsBehindPlayer = 10.0f;
public float distanceCameraIsAbovePlayer = 2.0f;
private GameObject player;
void Start () {
if (targetLookat.gameObject == null)
return;
player = targetLookat;
cameraOffset = player.transform.position - player.transform.position + new Vector3 (0, -distanceCameraIsAbovePlayer, distanceCameraIsBehindPlayer);
}
void Update () {
//GameObject player = targetLookat;
Vector3 goalPosition;
Quaternion goalRotation;
//move camera to player position only for rotating. not seen in frame
goalPosition = player.transform.position; //camera behind the player
//change the camera orientation
goalRotation = Quaternion.LookRotation(player.transform.up, -player.transform.forward );
//move camera back to original position relative to oofset annd LookRotation
goalPosition -= (transform.rotation * cameraOffset) ; //make it behind the player
//following the player
Vector3 goalDirection = (goalPosition - transform.position);
Vector3 goalOffset = goalDirection * cameraSpeed * Time.deltaTime;
//if need to move the camera
if (Vector3.Dot ((goalPosition - transform.position), goalPosition - (transform.position + goalOffset)) > 0.01f) {
transform.position += goalOffset * Time.deltaTime;
} else {
transform.position = goalPosition;
}
//rotate the camera
transform.rotation = Quaternion.RotateTowards (transform.rotation, goalRotation, cameraRotationSpeed * Time.deltaTime);
}
}
Your answer
Follow this Question
Related Questions
Why is 2d camera not smooth at 30 FPS 0 Answers
Camera follow jitter 3 Answers
How to make camera follow player smoothly? 1 Answer
Third Person Camera 1 Answer
Camera jitters / lag behind when jumping or falling 2 Answers