Unity 精灵图集Shader渲染错乱
原因 在使用 Unity 开发游戏过程中,UI 界面上的表现有着举足轻重的地位,优秀的表现效果可以让游戏增色不少。要让 UI 精灵图片有独特的表现效果,需要给图片加上特定的 Shader 着色器,这样一来就能让这个图片表现出独特的效果,比如:溶解、消失等等。然而,在使用中,因为精灵被打包到图集里面,运行起来的效果大相径庭,Shader 里面 uv 坐标不再是单个图片的坐标了,而是图集里面该图片的坐标,使得 Shader 计算错误,最终渲染错乱。 例子 当前测试版本:Unity 5.3.0 测试工程地址: https://github.com/akof1314/uGUISpriteInAtlasShader 正确的表现: 错误的表现: 包含该图片的图集: 图片位于图集的左下角,进行扭曲效果计算时,使用了图集的中心位置,导致出错。 解决 将单个图片的纹理坐标保存到 UV1 中,传递单个图片的纹理坐标和在图集中纹理坐标的比例关系。 纹理坐标 单个图片的纹理基本是(0,0),(0,1),(1,1),(1,0),UGUI 中图片控件只使用了 UV0,那么就可以将单个图片的纹理保存到 UV1 中。 继承 BaseMeshEffect ,重载 ModifyMesh 方法,代码如下: using UnityEngine; using UnityEngine.UI; public class