团结从透明度中淡出并不起作用

时间:2015-11-13 14:15:31

标签: c# unity3d transparency fade

我遇到了一个带有素材淡出的游戏对象的问题。在Unity 3D项目中淡入。

我在每个资产上都有一个脚本,其中包含一个返回需要更改的材料数组的函数。我使用辅助设备:

 public float timeToDisappear = 2.0f;

 void ChangeMaterialtoTransparent (Material mat) {...}

 void ChangeMaterialtoFade (Material mat) {...}

 void ChangeMaterialToOpaque(Material mat) {...}

每个淡入淡出对象都有一个InvisibilityField字段,该字段返回其部分中的材质。数组中的所有InvisibilityField。

当材料褪色的时间到来时,我声称其材料并使用

    void FadeOverTime( Material[] mats)
     {
         foreach (Material mat in mats) 
         {
                 ChangeMaterialtoFade (mat);
             StartCoroutine(TurnInvisible(mats));
         }
     }

// TurnInvisible的代码最后是因为它不是问题而且工作正常

一切都很好。

但是当试图将它重新放回时

IEnumerator ShowAndWait(Material[] mats,int index)
     {

         yield return StartCoroutine(Show(mats, index));
         foreach (Material mat in mats) {
         ChangeMaterialToOpaque (mat);
     }


 IEnumerator Show(Material[] mats, int index)
     {
         float startTime = Time.time;
         InvisibilityField VF = _visibilityComponents [index]; 
         while (Time.time < startTime + timeToDisappear)
         {
             foreach (Material m in mats)
             {
                 float target = VF.GetOpacityLevel(m);
                 float tmp = Mathf.Lerp(0.0f,target,(Time.time - startTime)/timeToDisappear);
                 FadeColorTolevel(m,tmp);
                 print (m.name + "opacity is " + tmp + " as for " + (Time.time - startTime)/timeToDisappear);
             }
             yield return null;
         }
     }
     void FadeColorTolevel(Material mat, float lvl)
     {
         Color Col = mat.color;
         Col.a = lvl;
         mat.color = Col;
     }

只显示一些材料(它的1个模型与多材料)其他仍然不可见 - 有时2个不同的部分使用相同的材​​料1显示,1个不显示。

打印功能的打印结果表明所有材料已经被打印到0.995。

淡出功能几乎与淡出功能完全相同,因此我不知道自己做错了什么。

我使用Unity 5.2.0f3。 //作为帮助者,这是可以正常工作的隐身代码

IEnumerator TurnInvisible(Material[] mats)
     {
         float startTime = Time.time;
         while (Time.time < startTime + timeToDisappear)
         {
             foreach (Material m in mats)
             {
                 float tmp = Mathf.Lerp(1.0f,0.0f,(Time.time -       startTime)/timeToDisappear);
                 FadeColorTolevel(m,tmp);
             }
             yield return null;
         }
     }

1 个答案:

答案 0 :(得分:1)

问题解决了。造成混乱是因为材料设置为淡化而不是透明。我不知道有什么不同,但似乎解决了这个问题