Initialer Upload neues Unity-Projekt
This commit is contained in:
129
Assets/SteamVR/Scripts/SteamVR_Fade.cs
Normal file
129
Assets/SteamVR/Scripts/SteamVR_Fade.cs
Normal file
@ -0,0 +1,129 @@
|
||||
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
|
||||
//
|
||||
// Purpose: CameraFade script adapted to work with SteamVR.
|
||||
//
|
||||
// Usage: Add to your top level SteamVR_Camera (the one with ApplyDistoration
|
||||
// checked) and drag a reference to this component into SteamVR_Camera
|
||||
// RenderComponents list. Then call the static helper function
|
||||
// SteamVR_Fade.Start with the desired color and duration.
|
||||
// Use a duration of zero to set the start color.
|
||||
//
|
||||
// Example: Fade down from black over one second.
|
||||
// SteamVR_Fade.Start(Color.black, 0);
|
||||
// SteamVR_Fade.Start(Color.clear, 1);
|
||||
//
|
||||
// Note: This component is provided to fade out a single camera layer's
|
||||
// scene view. If instead you want to fade the entire view, use:
|
||||
// SteamVR_Fade.View(Color.black, 1);
|
||||
// (Does not affect the game view, however.)
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
using UnityEngine;
|
||||
using Valve.VR;
|
||||
|
||||
namespace Valve.VR
|
||||
{
|
||||
public class SteamVR_Fade : MonoBehaviour
|
||||
{
|
||||
private Color currentColor = new Color(0, 0, 0, 0); // default starting color: black and fully transparent
|
||||
private Color targetColor = new Color(0, 0, 0, 0); // default target color: black and fully transparent
|
||||
private Color deltaColor = new Color(0, 0, 0, 0); // the delta-color is basically the "speed / second" at which the current color should change
|
||||
private bool fadeOverlay = false;
|
||||
|
||||
static public void Start(Color newColor, float duration, bool fadeOverlay = false)
|
||||
{
|
||||
SteamVR_Events.Fade.Send(newColor, duration, fadeOverlay);
|
||||
}
|
||||
|
||||
static public void View(Color newColor, float duration)
|
||||
{
|
||||
var compositor = OpenVR.Compositor;
|
||||
if (compositor != null)
|
||||
compositor.FadeToColor(duration, newColor.r, newColor.g, newColor.b, newColor.a, false);
|
||||
}
|
||||
|
||||
#if TEST_FADE_VIEW
|
||||
void Update()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.Space))
|
||||
{
|
||||
SteamVR_Fade.View(Color.black, 0);
|
||||
SteamVR_Fade.View(Color.clear, 1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
public void OnStartFade(Color newColor, float duration, bool fadeOverlay)
|
||||
{
|
||||
if (duration > 0.0f)
|
||||
{
|
||||
targetColor = newColor;
|
||||
deltaColor = (targetColor - currentColor) / duration;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentColor = newColor;
|
||||
}
|
||||
}
|
||||
|
||||
static Material fadeMaterial = null;
|
||||
static int fadeMaterialColorID = -1;
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
if (fadeMaterial == null)
|
||||
{
|
||||
fadeMaterial = new Material(Shader.Find("Custom/SteamVR_Fade"));
|
||||
fadeMaterialColorID = Shader.PropertyToID("fadeColor");
|
||||
}
|
||||
|
||||
SteamVR_Events.Fade.Listen(OnStartFade);
|
||||
SteamVR_Events.FadeReady.Send();
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
SteamVR_Events.Fade.Remove(OnStartFade);
|
||||
}
|
||||
|
||||
void OnPostRender()
|
||||
{
|
||||
if (currentColor != targetColor)
|
||||
{
|
||||
// if the difference between the current alpha and the desired alpha is smaller than delta-alpha * deltaTime, then we're pretty much done fading:
|
||||
if (Mathf.Abs(currentColor.a - targetColor.a) < Mathf.Abs(deltaColor.a) * Time.deltaTime)
|
||||
{
|
||||
currentColor = targetColor;
|
||||
deltaColor = new Color(0, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentColor += deltaColor * Time.deltaTime;
|
||||
}
|
||||
|
||||
if (fadeOverlay)
|
||||
{
|
||||
var overlay = SteamVR_Overlay.instance;
|
||||
if (overlay != null)
|
||||
{
|
||||
overlay.alpha = 1.0f - currentColor.a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (currentColor.a > 0 && fadeMaterial)
|
||||
{
|
||||
fadeMaterial.SetColor(fadeMaterialColorID, currentColor);
|
||||
fadeMaterial.SetPass(0);
|
||||
GL.Begin(GL.QUADS);
|
||||
|
||||
GL.Vertex3(-1, -1, 0);
|
||||
GL.Vertex3(1, -1, 0);
|
||||
GL.Vertex3(1, 1, 0);
|
||||
GL.Vertex3(-1, 1, 0);
|
||||
GL.End();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user