自从我迁移到Unity 5.6以来,屏幕淡入淡出在Daydream VR中不起作用



我正在开发一款DayDream VR游戏。我以前有一个脚本,当用户单击某处更改级别/场景时淡出屏幕。

由于我已经迁移到Unity 5.6/Google VR SDK 1.2,任何淡入淡出的效果都停止了。但它仍然可以在我的桌面上的预览模式下工作。这是因为它们改变了相机的工作方式。我在网上尝试了不同的脚本,但没有一个有效,有人知道如何在场景变化时进行屏幕淡入淡出吗?

以下是代码的当前主要部分:

// Derived from OVRScreenFade
float elapsedTime = 0.0f;
Color color = fadeColor;
color.a = 0.0f;
fadeMaterial.color = color;
while (elapsedTime < fadeTime)
{
yield return new WaitForEndOfFrame();
elapsedTime += Time.deltaTime;
color.a = Mathf.Clamp01(elapsedTime / fadeTime);
fadeMaterial.color = color;
}

我还尝试使用自动淡入淡出脚本。正如我提到的,当我在桌面上尝试游戏时,它们都可以工作,只是在 Android 手机:(上不起作用。

知道为什么吗?

编辑:这是一些额外的代码

public Material fadeMaterial = null; //starts NULL
//applied to cameras inside a function
foreach (Camera c in Camera.allCameras)
{
var fadeControl = c.gameObject.AddComponent<ScreenFadeControl>();
fadeControl.fadeMaterial = fadeMaterial;
fadeControls.Add(fadeControl);
}

最终解决方案

使用这里给出的答案,我创建了一个带有说明的脚本文件,如果您需要相同的东西,请随时下载并使用它:

https://gist.github.com/xtrimsky/0d58ee4db1964577893353365903b91a

如果你想淡化整个屏幕,我建议:

  1. Unity中添加一个Panel(确保它覆盖整个屏幕)。
  2. 创建一个新Material并将其附加到Panel
  3. 材质的"渲染模式"应设置为Transparent
  4. 将以下Script附加到Panel
public Material m;
public float _colorSpeed = 0.01f;
private Color c;
private bool start = false;
void Update()
{
if (start)
{
if (c.a < 1.0f)
c.a = c.a + _colorSpeed;
m.color = c;
}
}
public void Fade()
{
c = m.color;
c.a = 0.0f;
start = true;
}
  1. 必要时调用Fade()方法。
    希望能解决您的问题!

最新更新