- Home /
Question by
bobrovapaula · Jun 09, 2019 at 08:17 PM ·
unity 2d2d-platformerparallax
How can I change this parallax script so that the layers parallax downwards?
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
Don't understand the question, please add more details/explanation. I suggest you write up the question so a beginner can understand it: I find 90% of the time I do this, I discover the answer myself.
Your answer
![](https://koobas.hobune.stream/wayback/20220612202912im_/https://answers.unity.com/themes/thub/images/avi.jpg)