From 174af4bf7b33cca317130cdecd23bd5854817d69 Mon Sep 17 00:00:00 2001 From: mob-sakai Date: Mon, 14 Aug 2023 23:01:46 +0900 Subject: [PATCH] fix: UIParticleAttractor attracts the particles at wrong position when in RelativeMode close #262 --- Scripts/UIParticleAttractor.cs | 35 ++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/Scripts/UIParticleAttractor.cs b/Scripts/UIParticleAttractor.cs index 303e4f2..0dacf94 100644 --- a/Scripts/UIParticleAttractor.cs +++ b/Scripts/UIParticleAttractor.cs @@ -169,29 +169,32 @@ namespace Coffee.UIExtensions var psPos = m_ParticleSystem.transform.position; var attractorPos = transform.position; var dstPos = attractorPos; - if (m_ParticleSystem.main.simulationSpace == ParticleSystemSimulationSpace.Local) + var isLocalSpace = m_ParticleSystem.main.simulationSpace == ParticleSystemSimulationSpace.Local; + + if (isLocalSpace) { dstPos = m_ParticleSystem.transform.InverseTransformPoint(dstPos); - if (isUI) - { - dstPos = dstPos.GetScaled(_uiParticle.transform.localScale, _uiParticle.scale3D.Inverse()); - } } - else + + if (isUI) { -#if UNITY_EDITOR - if (!Application.isPlaying && isUI) + dstPos = dstPos.GetScaled(_uiParticle.transform.localScale, _uiParticle.scale3D.Inverse()); + + // Relative mode + if (!_uiParticle.absoluteMode) { - var diff = dstPos - psPos; - diff = diff.GetScaled(_uiParticle.transform.localScale, _uiParticle.scale3D.Inverse()); - return psPos + diff; + var diff = _uiParticle.transform.position - psPos; + diff.Scale(_uiParticle.scale3D - _uiParticle.transform.localScale); + diff.Scale(_uiParticle.scale3D.Inverse()); + dstPos += diff; + } + +#if UNITY_EDITOR + if (!Application.isPlaying && !isLocalSpace) + { + dstPos += psPos - psPos.GetScaled(_uiParticle.transform.localScale, _uiParticle.scale3D.Inverse()); } #endif - if (isUI) - { - dstPos.Scale(_uiParticle.transform.localScale); - dstPos.Scale(_uiParticle.scale3D.Inverse()); - } } return dstPos; }