This plugin provide a component to render particle effect for uGUI in Unity 2018.2 or later.
The particle rendering is maskable and sortable, without Camera, RenderTexture or Canvas.
<< Description | Demo | Installation | Usage | Development Note | Change log >>
This plugin uses new APIs MeshBake/MashTrailBake
(added with Unity 2018.2) to render particles by CanvasRenderer.
You can mask and sort particles for uGUI without Camera, RenderTexture, Canvas.
Compares this "Baking mesh" approach with the conventional approach:
Performance test results
Approach | Good | Bad | Screenshot |
---|---|---|---|
Baking mesh (UIParticle) |
Rendered as is. Maskable. Sortable. Less objects. |
Not support TEXCOORD*.zw components for custom vertex stream |
![]() |
Do nothing | Rendered as is. | Looks like a glitch. Not maskable. Not sortable. |
![]() |
Convert particle to UIVertex (UIParticleSystem) |
Maskable. Sortable. Less objects. |
Adjustment is difficult. Requires UI shaders. Difficult to adjust scale. Force hierarchy scalling. Simulation results are incorrect. Trail, rotation of transform, time scaling are not supported. Generate heavy GC every frame. |
![]() |
Use Canvas to sort | Rendered as is. Sortable. |
You must to manage sorting orders. Not maskable. More batches. |
![]() |
Use RenderTexture | Maskable. Sortable. |
Requires Camera and RenderTexture. Difficult to adjust position and size. Quality depends on the RenderTexture's setting. |
![]() |
Approach | FPS on Editor | FPS on iPhone6 | FPS on Xperia XZ |
---|---|---|---|
Particle System | 43 | 57 | 22 |
UIParticleSystem | 4 | 3 | 0 (unmeasurable) |
Sorting By Canvas | 43 | 44 | 18 |
UIParticle | 17 | 12 | 4 |
UIParticle with MeshSharing | 44 | 45 | 30 |
This package is available on OpenUPM.
You can install it via openupm-cli.
openupm add com.coffee.ui-particle
Find the manifest.json file in the Packages folder of your project and add a line to dependencies
field.
"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git"
To update the package, change suffix #{version}
to the target version.
"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git#4.0.0",
Or, use UpmGitExtension to install and update the package.
Unity 2018.2 supports embedded packages.
Packages
directory in your Unity projectPackage Manager
windowUI Particle
package in package listImport Sample
buttonAssets/Samples/UI Particle/{version}/Demo
UIParticle_Demo
scene and play itAssets/Samples/UI Particle Demo
from menuAssets/Samples/UI Particle/{version}/Demo
UIParticle_Demo
scene and play itCartoon FX & War Fx Demo
UIParticle
controls the ParticleSystems that is attached to its own game objects and child game objects.
Properties | Description |
---|---|
Maskable | Does this graphic allow masking. |
Ignore Canvas Scale | Ignore the scale of the root canvas. This prevents it from displaying small even in hierarchy scaling mode of ParticleSystem . |
Scale | Scale the rendering. When the 3D toggle is enabled, 3D scale (x,y,z) is supported. |
Animatable Properties | If you want update material properties (e.g. _MainTex_ST , _Color ) in AnimationClip, use this to mark the changes. |
Mesh Sharing | Particle simulation results are shared within the same group. A large number of the same effects can be displayed with a small load. When the Random toggle is enabled, it will be grouped randomaly. |
Absolute Mode | The particles will be emitted at the ParticleSystem position. Move the UIParticle/ParticleSystem to move the particle. |
Rendering Order | The ParticleSystems to be rendered. You can change the rendering order and the materials. |
NOTE: Press Refresh
button to reconstruct rendering order based on children ParticleSystem's sorting order and z position.
Game Object/UI/ParticleSystem
to create UIParticle with a ParticleSystem.Game Object/UI/ParticleSystem (Empty)
to create UIParticle.Mask
or MaskRect2D
componentIf you want to mask particles, set a stencil supported shader (such as UI/UIAdditive
) to material for ParticleSystem.
// Instant ParticleSystem prefab with UIParticle on runtime.
var go = GameObject.Instantiate(prefab);
var uiParticle = go.AddComponent<UIParticle>();
// Control by ParticleSystem.
particleSystem.Play();
particleSystem.Emit(10);
// Control by UIParticle.
uiParticle.Play();
uiParticle.Stop();
UIParticleAttractor
attracts particles generated by the specified ParticleSystem.
Properties | Description |
---|---|
Particle System | Attracts particles generated by the specified particle system. |
Distination Radius | Once the particle is within the radius, the particle lifetime will become 0 and OnAttracted will be called. |
Delay Rate | Delay to start attracting. It is a percentage of the particle's start lifetime. |
Max Speed | Maximum speed of attracting. If this value is too small, attracting may not be completed by the end of the lifetime and OnAttracted may not be called. |
Movement | Attracting movement type. (Linear, Smooth, Sphere) |
OnAttracted | An event called when attracting is complete (per particle). |
UIParticles are based on UIVertex.
Therefore, only xy components is available for each UV in the shader. (zw components will be ignored).
So unfortunately UIParticles will not work well with some shaders.
When using custom vertex streams, you can fill zw components with "unnecessary" data.
https://github.com/mob-sakai/ParticleEffectForUGUI/issues/191
UI/Additive
shader instead.UI/Default
shader instead.UIParticle has some overheads and the batching depends on uGUI.
When improving performance, keep the following in mind:
Mesh Sharing
feature in UIParticle Component.
Random Group
feature.Sprite
mode in the Texture Sheet Animation
module in ParticleSystem.Issues are very valuable to this project.
Pull requests are, a great way to get your ideas into this repository.
See CONTRIBUTING.md.
This is an open source project that I am developing in my spare time.
If you like it, please support me.
With your support, I can spend more time on development.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。