Unity中使用VectorGraphics插件时,VectorUtils.RenderSpriteToTexture2D方法返回结果错误的解决方法

Unity中使用VectorGraphics插件时,如果使用VectorUtils.BuildSprite方法创建Sprite,那么得到的Sprite往往是一个三角网格数比较多的Sprite,如果想要得到使用贴图只有两个三角面的方形Sprite,可以使用该插件提供的VectorUtils.RenderSpriteToTexture2D方法把Sprite的网格生成贴图再贴回到只有两个三角面的Sprite上去使用。

但是在实际使用时会出现命名在编辑器里面显示正确的结果,但是发布(目前只是测试在WebGL平台发布的结果,别的平台没有测试)之后却空空如也,Sprite消失不见了,问题实际上就是VectorUtils.RenderSpriteToTexture2D这个方法生成Texture2D纹理失败。

这个问题可以说是看起来复杂,其实一点儿都不简单:D

看一下VectorUtils.RenderSpriteToTexture2D这个方法的源码,一切问题就都清楚了。

注意一下第397行、415行、424行,这个分别使用Shader名称的方式来获取Shader进行渲染,这在编辑器里面当然一定会成立,但是发布出来之后,如果没有保证这些Shader被打包进发布的文件中的话,这些Shader就无法通过名称查找到了。

这些Shader的位置如下图所示:

以前遇到这种问题,我的解决办法简单粗暴,弄个脚本,在脚本里面序列化一个Shader数组,然后把脚本挂到一个物体上去,在脚本上引用这三个Shader,再次发布,搞定。

后来发现也可以再ProjectSetting的Graphics里面设置,如下图:

需要说明的是,我在使用VectorUtils.RenderSpriteToTexture2D这个方法的时候,里面的expandEdges使用了默认的false,所以只是添加了一个"Hiddren/VectorDemultiply"的Shader的引用,如果你使用VectorUtils.RenderSpriteToTexture2D这个方法的时候,参数expandEdges的值有可能是true,那么要把另外两个Shader也添加进去。

相关推荐
异次元的归来7 小时前
Unity DOTS中的share component
unity·游戏引擎
向宇it10 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
_oP_i12 小时前
unity webgl部署到iis报错
unity
Go_Accepted12 小时前
Unity全局雾效
unity
向宇it12 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
每日出拳老爷子15 小时前
【图形渲染】【Unity Shader】【Nvidia CG】有用的参考资料链接
unity·游戏引擎·图形渲染
北海651616 小时前
Dots 常用操作
unity
YY-nb1 天前
Unity Apple Vision Pro 开发教程:物体识别跟踪
unity·游戏引擎·apple vision pro
Cool-浩1 天前
Unity 开发Apple Vision Pro物体识别追踪ObjectTracking
unity·ar·apple vision pro·mr·物体识别·vision pro教程·objecttracking
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则