How to change the camera background colour with player height.
Hey I currently am making a 2D side scroller and I am trying to get my background colour to change to give the effect of flying into space (if they get that high). I have been able to get the background colour of the main camera to change when the player hits a certain height but I can't get the desired effect if the player is falling back to earth.
using UnityEngine;
using System.Collections;
public class CameraBackGround : MonoBehaviour {
private GameObject playerMovement;
public Color backgroundSky = Color.blue;
public Color backgroundSpace = Color.black;
private float transfer = 10f;
private float deltaTime = 0f;
void Start()
{
playerMovement = GameObject.FindGameObjectWithTag("Player");
}
void Update()
{
if(playerMovement.transform.position.y >= 10f)
{
dayToNight();
}else if(playerMovement.transform.position.y > 2f && playerMovement.transform.position.y < 10f)
{
nightToDay();
}
}
void dayToNight()
{
deltaTime += Time.deltaTime;
GetComponent<Camera>().backgroundColor = Color.Lerp(backgroundSky, backgroundSpace, deltaTime);
}
void nightToDay()
{
deltaTime += Time.deltaTime;
GetComponent<Camera>().backgroundColor = Color.Lerp(backgroundSpace, backgroundSky, deltaTime);
}
}
Basically if my player reaches a certain height then the transition between the two colours should start but if the player falls back to the ground then I want it to return to the original background colour.
Answer by nonathaj · Feb 24, 2016 at 09:14 AM
I think you don't have a full understanding of how the Lerp function works. The t in the Lerp function is a value between 0 and 1 that determines the interpolation between color a and b respectively.
If t == 0, Lerp returns a
If t == 1, Lerp returns b
If t == 0.5, lerp returns halfway between a and b
So by inputting Time.deltaTime (which is the time since the last frame, a value of 0.016f with 60 frames per second), you will never actually reach your objective color of b.
I wrote up a quick script which does mostly what you are asking for, hopefully it is helpful: http://pastebin.com/atsdK1sm
Your answer
Follow this Question
Related Questions
Camerashake doesn´t work expected in Build c# 0 Answers
Transform.RotateAround not rotating around specified game object. 0 Answers
transform.position not applying to my camera. 1 Answer
How to change camera position on trigger while camera is being updated each frame by LateUpdate 0 Answers
Error in script? 0 Answers