我正在尝试使3D对象褪色。我发现一个脚本正在工作(我的一个也在工作),但是我有一个奇怪的行为。渐隐效果实际上在“场景”选项卡中正常运行,但在“游戏”选项卡中却不正常,因此,当玩游戏时,我得到了错误的效果。
为什么我会有这种奇怪的行为?为什么在选项卡中工作而不在另一个中工作?似乎在游戏标签中
这是我的代码
using UnityEngine;
using System.Collections;
public class FadeObjectInOut : MonoBehaviour
{
// publically editable speed
public float fadeDelay = 0.0f;
public float fadeTime = 0.5f;
public bool fadeInOnStart = false;
public bool fadeOutOnStart = false;
private bool logInitialFadeSequence = false;
// store colours
private Color[] colors;
// allow automatic fading on the start of the scene
IEnumerator Start ()
{
//yield return null;
yield return new WaitForSeconds (fadeDelay);
if (fadeInOnStart)
{
logInitialFadeSequence = true;
FadeIn ();
}
if (fadeOutOnStart)
{
FadeOut (fadeTime);
}
}
// check the alpha value of most opaque object
float MaxAlpha()
{
float maxAlpha = 0.0f;
Renderer[] rendererObjects = GetComponentsInChildren<Renderer>();
foreach (Renderer item in rendererObjects)
{
maxAlpha = Mathf.Max (maxAlpha, item.material.color.a);
}
return maxAlpha;
}
// fade sequence
IEnumerator FadeSequence (float fadingOutTime)
{
// log fading direction, then precalculate fading speed as a multiplier
bool fadingOut = (fadingOutTime < 0.0f);
float fadingOutSpeed = 1.0f / fadingOutTime;
// grab all child objects
Renderer[] rendererObjects = GetComponentsInChildren<Renderer>();
if (colors == null)
{
//create a cache of colors if necessary
colors = new Color[rendererObjects.Length];
// store the original colours for all child objects
for (int i = 0; i < rendererObjects.Length; i++)
{
colors[i] = rendererObjects[i].material.color;
}
}
// make all objects visible
for (int i = 0; i < rendererObjects.Length; i++)
{
rendererObjects[i].enabled = true;
}
// get current max alpha
float alphaValue = MaxAlpha();
// This is a special case for objects that are set to fade in on start.
// it will treat them as alpha 0, despite them not being so.
if (logInitialFadeSequence && !fadingOut)
{
alphaValue = 0.0f;
logInitialFadeSequence = false;
}
// iterate to change alpha value
while ( (alphaValue >= 0.0f && fadingOut) || (alphaValue <= 1.0f && !fadingOut))
{
alphaValue += Time.deltaTime * fadingOutSpeed;
for (int i = 0; i < rendererObjects.Length; i++)
{
Color newColor = (colors != null ? colors[i] : rendererObjects[i].material.color);
newColor.a = Mathf.Min ( newColor.a, alphaValue );
newColor.a = Mathf.Clamp (newColor.a, 0.0f, 1.0f);
rendererObjects[i].material.SetColor("_Color", newColor) ;
}
yield return null;
}
// turn objects off after fading out
if (fadingOut)
{
for (int i = 0; i < rendererObjects.Length; i++)
{
rendererObjects[i].enabled = false;
}
}
Debug.Log ("fade sequence end : " + fadingOut);
}
void FadeIn ()
{
FadeIn (fadeTime);
}
void FadeOut ()
{
FadeOut (fadeTime);
}
void FadeIn (float newFadeTime)
{
StopAllCoroutines();
StartCoroutine("FadeSequence", newFadeTime);
}
void FadeOut (float newFadeTime)
{
StopAllCoroutines();
StartCoroutine("FadeSequence", -newFadeTime);
}
// These are for testing only.
void Update()
{
if (Input.GetKeyDown (KeyCode.Alpha0) )
{
FadeIn();
}
if (Input.GetKeyDown (KeyCode.Alpha9) )
{
FadeOut();
}
}
}