From 0cf4ae88c5d31a7bd97142dc95696f4f111f6321 Mon Sep 17 00:00:00 2001
From: mob-sakai <sakai861104@gmail.com>
Date: Fri, 24 May 2024 17:36:35 +0900
Subject: [PATCH] fix: the ParticleSystem's localPosition drifts at certain
 scales due to floating-point precision issues

close #299, close #312
---
 Runtime/UIParticleRenderer.cs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/Runtime/UIParticleRenderer.cs b/Runtime/UIParticleRenderer.cs
index 5096049..4c7879c 100644
--- a/Runtime/UIParticleRenderer.cs
+++ b/Runtime/UIParticleRenderer.cs
@@ -614,6 +614,8 @@ namespace Coffee.UIExtensions
             // get world position.
             var isLocalSpace = _particleSystem.IsLocalSpace();
             var psTransform = _particleSystem.transform;
+            var originLocalPosition = psTransform.localPosition;
+            var originLocalRotation = psTransform.localRotation;
             var originWorldPosition = psTransform.position;
             var originWorldRotation = psTransform.rotation;
             var emission = _particleSystem.emission;
@@ -636,7 +638,8 @@ namespace Coffee.UIExtensions
                 : originWorldPosition.GetScaled(scale.Inverse());
             psTransform.SetPositionAndRotation(scaledPos, originWorldRotation);
             _particleSystem.Simulate(deltaTime, false, false, false);
-            psTransform.SetPositionAndRotation(originWorldPosition, originWorldRotation);
+            psTransform.localPosition = originLocalPosition;
+            psTransform.localRotation = originLocalRotation;
         }
 
 #if UNITY_EDITOR