2015-12-12 31 views
0

我的場景中有81個遊戲對象。當我參加三場比賽時,狀態很健康。但是當我訪問腳本中的渲染器時,批處理會爲每個對象計數增加。在我訪問所有對象的渲染器後,情況變得很糟糕。爲什麼訪問渲染器時批量會增加?

之前:批次:3 |通過配料保存:80 | FPS:近400個

後:批次:83 |通過配料保存:0 | FPS:約200

代碼:transform.GetComponent<Renderer>().material.color = Color32.Lerp(start_color, target_color,t);

我覺得這個問題是有道理的。 「爲什麼Unity3D在渲染器被訪問之前沒有花費一個批次的對象?即使在我完成了遊戲對象的工作之後,爲什麼批量計數仍然有效?」


更新: 1.即使我簡單地訪問渲染而不改變它,它的成本一批永不它就會遞減。

start_color = transform.GetComponent<Renderer>().material.color; 
  • 我通過線性插值改變顏色縮放的對象。在檢查器中,材質被重命名爲mat(實例)。

  • 我試過使用sharedMaterial。現在批量計數穩定爲3,但所有81個對象都變爲相同的顏色。 故事:81可以更新爲灰度不同的低,中,高三種狀態。我需要將他們分組,當更新時。

  • 回答

    1

    每當您更改材質的任何屬性時,都會創建該材質的一個實例。這就是爲什麼你的對象不能通過批處理來保存。

    +0

    我需要我的對象來保持三種狀態之間的更新。是否可以將要在三個共享材料之間使用的對象分組以實現批量計數3? –

    +0

    @DistractionArrestor你可以試試這個技巧:創建三個材質(用於你的狀態)並在必要時切換它們。 –

    1

    @VladislavKurenkov是對的。還有另一個竅門,但它不適用於所有情況 - 而不是通過GetComponent()。材料僅引用材料的公共變量。然後修改任何你想要的變量,所有的變換都會受到影響。只需將您資產中的材料輸入檢查員插槽即可。這將節省批次。

    +0

    @DistractionArrestor我不認爲這是你的情況。如果你想單獨操縱不同的物體,那麼你應該遵循弗拉季斯拉夫的建議。我發佈了這個,以便其他開發人員可能會發現它有幫助,或者至少有一些信息。 –