VR SupportされてるUnity 5.xでOculusのフェードイン、フェードアウト
VR SupportされてるUnity 5.xでOculusのフェードイン、フェードアウト
使用環境 : Unity 5.3.2f1
趣味でUnityでVRしてます。
Oculusでシーンの移動でフェードイン、フェードアウトしたいのですが、調べてもOVRなんとかを使った古いものばかりで、VR Supportのチェックを入れてお手軽に遊んでる私にとってはコンパイルエラーです。
なので、忘備録もかねてシーンをフェードするスクリプトです。
1. 使い方
Main Cameraにスクリプトを入れます。
シーンが呼ばれた時(Main Cameraがenableになったとき)フェードインします。
違うシーンに移動する時は
Camera.main.GetComponent<SceenFade>().LoadSceenWithFade("Sceen1");
こんな感じでシーンを呼び出すと、フェードアウト後、シーンをロードします。
(なので、呼び出すシーンのMain Cameraにこのスクリプトを入れるとフェードアウト後、シーンをロードしてフェードインします)
うん、メインカメラに入れるので、Findしなくて良いのでらくちん
2. スクリプト
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class SceenFade : MonoBehaviour {
public float fadeTime = 2.0f;
public Color fadeColor = new Color(0.01f, 0.01f, 0.01f, 1.0f);
public Shader fadeShader = null;
private Material fadeMaterial = null;
private bool isFading = false;
void Awake()
{
fadeMaterial = (fadeShader != null) ? new Material(fadeShader) : new Material(Shader.Find("Transparent/Diffuse"));
}
void OnEnable()
{
StartCoroutine(FadeIn());
}
public void LoadSceenWithFade(string sceenname)
{
StartCoroutine(FadeOut(sceenname));
}
void OnDestroy()
{
if (fadeMaterial != null)
{
Destroy(fadeMaterial);
}
}
IEnumerator FadeIn()
{
float elapsedTime = 0.0f;
Color color = fadeMaterial.color = fadeColor;
isFading = true;
while (elapsedTime < fadeTime)
{
yield return new WaitForEndOfFrame();
elapsedTime += Time.deltaTime;
color.a = 1.0f - Mathf.Clamp01(elapsedTime / fadeTime);
fadeMaterial.color = color;
}
isFading = false;
}
IEnumerator FadeOut(string sceen)
{
float elapsedTime = 0.0f;
fadeColor.a = 0f;
Color color = fadeMaterial.color = fadeColor;
isFading = true;
while (elapsedTime < fadeTime)
{
yield return new WaitForEndOfFrame();
elapsedTime += Time.deltaTime;
color.a = 0.0f + Mathf.Clamp01(elapsedTime / fadeTime);
fadeMaterial.color = color;
}
SceneManager.LoadScene(sceen);
isFading = false;
}
void OnPostRender()
{
if (isFading)
{
fadeMaterial.SetPass(0);
GL.PushMatrix();
GL.LoadOrtho();
GL.Color(fadeMaterial.color);
GL.Begin(GL.QUADS);
GL.Vertex3(0f, 0f, -12f);
GL.Vertex3(0f, 1f, -12f);
GL.Vertex3(1f, 1f, -12f);
GL.Vertex3(1f, 0f, -12f);
GL.End();
GL.PopMatrix();
}
}
}
3. Shader.Findの注意点
スクリプト内でShader.Findを使ってますが、Unity Editorとビルド後では動作が異なるので注意してください。
Unity Editor → Build-in Shaderも問題なく検索してくれる
ビルド後の環境 → HierarchyにあるShaderのみ檢索
なので、Editor上では問題ありませんがビルド環境ではHierarchy内に【Transparent/Diffuse】のシェーダを使ったマテリアルがアタッチされてるObujectがないと動きませんので注意です。
Author And Source
この問題について(VR SupportされてるUnity 5.xでOculusのフェードイン、フェードアウト), 我々は、より多くの情報をここで見つけました https://qiita.com/miyumiyu/items/6e4bea494e3b70710c87著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .