Compare commits

...

4 Commits
4.1.4 ... 4.1.6

Author SHA1 Message Date
semantic-release-bot
5e6da2e158 chore(release): 4.1.6 [skip ci]
## [4.1.6](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/4.1.5...4.1.6) (2022-08-10)

### Bug Fixes

* fix abnormal mesh bounds error ([f60d6df](f60d6dfe60)), closes [#213](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/213) [#218](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/218)
2022-08-10 07:46:41 +00:00
takashi.sakai
f60d6dfe60 fix: fix abnormal mesh bounds error
close #213, close #218
2022-08-10 16:45:50 +09:00
semantic-release-bot
c795d24003 chore(release): 4.1.5 [skip ci]
## [4.1.5](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/4.1.4...4.1.5) (2022-08-10)

### Bug Fixes

* fix culling for RectMask2D ([9e2dbe7](9e2dbe7758)), closes [#220](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/220)
2022-08-10 01:44:58 +00:00
takashi.sakai
9e2dbe7758 fix: fix culling for RectMask2D
close #220
2022-08-10 10:31:50 +09:00
3 changed files with 65 additions and 5 deletions

View File

@@ -1,3 +1,17 @@
## [4.1.6](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/4.1.5...4.1.6) (2022-08-10)
### Bug Fixes
* fix abnormal mesh bounds error ([f60d6df](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/f60d6dfe6030ac89527a4265e414e9a0a20d56db)), closes [#213](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/213) [#218](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/218)
## [4.1.5](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/4.1.4...4.1.5) (2022-08-10)
### Bug Fixes
* fix culling for RectMask2D ([9e2dbe7](https://github.com/mob-sakai/ParticleEffectForUGUI/commit/9e2dbe7758eb28a4f6a7c11113d9169847880f96)), closes [#220](https://github.com/mob-sakai/ParticleEffectForUGUI/issues/220)
## [4.1.4](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/4.1.3...4.1.4) (2022-07-01) ## [4.1.4](https://github.com/mob-sakai/ParticleEffectForUGUI/compare/4.1.3...4.1.4) (2022-07-01)

View File

@@ -14,15 +14,14 @@ namespace Coffee.UIExtensions
internal class UIParticleRenderer : MaskableGraphic internal class UIParticleRenderer : MaskableGraphic
{ {
private static readonly CombineInstance[] s_CombineInstances = new CombineInstance[] { new CombineInstance() }; private static readonly CombineInstance[] s_CombineInstances = new CombineInstance[] { new CombineInstance() };
//private static ParticleSystem.Particle[] s_Particles = new ParticleSystem.Particle[2048];
private static readonly List<Material> s_Materials = new List<Material>(2); private static readonly List<Material> s_Materials = new List<Material>(2);
private static MaterialPropertyBlock s_Mpb; private static MaterialPropertyBlock s_Mpb;
private static readonly List<UIParticleRenderer> s_Renderers = new List<UIParticleRenderer>(); private static readonly List<UIParticleRenderer> s_Renderers = new List<UIParticleRenderer>();
private static readonly Vector3[] s_Corners = new Vector3[4];
private ParticleSystemRenderer _renderer; private ParticleSystemRenderer _renderer;
private ParticleSystem _particleSystem; private ParticleSystem _particleSystem;
internal int _prevParticleCount = 0; private int _prevParticleCount = 0;
//private ParticleSystem _emitter;
private UIParticle _parent; private UIParticle _parent;
private int _index; private int _index;
private bool _isTrail; private bool _isTrail;
@@ -33,6 +32,7 @@ namespace Coffee.UIExtensions
private bool _delay = false; private bool _delay = false;
private bool _prewarm = false; private bool _prewarm = false;
private Material _currentMaterialForRendering; private Material _currentMaterialForRendering;
private Bounds _lastBounds;
public override Texture mainTexture public override Texture mainTexture
{ {
@@ -50,6 +50,37 @@ namespace Coffee.UIExtensions
} }
} }
private Rect rootCanvasRect
{
get
{
s_Corners[0] = transform.TransformPoint(_lastBounds.min.x, _lastBounds.min.y, 0);
s_Corners[1] = transform.TransformPoint(_lastBounds.min.x, _lastBounds.max.y, 0);
s_Corners[2] = transform.TransformPoint(_lastBounds.max.x, _lastBounds.max.y, 0);
s_Corners[3] = transform.TransformPoint(_lastBounds.max.x, _lastBounds.min.y, 0);
if (canvas)
{
var worldToLocalMatrix = canvas.rootCanvas.transform.worldToLocalMatrix;
for (var i = 0; i < 4; ++i)
s_Corners[i] = worldToLocalMatrix.MultiplyPoint(s_Corners[i]);
}
var corner1 = (Vector2) s_Corners[0];
var corner2 = (Vector2) s_Corners[0];
for (var i = 1; i < 4; ++i)
{
if (s_Corners[i].x < corner1.x)
corner1.x = s_Corners[i].x;
else if (s_Corners[i].x > corner2.x)
corner2.x = s_Corners[i].x;
if (s_Corners[i].y < corner1.y)
corner1.y = s_Corners[i].y;
else if (s_Corners[i].y > corner2.y)
corner2.y = s_Corners[i].y;
}
return new Rect(corner1, corner2 - corner1);
}
}
public static UIParticleRenderer AddRenderer(UIParticle parent, int index) public static UIParticleRenderer AddRenderer(UIParticle parent, int index)
{ {
// Create renderer object. // Create renderer object.
@@ -123,6 +154,7 @@ namespace Coffee.UIExtensions
material = null; material = null;
workerMesh.Clear(); workerMesh.Clear();
canvasRenderer.SetMesh(workerMesh); canvasRenderer.SetMesh(workerMesh);
_lastBounds = new Bounds();
enabled = false; enabled = false;
} }
} }
@@ -188,6 +220,7 @@ namespace Coffee.UIExtensions
Profiler.BeginSample("[UIParticleRenderer] Clear Mesh"); Profiler.BeginSample("[UIParticleRenderer] Clear Mesh");
workerMesh.Clear(); workerMesh.Clear();
canvasRenderer.SetMesh(workerMesh); canvasRenderer.SetMesh(workerMesh);
_lastBounds = new Bounds();
Profiler.EndSample(); Profiler.EndSample();
return; return;
@@ -241,7 +274,7 @@ namespace Coffee.UIExtensions
} }
else else
{ {
s_CombineInstances[0].mesh.Clear(); s_CombineInstances[0].mesh.Clear(false);
} }
Profiler.EndSample(); Profiler.EndSample();
@@ -269,6 +302,7 @@ namespace Coffee.UIExtensions
extents.z = 0; extents.z = 0;
bounds.extents = extents; bounds.extents = extents;
workerMesh.bounds = bounds; workerMesh.bounds = bounds;
_lastBounds = bounds;
} }
Profiler.EndSample(); Profiler.EndSample();
@@ -286,6 +320,7 @@ namespace Coffee.UIExtensions
{ {
if (s_Renderers[i] == this) continue; if (s_Renderers[i] == this) continue;
s_Renderers[i].canvasRenderer.SetMesh(workerMesh); s_Renderers[i].canvasRenderer.SetMesh(workerMesh);
s_Renderers[i]._lastBounds = _lastBounds;
} }
if (!_parent.canRender) if (!_parent.canRender)
@@ -354,6 +389,17 @@ namespace Coffee.UIExtensions
{ {
} }
public override void Cull(Rect clipRect, bool validRect)
{
var cull = _lastBounds.extents == Vector3.zero || !validRect || !clipRect.Overlaps(rootCanvasRect, true);
if (canvasRenderer.cull == cull) return;
canvasRenderer.cull = cull;
UISystemProfilerApi.AddMarker("MaskableGraphic.cullingChanged", this);
onCullStateChanged.Invoke(cull);
OnCullingChanged();
}
private Vector3 GetWorldScale() private Vector3 GetWorldScale()
{ {
Profiler.BeginSample("[UIParticleRenderer] GetWorldScale"); Profiler.BeginSample("[UIParticleRenderer] GetWorldScale");

View File

@@ -2,7 +2,7 @@
"name": "com.coffee.ui-particle", "name": "com.coffee.ui-particle",
"displayName": "UI Particle", "displayName": "UI Particle",
"description": "This plugin provide a component to render particle effect for uGUI.\nThe particle rendering is maskable and sortable, without Camera, RenderTexture or Canvas.", "description": "This plugin provide a component to render particle effect for uGUI.\nThe particle rendering is maskable and sortable, without Camera, RenderTexture or Canvas.",
"version": "4.1.4", "version": "4.1.6",
"unity": "2018.2", "unity": "2018.2",
"license": "MIT", "license": "MIT",
"repository": { "repository": {