我使用Unity 5.3.1。 我想用淡化效果改变场景。
一切正常,但是,我的新场景“变灰”......就像这样:
而不是:
我的褪色:
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());
}
答案 0 :(得分:1)
我认为这是因为Unity 5中的灯光错误。重新加载游戏关卡时会发生很多事情。
转到Unity>Window>Lighting
,取消选中对话框底部的auto
选项,然后再次测试您的游戏。
答案 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(未经测试):