阿尔法不工作

时间:2014-11-09 01:46:31

标签: c# unity3d

我对这个脚本有一个问题:它应该创建一个带有alpha的黑色Quad,然后淡出它,然后是In,但是“淡化”部分看起来很有效。它只是变黑而不褪色。 这是我正在使用的代码:

 // AutoFade.cs
 using UnityEngine;
 using System.Collections;

 public class AutoFade : MonoBehaviour
 {
     private static AutoFade m_Instance = null;
     private Material m_Material = null;
     private string m_LevelName = "";
     private int m_LevelIndex = 0;
     private bool m_Fading = false;

     private static AutoFade Instance
     {
         get
         {
             if (m_Instance == null)
             {
                 m_Instance = (new GameObject("AutoFade")).AddComponent<AutoFade>();
             }
             return m_Instance;
         }
     }
     public static bool Fading
     {
         get { return Instance.m_Fading; }
     }

     private void Awake()
     {
         DontDestroyOnLoad(this);
         m_Instance = this;
         m_Material = new Material("Shader \"Plane/No zTest\" { SubShader { Pass { Blend SrcAlpha OneMinusSrcAlpha ZWrite Off Cull Off Fog { Mode Off } BindChannels { Bind \"Color\",color } } } }");
     }

     private void DrawQuad(Color aColor,float aAlpha)
     {
         aColor.a = aAlpha;
         m_Material.SetPass(0);
         GL.Color(aColor);
         GL.PushMatrix();
         GL.LoadOrtho();
         GL.Begin(GL.QUADS);
         GL.Vertex3(0, 0, -1);
         GL.Vertex3(0, 1, -1);
         GL.Vertex3(1, 1, -1);
         GL.Vertex3(1, 0, -1);
         GL.End();
         GL.PopMatrix();
     }

     private IEnumerator Fade(float aFadeOutTime, float aFadeInTime, Color aColor)
     {
         Debug.Log("Fading");
         float t = 0.0f;
         while (t<1.0f)
         {
             yield return new WaitForEndOfFrame();
             t = Mathf.Clamp01(t + Time.deltaTime / aFadeOutTime);
             DrawQuad(aColor,t);
             Debug.Log (t);
         }
         if (m_LevelName != "")
             Application.LoadLevel(m_LevelName);
         else 
             Application.LoadLevel(m_LevelIndex);
         while (t>0.0f)
         {
             yield return new WaitForEndOfFrame();
             t = Mathf.Clamp01(t - Time.deltaTime / aFadeInTime);
             DrawQuad(aColor,t);
             Debug.Log (t);
         }
         m_Fading = false;
     }
     private void StartFade(float aFadeOutTime, float aFadeInTime, Color aColor)
     {
         m_Fading = true;
         StartCoroutine(Fade(aFadeOutTime, aFadeInTime, aColor));
     }

     public static void LoadLevel(string aLevelName,float aFadeOutTime, float aFadeInTime, Color aColor)
     {
         if (Fading) return;
         Instance.m_LevelName = aLevelName;
         Instance.StartFade(aFadeOutTime, aFadeInTime, aColor);
     }
     public static void LoadLevel(int aLevelIndex,float aFadeOutTime, float aFadeInTime, Color aColor)
     {
         if (Fading) return;
         Instance.m_LevelName = "";
         Instance.m_LevelIndex = aLevelIndex;
         Instance.StartFade(aFadeOutTime, aFadeInTime, aColor);
     }
 }

..以下是我的称呼方式:

AutoFade.LoadLevel(Application.loadedLevel, 1f, 1f, Color.black);

谢谢!

0 个答案:

没有答案