傳回目錄
第五章 顔色映射與職業動畫
五 修正顔色轉換器(Fix ColorSwapper)
1 修正顔色轉換器
我們已經知道是由于Animator每次執行動畫時都會重置SpriteRenderer的參數所導緻的,是以隻要在它重置完參數後,重新用我們的MaterialPropertyBlock覆寫就好了。
在這裡我們使用Unity的Callback中的LateUpdate。在Update之後運作,也同時在Animator之後運作。
打開ColorSwapper.cs,并添加LateUpdate:
删除Start方法中的renderer.SetPropertyBlock(m_SwapMaterialBlock):private void LateUpdate() { if (renderer != null && renderer.sprite != null && m_SwapMaterialBlock != null) { // 如果有SpriteRenderer的動畫,必須每幀調用才有效 renderer.SetPropertyBlock(m_SwapMaterialBlock); } }
再添加OnDestroy方法:private void Start() { if (!string.IsNullOrEmpty(m_StartChart)) { SwapColors(m_StartChart); } }
private void OnDestroy() { if (m_MainTexture != null) { m_MainTexture = null; } if (m_SwapMaterialBlock != null) { m_SwapMaterialBlock = null; } }
2 再次測試顔色映射
再次點選“Play”按鈕啟動遊戲,顔色成功映射。 圖 5 - 11再次測試
就算加上動畫,也完全沒有問題。