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

时间:2015-12-30 20:01:01

标签: c# unity3d

我面临着场景褪色的问题。我做了一个淡入淡出的动画。 out还创建了一个名为Fader的脚本,它具有协程功能。动画效果很好。还有一个名为SceneManager的空游戏对象,它有一个脚本。在此脚本中,按钮功能被写入以打开场景。 enter image description here

enter image description here

但问题是当我点击任何按钮,例如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");

    }


}

场景推子脚本:

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);


    }

}

1 个答案:

答案 0 :(得分: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;

}