2015-11-13 61 views
2

我有一個遊戲物件出現問題,材質淡出&在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

這是一個公平的代碼,但很難說實際問題是什麼,因爲這不是一個[簡短的獨立示例]( http://sscce.org/)。建議檢查哪些「墊子」正在傳遞給'ShowAndWait'。材料是否從該列表中丟失,或者被「_transparentMaterialsNames」檢查阻止?使用調試器跟蹤數據,並能夠找到問題。 – rutter

+0

夠公平的 主要問題是與 – user2956754

+0

謝謝,我證實,_transparentMaterialsNames不是問題,並編輯問題,以刪除不相關的部分。 所有材料都傳遞給ShowAndWait。 和一個打印檢查表明所有14種材料都是稀釋的。 它像m.color = Col的部分;不工作 – user2956754

回答

1

問題已解決。這個爛攤子是因爲材料被設置爲淡出而不是透明而造成的。我不知道什麼是不同的,但它似乎解決了這個問題