LoadScene与衰落C#

时间:2016-02-04 21:57:55

标签: c# unity3d scene unity5

我使用Unity 5.3.1。 我想用淡化效果改变场景。

一切正常,但是,我的新场景“变灰”......就像这样:

  

灰色图像   enter image description here

而不是:

  

常规图片   enter image description here

我的褪色:

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)
{
    Debug.Log("BeginFade");
    fadeDir = direction;
    return fadeSpeed;
}

void OnLevelWasLoaded(int level)
{
    Debug.Log("wasLoaded");
    BeginFade(-1);
}

}

执行我的场景的Mycode:

 IEnumerator ChangeLevel()
{
    float fadeTime = GameObject.Find("GM").GetComponent<Fading>().BeginFade(1);
    yield return new WaitForSeconds(fadeTime);
    SceneManager.LoadScene(scene);
}

调用我的ChangeLevel函数:

 if (other.gameObject.name == "MenuController")
 {
    StartCoroutine(ChangeLevel());
 }

2 个答案:

答案 0 :(得分:1)

我认为这是因为Unity 5中的灯光错误。重新加载游戏关卡时会发生很多事情。

转到Unity>Window>Lighting,取消选中对话框底部的auto选项,然后再次测试您的游戏。

以下是指示:How to disable auto light baking in Unity

答案 1 :(得分:0)

你的GameObject是否设置为DontDestroyOnLoad? 另外我认为你的代码中存在逻辑错误。 使用BeginFade传递的时间调用WaitForSeconds。 那个时间是fadeSpeed,与你在屏幕黑色之前等待的时间不一样。 目前,您的alpha += fadeDir * fadeSpeed * Time.deltaTime;表示每秒都会为alpha添加值0.8。但是如果设置为1,Alpha只是完全透明的。

所以实际时间应该是1 / fadeSpeed,我认为(1.25s)。 为什么屏幕仍然是灰色我不能告诉你。除非是0,否则它应该下降。

现在,在整个时间内启用OnGUI的组件并不是一个好主意。即使它没有显示某些内容,MonoBehavior具有OnGUI方法的事实也会产生很大的开销。自Unity5发布以来,有许多更好的方法来进行屏幕淡化。只是谷歌一点点,你发现项目像theese(未经测试):