- Home /
How to make camera follow player smoothly?
video - the video
I got this code for player's movement:
void Update()
{
{
transform.Translate(new Vector3(0, 1, 0) * speed * Time.deltaTime)
}
}
Aslo my camera follows player like this:
void LateUpdate () {
transform.position = new Vector3(transform.position.x, player.transform.position.y + offset, transform.position.z);
}
}
The game is about player moving up, dodging some obstacles on his way. Obstacles stand still. The problem i need to solve is that, as you can see in video I attached, it looks like obstacles are jittering a liitle every frame. I guess this is because camera (like the player) moves with translate method, so it is jittering itself. What is the best way to make camera movement smoothly? Maybe problem with framerate?
Also there is a problem with detectng collisions. As you see in the video, ball turns back not at the point of collision, but when it is altready at the wall or out of the screen if it knocks the sides. Again, that's because player moves from point before the wall right forward and scips visual point of collision. Maybe there is a way to move player with a higher rate by smaller steps or even contionious, but not affecting the perfomance too much?
Answer by highpockets · May 25, 2019 at 08:24 AM
I made this the other the other day:
public class SmoothFollow2D : MonoBehaviour
{
[SerializeField] Transform target;
[SerializeField] float maxLeft;
[SerializeField] float maxRight;
private void Start()
{
transform.position = new Vector3(target.position.x, transform.position.y, transform.position.z);
}
// Update is called once per frame
void LateUpdate()
{
if (target.position.x <= maxLeft)
{
transform.position = Vector3.Lerp(transform.position, new Vector3(maxLeft, transform.position.y, transform.position.z), Time.deltaTime);
}
else if (target.position.x >= maxRight)
{
transform.position = Vector3.Lerp(transform.position, new Vector3(maxRight, transform.position.y, transform.position.z), Time.deltaTime);
}
else
{
transform.position = Vector3.Lerp(transform.position, new Vector3(target.position.x, transform.position.y, transform.position.z), Time.deltaTime);
}
}
}
This is based on 2D movement, locked off on the z axis and y axis, but you can change what you need to match your use case. This also keeps the player more or less in a dampened middle. Though if your player does move super fast, you might lose him. You can make a maxDistance float variable to ensure that the distance is within a certain amount and speed up as necessary to have a faster dampness.
Your answer
Follow this Question
Related Questions
Smoothen Mouse Axis Input 2 Answers
Android update math at higher hz? 2 Answers
Proper Fixed Timestep for 30 FPS 1 Answer
How to check performance of the game in the device made in Unity 3d 3 Answers
Android: FPS halt when doing things for the first time 2 Answers