Loading transition not smooth. HELP!
I have buttons at the moment, one to play game, and one to go to instructions. When I play the game the loading is smooth, but when I press and load the instruction Scene the loading is not smooth.
Smooth loading when pressing play game: https://gyazo.com/6a2df9c66a193a057c8cc0001a1802c4
Not smooth loading when pressing instructions: https://gyazo.com/9e60157ed6f6334a5764f0e46e4c04e1
I would be very happy if someone did point me at the right direction here. I think it may be that the one canvas is rendering infront of the other. I tried to make a script onload, set z position to -1 because someone said a lower z position would render it infront of the other canvas but it hasn't work.
Here is my load on click script:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoadOnClick : MonoBehaviour {
public GameObject LoadingScreen;
public GameObject dots;
private float startDelay = 0;
private float repeatDelay = 0.5f;
private Image dotsImage;
private Image ScreenImage;
public float fadeSpeed = 10f;
Color Transparent;
Color Visible;
private bool fadeinok;
private bool fadeoutok;
private float loadProgress;
AsyncOperation scene;
private bool loadingDone;
public CanvasGroup canvas;
public Canvas can;
void Update() {
//Debug.Log("Script still runinng");
if (fadeinok)
{
FadeIn(ScreenImage);
FadeIn(dotsImage);
if (ScreenImage.color.a >= 0.99f && dotsImage.color.a >= 0.99f) {
fadeinok = false;
fadeoutok = true;
canvas.alpha = 0;
canvas.interactable = false;
}
}
if (fadeoutok && loadingDone) {
FadeOut(ScreenImage, 1f);
FadeOut(dotsImage, 10f);
ActivateScene();
if (ScreenImage.color.a <= 0.01f && dotsImage.color.a <= 0.01f)
{
Destroy(transform.gameObject.GetComponentInParent<Canvas>().gameObject);
}
}
}
public void LoadScene(int Scene) {
LoadingScreen.SetActive(true);
dotsImage = dots.GetComponent<Image>();
ScreenImage = LoadingScreen.GetComponent<Image>();
dotsImage.fillAmount = 0;
ScreenImage.color = Maketransparent(ScreenImage);
dotsImage.color = Maketransparent(dotsImage);
InvokeRepeating("Dots", startDelay, repeatDelay);
fadeinok = true;
fadeoutok = false;
loadingDone = false;
StartCoroutine(LoadLevel(Scene));
}
private void Dots() {
dotsImage.fillAmount = 0.33f + dotsImage.fillAmount;
if (dotsImage.fillAmount == 1) {
dotsImage.fillAmount = 0;
}
}
private void FadeOut(Image im, float multiplyfade) {
im.color = Color.Lerp(im.color, Maketransparent(im), fadeSpeed * multiplyfade * Time.deltaTime);
}
private void FadeIn(Image im) {
im.color = Color.Lerp(im.color, MakeVisible(im), fadeSpeed * Time.deltaTime);
}
private Color Maketransparent(Image pic) {
return new Color(pic.color.r, pic.color.g, pic.color.b, 0);
}
private Color MakeVisible(Image pic)
{
return new Color(pic.color.r, pic.color.g, pic.color.b, 1);
}
IEnumerator LoadLevel(int level)
{
scene = SceneManager.LoadSceneAsync(level);
scene.allowSceneActivation = false;
while (!scene.isDone) {
loadProgress = scene.progress;
if (loadProgress >= 0.9f)
{
loadingDone = true;
break;
}
yield return null;
}
yield return scene;
}
private void ActivateScene() {
scene.allowSceneActivation = true;
}
}
Your answer
Follow this Question
Related Questions
UI Canvas elements stutter during fade 0 Answers
How can i WaitForSeconds after destroying GameObject to load the next Scene? 0 Answers
Why is my coroutine not working? 1 Answer
Loading Bar For Each Canvas in a Scene 1 Answer
Power up not working 0 Answers