I’m trying to get the screen to darken when I start the game and when I restart. I have followed a tutorial for this but was not very clear.
public class ScreenFader : MonoBehaviour {
// Holds the texutre to fill the screen
[SerializeField] Texture2D fadeTexture;
[SerializeField] Color colorStart = Color.black;
[SerializeField] Color colorEnd = Color.clear;
// Time to completion to fade
[SerializeField]float fadeTime = 1.0f;
// The container for the functions to be triggered when the fade has complete
private event FadeCompleteEvent OnFadeComplete = null;
// Defines the type of function which is used as a delegate
public delegate void FadeCompleteEvent();
// Internally used to track the passage of time
private float timer = 0.0f;
// Loads a prefab and create an instance from it
static public void CreateFade (string _prefabName,
FadeCompleteEvent _completeEvent) {
// Load the asset as a basic object
Object fadePrefab = Resources.Load(_prefabName, typeof(Object));
// Create a new game object from the loaded prefab
GameObject fadeObject = Instantiate( fadePrefab) as GameObject;
// Find the fader's script component an assign the event
ScreenFader fader = fadeObject.GetComponent<ScreenFader>();
fader.OnFadeComplete = _completeEvent;
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
// Accumulate the passage of time
timer += Time.fixedDeltaTime;
// Duration has been satisfied?
if (timer > fadeTime)
{
timer = fadeTime;
}
if (OnFadeComplete != null)
{
OnFadeComplete();
OnFadeComplete = null;
Destroy(gameObject, 0.1f);
}
}
void OnGui() {
// Determine the passage of time as
// a precentage of the duration time
float percent = timer / fadeTime;
// Use the percentage to the determine the
// gradient between the two
GUI.color = Color.Lerp(colorStart, colorEnd, percent);
// Create a rectangle the size of the screen
Rect screenRectangle = new Rect(0, 0, Screen.width, Screen.height);
// Draw the texture filling the entire screen
GUI.DrawTexture(screenRectangle, fadeTexture);
}
}
public class CoreGame : MonoBehaviour {
[SerializeField] GameObject pauseMenu;
// Stores the current pause state;
private bool paused = false;
// Use this for initialization
void Start () {
ScreenFader.CreateFade("ScreenFadeUp", FadeUpCompleted);
// Hide the pause menu intitially
HandlePause(false);
}
// Update is called once per frame
void Update () {
// Exit early if paused
if (paused)
{
return;
}
CheckInput();
}
static public void MakeChild(GameObject _child) {
GameObject coreGameObj = GameObject.Find("CoreGame");
// Assign the child's transform's parent to the
// recently found core game's transform
_child.transform.parent = coreGameObj.transform;
}
void CheckInput()
{
// User has pressed pause?
if (Input.GetKeyUp(KeyCode.P))
{
HandlePause(!paused);
}
}
// Method to modify pause status
private void SetPaused(bool _paused)
{
paused = _paused;
}
void FadeUpCompleted() {
Debug.Log("Fade UP has completed!");
}
// Handles the actions of the pause event
public void HandlePause(bool _pause) {
paused = _pause;
// Send a message to all children
BroadcastMessage("SetPaused", paused);
paused = !paused;
Debug.Log("Pause Key has been pressed!");
if (paused)
{
Time.timeScale = 0;
}
else
{
Time.timeScale = 1;
}
pauseMenu.SetActive(paused);
}
}
public class PauseResume : MenuButtonBase {
// reference to the core game object
public CoreGame coreGame;
// Call on button up
protected override void doButtonAction()
{
coreGame.HandlePause(false);
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
public class PauseRestart : MenuButtonBase {
// Called on button up
protected override void doButtonAction()
{
ScreenFader.CreateFade("ScreenFadeDown", FadeDownCompleted);
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void FadeDownCompleted() {
Application.LoadLevel("Project");
}
}