- Home /
Question by
bobrovapaula · Apr 19, 2019 at 06:58 PM ·
unity 2dbackgroundparallax
Parallax Lag issue...
using System.Collections;
using UnityEngine;
public class Parallaxing : MonoBehaviour
{
public Transform[] backgrounds; // Array of all the back - and foregrounds to be parallaxed
private float[] parallaxScales; // The proportion of the cameras movement to move the backgrounds by
public float smoothing = 1f; // How smooth the parallax is going to be. Make sure to set this above 0
private Transform cam; // Reference to the main cameras transform
private Vector3 previousCamPos; // The position of the camera in the previous frame
// Is called before Start(). Great for references
void Awake()
{
// set up the camera references
cam = Camera.main.transform;
}
// Start is called before the first frame update
void Start()
{
// The previous frame had the current frame's camera position
previousCamPos = cam.position;
// assigning coresponding parallaxScales
parallaxScales = new float[backgrounds.Length];
for (int i = 0; i < backgrounds.Length; i++)
{
parallaxScales[i] = backgrounds[i].position.z * -1;
}
}
// Update is called once per frame
void Update()
{
// for each background
for (int i = 0; i < backgrounds.Length; i++)
{
// the parallax is the opposit of the camera movement because the previous frame multiplied by the scale
float parallax = (previousCamPos.x - cam.position.x) * parallaxScales[i];
// set a target x pos witch is the current pos plus the parallax
float backgroundTargetPosX = backgrounds[i].position.x + parallax;
// create a target pos which is the background's current pos with it's target x pos
Vector3 backgroundTargetPos = new Vector3(backgroundTargetPosX, backgrounds[i].position.y, backgrounds[i].position.z);
// face between current pos and the target position using lerp
backgrounds[i].position = Vector3.Lerp(backgrounds[i].position, backgroundTargetPos, smoothing * Time.deltaTime);
}
// set the previous camPos to the camera's position at the end of the frame
previousCamPos = cam.position;
}
}
Comment
When I move the player, the background lags. The further away the background is the more it seems to lag...
Your answer
Follow this Question
Related Questions
2D Parallax Background 4 Answers
Leapfrog background set pieces as camera scrolls? 2 Answers
The Parallax goes way too fast 2 Answers