fix: despite not using the size module, particles become smaller based on their z position

close #316
mob-sakai 2024-06-20 12:16:28 +09:00
parent dfb94f4bad
commit c96ddf293e
1 changed files with 35 additions and 44 deletions

View File

@ -109,7 +109,7 @@ namespace Coffee.UIExtensions
private readonly List<UIParticleRenderer> _renderers = new List<UIParticleRenderer>(); private readonly List<UIParticleRenderer> _renderers = new List<UIParticleRenderer>();
private Canvas _canvas; private Canvas _canvas;
private int _groupId; private int _groupId;
private Camera _orthographicCamera; private Camera _bakeCamera;
private DrivenRectTransformTracker _tracker; private DrivenRectTransformTracker _tracker;
private Vector3 _storedScale; private Vector3 _storedScale;
private bool _isScaleStored; private bool _isScaleStored;
@ -671,56 +671,47 @@ namespace Coffee.UIExtensions
private Camera GetBakeCamera() private Camera GetBakeCamera()
{ {
if (!canvas) return Camera.main; if (!canvas) return Camera.main;
if (_bakeCamera) return _bakeCamera;
// When render mode is ScreenSpaceCamera or WorldSpace, use world camera. // Find existing baking camera.
var root = canvas.rootCanvas;
if (root.renderMode != RenderMode.ScreenSpaceOverlay)
{
return root.worldCamera ? root.worldCamera : Camera.main;
}
// When render mode is ScreenSpaceOverlay, use orthographic-camera.
if (!_orthographicCamera)
{
// Find existing orthographic-camera.
var childCount = transform.childCount; var childCount = transform.childCount;
for (var i = 0; i < childCount; i++) for (var i = 0; i < childCount; i++)
{ {
if (transform.GetChild(i).TryGetComponent<Camera>(out var cam) if (transform.GetChild(i).TryGetComponent<Camera>(out var cam)
&& cam.name == "[generated] UIParticleOverlayCamera") && cam.name == "[generated] UIParticle BakingCamera")
{ {
_orthographicCamera = cam; _bakeCamera = cam;
break; break;
} }
} }
// Create orthographic-camera. // Create baking camera.
if (!_orthographicCamera) if (!_bakeCamera)
{ {
var go = new GameObject("[generated] UIParticleOverlayCamera") var go = new GameObject("[generated] UIParticle BakingCamera")
{ {
hideFlags = HideFlags.HideAndDontSave // hideFlags = HideFlags.HideAndDontSave
hideFlags = HideFlags.DontSave
}; };
go.SetActive(false); go.SetActive(false);
go.transform.SetParent(transform, false); go.transform.SetParent(transform, false);
_orthographicCamera = go.AddComponent<Camera>(); _bakeCamera = go.AddComponent<Camera>();
_orthographicCamera.enabled = false;
}
} }
// // Setup baking camera.
_orthographicCamera.orthographicSize = 10; _bakeCamera.enabled = false;
_orthographicCamera.transform.SetPositionAndRotation(new Vector3(0, 0, -1000), Quaternion.identity); _bakeCamera.orthographicSize = 1000;
_orthographicCamera.orthographic = true; _bakeCamera.transform.SetPositionAndRotation(new Vector3(0, 0, -1000), Quaternion.identity);
_orthographicCamera.farClipPlane = 2000f; _bakeCamera.orthographic = true;
_orthographicCamera.clearFlags = CameraClearFlags.Nothing; _bakeCamera.farClipPlane = 2000f;
_orthographicCamera.cullingMask = 0; // Nothing _bakeCamera.clearFlags = CameraClearFlags.Nothing;
_orthographicCamera.allowHDR = false; _bakeCamera.cullingMask = 0; // Nothing
_orthographicCamera.allowMSAA = false; _bakeCamera.allowHDR = false;
_orthographicCamera.renderingPath = RenderingPath.Forward; _bakeCamera.allowMSAA = false;
_orthographicCamera.useOcclusionCulling = false; _bakeCamera.renderingPath = RenderingPath.Forward;
_bakeCamera.useOcclusionCulling = false;
return _orthographicCamera; return _bakeCamera;
} }
} }
} }