using UnityEngine;
|
|
using System.Collections;
|
|
|
|
public class BackgroundController : MonoBehaviour {
|
|
|
|
public float transistionSpeed = 1f;
|
|
public float waitTime = 10f;
|
|
|
|
private Material mat;
|
|
|
|
private float lastTransition = 0.0f;
|
|
private bool inverseDirection = false;
|
|
|
|
|
|
// Use this for initialization
|
|
void Start () {
|
|
mat = GetComponent<Renderer>().material;
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void FixedUpdate () {
|
|
|
|
if (Time.time - lastTransition >= waitTime) {
|
|
lastTransition = Time.time;
|
|
StartCoroutine(transition(transistionSpeed));
|
|
}
|
|
|
|
}
|
|
|
|
private IEnumerator transition(float time) {
|
|
|
|
float transitionStart = -1;
|
|
float transitionEnd = 1;
|
|
|
|
if (inverseDirection) {
|
|
mat.SetFloat("_InvertMap", 1);
|
|
}else {
|
|
mat.SetFloat("_InvertMap", 0);
|
|
}
|
|
|
|
float elapsedTime = 0;
|
|
float transitionFrac = transitionStart;
|
|
|
|
while ((elapsedTime/ time) <=1) {
|
|
transitionFrac = Mathf.Lerp(transitionStart, transitionEnd, (elapsedTime / time));
|
|
|
|
|
|
transitionFrac = (inverseDirection)? transitionFrac : -transitionFrac;
|
|
|
|
mat.SetFloat("_TimeNode", transitionFrac);
|
|
|
|
elapsedTime += Time.deltaTime;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
if (inverseDirection) {
|
|
mat.SetFloat("_TimeNode", 1);
|
|
} else {
|
|
mat.SetFloat("_TimeNode", -1);
|
|
}
|
|
|
|
inverseDirection = !inverseDirection;
|
|
}
|
|
|
|
|
|
}
|