位置: 编程技术 - 正文
推荐整理分享Unity3d 人物换装之 一个Shader处理3张图片 减少DrawCall(unity2d角色换装),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:unity spine换装,unity人物换肤用什么方法,unity替换人物模型,unity换装游戏设计,unity2d角色换装,unity人物换肤用什么方法,unity中2d人物换装,unity人物换肤用什么方法,内容如对您有帮助,希望把文章链接给更多的朋友!
在上一篇
Unity3d人物换装之Mesh合并(材质合并)
中,我通过一个例子,将三个带有不同颜色 RGB的立方体,合并Mesh和材质到Character这一个GameObject中。这样原本对3个GameObject的操作只需要对Character这一个GameObject进行操作就好了。但是我们的任务还没有完成。
合并之前的游戏:
合并之后的游戏:
大家注意看合并之前和合并之后,虽然GameObject数量减少了,但是DrawCall一个都没有减少哦!之前是4个,合并之后仍然是4个。
简单的来说呢,就是一个材质球,一个DrawCall。也就是说呢,一个Shader,一个DrawCall。
既然知道了一个Shader一个DrawCall,那我们就开始着手去处理,把红、绿、蓝这三张图片,在一个Shader中进行处理,只使用一个材质球,这样就只有1个DrawCall了。
我们来创建一个Shader,就叫CombineShader吧,在默认的Shader代码基础上,删掉MainTex这个纹理,添加我们自己的三个纹理:_Red 、_Green 、_Blue .
在上面的未完成的Shader中,我取了_Red 的纹理来做取样。我们接着修改脚本代码,使合并之后的GameObject Character使用CombineShader创建的材质。
运行之后能看到,在Character这个GameObject使用的材质球中,需要输入三张纹理图片。
现在再看,DrawCall数量已经降到2了,也就是说,合并之后 由原来的3个DrawCall 降到了 1个DrawCall。
但是还是有问题呢,为什么只显示一个立方体,哈哈,是我们代码写错了。
应该改为
好了,这次可以显示了,但是为什么没有贴图?
为什么没有贴图?因为我们只是在Unity中设置了贴图,但是在Shader中还没有去使用它们。
将Shader修改如下:
我们看到在surf 中对顶点颜色的Alpha进行了判断处理,这是利用顶点色Color的属性,在代码中进行赋,来区分当前顶点原来是属于哪一个立方体的。比如说color.a是0,那么原来就属于红色立方体,就给它从红色纹理来取样。
最后看运行结果,DrawCall减少到2 ,Character也完整的显示出来了。
工程示例下载:
【猫猫的Unity Shader之旅】之简述3D图形学 上次我们说到一个完整的Shader的比较完整的框架,如果大家之前没有接触过3D相关的技术的话看起来可能会比较吃力,其实这也在猫猫的意料之中的。3D
Unity3D游戏开发之在Android视图中嵌入Unity视图 转载自:
UnityRandom介绍 介绍UnityRandom是一个针对Unity3D的伪随机数库,使用C#语言开发。代码和文档都在Github上。UnityRandom采用Mersennetwister伪随机数发生算法,能够快速产生高质
标签: unity2d角色换装
本文链接地址:https://www.jiuchutong.com/biancheng/384564.html 转载请保留说明!友情链接: 武汉网站建设