Unity UI通过Mask裁切粒子特效

Unity UI通过Mask裁切粒子特效,第1张

在项目中使用ScrollView来滑动Item,然后item上挂着特效,这个时候如果滑动区域到达mask区域外,item里的图片信息被裁切隐藏,但是特效不会就想做一个把特效一起裁切掉的方法。

首先我们要知道图片信息是怎么被mask裁切掉的。

图片被裁切主要是Material信息里增加了Stencil信息。

这样在UI绘制的时候就会进行模板测试。这里就不具体介绍模板测试了,就只是简单讲述一下。

模板测试就好比一个画出一个矩形,渲染的时候会对矩形里的像素点进行测试,只有满足模板条件的像素点才能保留,不满足的像素点将被抛弃掉。

现在我们只需要按照裁切图片信息的想法去让特效也被裁切掉就好了。

当我们的特效加上上来后,先是获取Canvas,在获取他的StencilDepth,当StencilDepth大于0,修改特效原本的Material成我们特制的就好啦。

将上面的脚本加载在我们的粒子上,运行游戏的时候有可能会出现下面的情况

这个提示是因为我们这个粒子的shader上缺少stencil方面的变量,只需要在对应的shader里添加就可以了。

添加完后可以查看shader变量里会有这个几个,这样才可以成功的添加Stencil信息。

如果你做到这步你的粒子还是没有正确的被裁切,需要在粒子中选择Render里的Masking选择 Visible inside Mask

如果上一步 *** 作后你还是没有看到你的粒子显示在正确的区域内,你可以设置粒子的sort值。

本质上其实这里的裁切就是让特效去参与模板测试从而达到我们想要的裁切效果。

用unity自带的partical system,那个就是粒子特效,炉石就是那样实现的,ngui主要用于做ui界面,做不了特效,炉石的特效都是3d的,并且很多是shader实现,你可以搜索unity partical system以及shader教程

问题还是出在粒子的sorting fudge。在unity的2d模式下,游戏本身的背景相当于是sorting fudge的0,当你把粒子的sorting fudge设为0以上的时候,粒子就都会被背景盖住。所以在3d模式下给alpha正值来给add垫底的话,到了2d模式下就会通通不显示。所以遇上这样的情况就把每个粒子的sorting fudge都改成负值就可以了。另外粒子界面的上方有一个layer选项,这个layer选项要设置成ui。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11743084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存