- Home /
Question by
Mokad · Jul 21, 2014 at 04:27 PM ·
2d2d-platformerorthographicparallax
My parallaxing is moving by it self?
I'm trying to follow a tutorial on youtube but my parallaxing is moving by itself even if I don't move. Here is the code, the tutorial uses a orthographic camera.
using UnityEngine;
using System.Collections;
public class Parallaxing : MonoBehaviour {
public Transform[] backgrounds; //Array (List) of all the backgrounds and foregraounds to be parallaxed
private float[] parallaxScales; //The proportions of the camera's 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 Camera's tranform
private Vector3 previousCamPos; //The Position of the camera in previous frame
//is called before start(). Great for referencing
void Awake () {
//set up the camera reference
cam = Camera.main.transform;
}
//Use this for initializing
void Start () {
//The previous frame had the current frame's camera position
previousCamPos = cam.position;
//Assaigning corresponding 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 opposite 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 position which is the current postion plus the parallax
float backgroundTargetPosX = backgrounds[i].position.x + parallax;
// create a target postion which is the backgrounds current position with it's target x postion
Vector3 backgroundTargetPos = new Vector3 (backgroundTargetPosX, backgrounds[i].position.y, backgrounds[i].position.z);
//fade between current position and the target position using lerp
backgrounds[i].position = Vector3.Lerp (backgrounds[i].position, backgroundTargetPos, smoothing * Time.deltaTime);
}
//set the previous camera position to the camera's position at the end of the frame
previousCamPos = cam.position;
}
}
Comment
Best Answer
Answer by Pyrian · Jul 21, 2014 at 06:51 PM
Try replacing the second "=" in line 36 with a "-":
float parallax = (previousCamPos.x - cam.position.x) * parallaxScales[i];
Your answer
Follow this Question
Related Questions
GeometryUtility.TestPlanesAABB working strangely with parallax background 2D 2 Answers
Background Image as Orthographic 2D Game Background - and quick 2D parallaxing question 1 Answer
Most efficient way to achieve 2D parallax effect with orthographic camera? 2 Answers
Orthographic Camera 3D Object Rendering Issue (Clipping), What's wrong? 3 Answers