我面临着场景褪色的问题。我做了一个淡入淡出的动画。 out还创建了一个名为Fader
的脚本,它具有协程功能。动画效果很好。还有一个名为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");
}
}
场景推子脚本:
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);
}
}
答案 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;
}