第五章 颜色映射与职业动画
五 修正颜色转换器(Fix ColorSwapper)
1 修正颜色转换器
我们已经知道是由于Animator每次执行动画时都会重置SpriteRenderer的参数所导致的,所以只要在它重置完参数后,重新用我们的MaterialPropertyBlock覆盖就好了。
在这里我们使用Unity的Callback中的LateUpdate。在Update之后运行,也同时在Animator之后运行。
打开ColorSwapper.cs,并添加LateUpdate:
private void LateUpdate() { if (renderer != null && renderer.sprite != null && m_SwapMaterialBlock != null) { // 如果有SpriteRenderer的动画,必须每帧调用才有效 renderer.SetPropertyBlock(m_SwapMaterialBlock); } }
删除Start方法中的renderer.SetPropertyBlock(m_SwapMaterialBlock):
private void Start() { if (!string.IsNullOrEmpty(m_StartChart)) { SwapColors(m_StartChart); } }
再添加OnDestroy方法:
private void OnDestroy() { if (m_MainTexture != null) { m_MainTexture = null; } if (m_SwapMaterialBlock != null) { m_SwapMaterialBlock = null; } }
2 再次测试颜色映射
再次点击“Play”按钮启动游戏,颜色成功映射。
图 5 - 11再次测试
就算加上动画,也完全没有问题。