fix: UIParticleAttractor attracts the particles at wrong position when in RelativeMode

close #262
mob-sakai 2023-08-14 23:01:46 +09:00
parent 65770cadda
commit 174af4bf7b
1 changed files with 19 additions and 16 deletions

View File

@ -169,29 +169,32 @@ namespace Coffee.UIExtensions
var psPos = m_ParticleSystem.transform.position; var psPos = m_ParticleSystem.transform.position;
var attractorPos = transform.position; var attractorPos = transform.position;
var dstPos = attractorPos; 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); dstPos = m_ParticleSystem.transform.InverseTransformPoint(dstPos);
if (isUI)
{
dstPos = dstPos.GetScaled(_uiParticle.transform.localScale, _uiParticle.scale3D.Inverse());
}
} }
else
if (isUI)
{ {
#if UNITY_EDITOR dstPos = dstPos.GetScaled(_uiParticle.transform.localScale, _uiParticle.scale3D.Inverse());
if (!Application.isPlaying && isUI)
// Relative mode
if (!_uiParticle.absoluteMode)
{ {
var diff = dstPos - psPos; var diff = _uiParticle.transform.position - psPos;
diff = diff.GetScaled(_uiParticle.transform.localScale, _uiParticle.scale3D.Inverse()); diff.Scale(_uiParticle.scale3D - _uiParticle.transform.localScale);
return psPos + diff; 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 #endif
if (isUI)
{
dstPos.Scale(_uiParticle.transform.localScale);
dstPos.Scale(_uiParticle.scale3D.Inverse());
}
} }
return dstPos; return dstPos;
} }