自从我迁移到 Unity 5.6 后,屏幕淡入淡出在 Daydream VR 中不起作用
Screen fade not working in Daydream VR since I migrated to Unity 5.6
我正在构建 DayDream VR 游戏。我以前有一个脚本可以在用户单击某处更改 levels/scenes.
时淡出屏幕
自从我迁移到 Unity 5.6 / Google VR SDK 1.2 后,任何淡入淡出的效果都停止了。但它仍然可以在我的桌面上以预览模式运行。这是因为他们改变了相机的工作方式。我在网上尝试过不同的脚本,但 none 的脚本都有效,请问有人知道如何在场景变化时使屏幕淡入淡出吗?
这是代码的当前主要部分:
// 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;
}
我也尝试过使用 Autofade 脚本。正如我提到的,在我的桌面上尝试游戏时它们都可以工作,它们只是在 Android phone 上不起作用 :(.
知道为什么吗?
编辑:这是一些额外的代码
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
如果你想淡化整个屏幕我建议:
- In
Unity
add a Panel
(make sure that it covers the whole screen).
- Make a new
Material
and attach it to the Panel
.
- The Material should have Rendering Mode set to
Transparent
.
- Attach the following
Script
to the 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;
}
- Call the
Fade()
method when necessary.
Hope that solves your problem!
我正在构建 DayDream VR 游戏。我以前有一个脚本可以在用户单击某处更改 levels/scenes.
时淡出屏幕自从我迁移到 Unity 5.6 / Google VR SDK 1.2 后,任何淡入淡出的效果都停止了。但它仍然可以在我的桌面上以预览模式运行。这是因为他们改变了相机的工作方式。我在网上尝试过不同的脚本,但 none 的脚本都有效,请问有人知道如何在场景变化时使屏幕淡入淡出吗?
这是代码的当前主要部分:
// 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;
}
我也尝试过使用 Autofade 脚本。正如我提到的,在我的桌面上尝试游戏时它们都可以工作,它们只是在 Android phone 上不起作用 :(.
知道为什么吗?
编辑:这是一些额外的代码
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
如果你想淡化整个屏幕我建议:
- In
Unity
add aPanel
(make sure that it covers the whole screen).- Make a new
Material
and attach it to thePanel
.- The Material should have Rendering Mode set to
Transparent
.- Attach the following
Script
to thePanel
.
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;
}
- Call the
Fade()
method when necessary.
Hope that solves your problem!