首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之运行时修改粒子特效镜像以及缩放(八十)
2015
05-13

Unity3D研究院之运行时修改粒子特效镜像以及缩放(八十)

刚好这几天有朋友问我,我也刚好整理一下。

1.先说非运行时,AssetStore有一个叫Particle Scaler的插件,非常好用。但是很遗憾它运行时不能用。

2.再说运行时,就是让transform的scale可以控制粒子的缩放,如果设置-1就是粒子镜像。

首先,把unity的shader下载下来。http://unity3d.com/cn/get-unity/download/archive 找到所有Particle开头的shader,也就是粒子特效用的。

下面我随便改一个shader,其他的shader修改方法原理一样。 注:shader 中 ”//—Add—“ 就是我修改的内容

接着给需要缩放或者镜像的粒子挂上这一条脚本。利用OnWillRenderObject方法,将粒子的缩放以及坐标传进shader中去。

OK.这样粒子就完成了镜像。。 编辑器中快改一改transform的scale的值看看效果吧。

Unity3D研究院之运行时修改粒子特效镜像以及缩放(八十) - 雨松MOMO程序研究院 - 1

工程代码:http://pan.baidu.com/s/1i34B7Dj

如果你还有更好的办法来做粒子镜像或者旋转,欢迎在下面留言。谢谢~祝大家学习愉快~

感谢楼下好友的补充。

如果特效层级多,旋转嵌套复杂,如果只用lossyScale是不正确的。
应该保持特效层级中的scale为1,1,1然后修改以上脚本:
GetComponent().material.SetVector(“_Scale”, new Vector3(transform.localScale.x * (transform.lossyScale.x < 0 ? -1.0f : 1.0f), transform.localScale.y * (transform.lossyScale.y < 0 ? -1.0f : 1.0f), transform.localScale.z * (transform.lossyScale.z < 0 ? -1.0f : 1.0f)));

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 感谢你的分享。请问修改镜像的_InvFade应该怎么做呢? 试了一点效果都没有。_InvFade在镜子里面的值是最大值,并且完全不随调节而变化。

  2. 其实跟用Particle.startSize效果是一样的,可以GetComponentsInChildren()拿出来,修改startsize即可,不过unity4以上版本,模块数据并不开放,所以如果美术使用了模块数据的话,就无法修改了,不知道如何解决,看了下Particle Scaler就是用的unityeditor下的SerializedObject获取模块数据,但是这玩意只能在编辑器里玩玩。。。

  3. momo,你好,请问下skinnedmesh合并以后的模型为什么修改缩放没有效果? 如何才能修改缩放以后的模型?

  4. 报错了Assets/resources/script/ParticleScaler.cs(8,17): error CS0411: The type arguments for method `UnityEngine.Component.GetComponent()’ cannot be inferred from the usage. Try specifying the type arguments explicitly

  5. 如果特效层级多,旋转嵌套复杂,如果只用lossyScale是不正确的。应该保持特效层级中的scale为1,1,1然后修改以上脚本:GetComponent().material.SetVector(“_Scale”, new Vector3(transform.localScale.x * (transform.lossyScale.x < 0 ? -1.0f : 1.0f), transform.localScale.y * (transform.lossyScale.y < 0 ? -1.0f : 1.0f), transform.localScale.z * (transform.lossyScale.z < 0 ? -1.0f : 1.0f)));

  6. 最近也在做粒子的缩放和镜像,也坑了很久,谢谢博主的分享。因为我的功能目前暂时只会在编辑器里使用,所以目前运行使还是使用Particle Scaler配合修改y旋转来实现,但是会有一些细节问题。之后试试博主提供的方式 Unity3D研究院之运行时修改粒子特效镜像以及缩放(八十) - 雨松MOMO程序研究院 - 1 多谢

  7. 雨松大神,我最近在研究unity的性能优化,http://matrix.unity3d.com/main.html,这个Unity新推出的功能不知道你有没有用过我想咨询下,你知道他这个是怎么实现的吗,我们可以自己实现类似的吗?