按钮在场景淡入淡出时无法正常工作

5 c# unity-game-engine

我面临着场景褪色的问题.我做了一个淡入淡出的动画也制作了一个名为as的脚本,Fader它具有协程功能.动画效果很好.还有一个名为as的空游戏对象,SceneManager它有一个脚本.在此脚本中,按钮功能被写入打开场景. 在此输入图像描述

在此输入图像描述

但问题是当我点击任何按钮,例如Scene2 Button然后淡入动画开始,在某些milliseconds黑屏出现时,如果我点击这个黑色屏幕然后另一个场景打开.它不会打开scene2观看此视频

https://drive.google.com/file/d/0B1H5fdK2PJAnbm5fWDhlN3dVVnc

包链接 https://drive.google.com/file/d/0B1H5fdK2PJAnZ2Y1UEFRMmVFbTA

场景管理器脚本:

public class Manager : MonoBehaviour
{

    public void GoBackScene1 ()
    {
        Fader.instance.Perform ("Scene1");

    }

    public void Scene2 ()
    {
        Fader.instance.Perform ("Scene2");
    }

    public void Scene3 ()
    {

        Fader.instance.Perform ("Scene3");
    }

    public void Scene4 ()
    {
        Fader.instance.Perform ("Scene4");

    }


}
Run Code Online (Sandbox Code Playgroud)

场景推子脚本:

public class Fader : MonoBehaviour {

    public static Fader instance;

    [SerializeField]
    private GameObject canvas;

    [SerializeField]
    private Animator anim;


    void Awake(){

        makeSingleton ();
    }


    public void Perform(string levelname)
    {
        StartCoroutine(FadeInAnimation(levelname));


    }

    void makeSingleton(){

        if (instance != null) {

            Destroy (gameObject);
        } else {
            instance = this;
            DontDestroyOnLoad(gameObject);

        }



    }

    IEnumerator FadeInAnimation(string level){

        canvas.SetActive (true);

        anim.Play ("FadeIn");

        yield return new WaitForSeconds (1f);

        Application.LoadLevel (level);

        anim.Play ("FadeOut");

        yield return new WaitForSeconds (2f);

        canvas.SetActive (false);


    }

}
Run Code Online (Sandbox Code Playgroud)

Yur*_*man 1

事情是这样的:

淡入淡出动画长度为 0.417 秒。在动画开始和 LoadLevel 之间,您需要等待 1 秒。这意味着屏幕保持黑屏 0.583 秒。

问题是,在这段时间里,所有其他按钮都是可点击的。因此,如果您单击“场景 2”,然后单击黑屏,您可能会不小心点击“场景 3”按钮,从而启动FadeInAnimation("Scene3"). 由于您制作了Fader不可破坏的单例,因此关卡加载不会停止FadeInAnimation("Scene3")执行。

您需要的是一些锁定,以防止在屏幕黑时点击其他按钮。例如,类似这样的事情就可以完成这项工作:

private bool fading = false;

IEnumerator FadeInAnimation(string level){

    if (fading) yield break;
    fading = true;

    canvas.SetActive (true);

    anim.Play ("FadeIn");

    yield return new WaitForSeconds (1f);

    Application.LoadLevel (level);

    anim.Play ("FadeOut");

    yield return new WaitForSeconds (2f);

    canvas.SetActive (false);

    fading = false;

}
Run Code Online (Sandbox Code Playgroud)