2016-01-23 56 views
1

当我淡入淡出场景并尝试淡入原始屏幕时,遇到黑屏。例如,从暂停屏幕返回到主菜单让我看到黑屏,我认为这是我的代码的问题。我应该如何解决这个问题?在统一中淡入场景无法正常工作

using UnityEngine; 
using System.Collections; 

public class Fading : MonoBehaviour 
{ 
    public Texture2D fadeOutTexture; 
    public float fadeSpeed = 0.8f; 

    private int drawDepth = -1000; 
    private float alpha = 1.0f; 
    private int fadeDir = -1; 

    void OnGUI() 
    { 
     alpha += fadeDir * fadeSpeed * Time.deltaTime; 
     alpha = Mathf.Clamp01(alpha); 

     GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, alpha); 
     GUI.depth = drawDepth; 
     GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), fadeOutTexture); 
    } 

    public float BeginFade (int direction) 
    { 
     fadeDir = direction; 
     return (fadeSpeed); 
    } 

    void OnLevelWasLoaded() 
    { 
     alpha = 1; 
     BeginFade(-1); 
    } 
} 
+0

试着问上http://answers.unity3d.com/你很可能会得到一个答案有 – kentor

+0

你真的不应该使用古代遗留下来的GUI系统。现在只使用普通的Unity.UI。使用遗留系统只是不切合实际。 – Fattie

+0

由于kentor提到有这个容易googleable〜100完整的工作示例http://answers.unity3d.com/questions/780323/unity-ui-fading-canvaspanel.html – Fattie

回答

1

Brackeys有一个简单而有效的方法,以场景之间的淡入淡出:https://www.youtube.com/watch?v=0HwZQt94uHQ

+0

此链接只有在可用时才有效。直接在您的答案中包含相关信息可确保只要此问题在此,就可以使用。应将链接唯一的答案转换为对问题的评论。 – user3071284

+0

是的,但我的更改级别功能与视频不兼容 – GamerC42

+0

然后修改它;) –

2

您的代码表示:

  1. 当游戏开始时,立即开始褪色。
  2. OnGUI(每秒30到100倍的任何地方调用):淡出
  3. 如果调用方法BeginFade ...什么也不做(您已经褪色)
  4. 进行永远褪色为黑色。

从来没有一段代码停止衰落。

你可以添加一个布尔“isFading”,并把所有的OnGUI代码:

if(isFading) 
{ 
... 
} 

...但你仍然需要在某个时候停止。例如OnGUI的最后一行可能是:

if(isFading && alpha <= 0) 
    isFading = false; 
+0

然后,我必须将alpha重置为1,然后右? – GamerC42

+0

我对我缺乏理解表示歉意,但我仍然受到同一黑屏幕的欢迎。 – GamerC42

+0

是的。通常情况下,你有两种方法 - “开始时尚到黑色”和“开始淡入淡出”。你有一个布尔值来表示“我现在正在褪色”还是“我要去哪个方向 - 正面还是负面”。你有所有这些,但在不同的地方,和/或只有一半实现。如果你在纸上写下你的算法,而不是写在代码中,并考虑你写的是什么,那么它会正常工作。 – Adam