Skip to content

Commit dfaa9ef

Browse files
committed
Fix cloud GC collection
1 parent c7df843 commit dfaa9ef

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

Assets/Scripts/Environment/CloudRenderer.cs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ public class CloudRenderer : MonoBehaviour
1313
public ParticleSystem ps;
1414

1515
private NativeArray<ParticleSystem.Particle> particles;
16-
private ParticleSystem.Particle[] parts;
16+
//private ParticleSystem.Particle[] parts;
17+
private MaterialPropertyBlock[] mpbs;
1718

1819
private void OnEnable()
1920
{
@@ -22,7 +23,12 @@ private void OnEnable()
2223

2324
var main = ps.main;
2425
particles = new NativeArray<ParticleSystem.Particle>(main.maxParticles, Allocator.Persistent);
25-
parts = new ParticleSystem.Particle[main.maxParticles];
26+
//parts = new ParticleSystem.Particle[main.maxParticles];
27+
mpbs = new MaterialPropertyBlock[main.maxParticles];
28+
for (var index = 0; index < mpbs.Length; index++)
29+
{
30+
mpbs[index] = new MaterialPropertyBlock();
31+
}
2632
}
2733

2834
private void OnDisable()
@@ -43,13 +49,14 @@ public void DrawClouds(Camera camera)
4349
if (!cloudMaterial || cloudMeshes == null || cloudMeshes.Length == 0) return;
4450

4551
var camPos = camera.transform.position;
46-
var aliveCount = ps.GetParticles(parts);
47-
var l = parts.ToList().OrderByDescending(x => Vector3.Distance(x.position, camPos));
48-
parts = l.ToArray();
52+
var aliveCount = ps.GetParticles(particles);
53+
particles.OrderByDescending(x => Vector3.Distance(x.position, camPos));
54+
55+
var scale = Vector3.zero;
4956

5057
for (var index = 0; index < aliveCount; index++)
5158
{
52-
var particle = parts[index];
59+
var particle = particles[index];
5360
if (particle.remainingLifetime <= 0.001f) continue;
5461

5562
var pos = particle.position * SkyboxSystem.SkyboxScale + camPos * (1 - SkyboxSystem.SkyboxScale);
@@ -58,14 +65,13 @@ public void DrawClouds(Camera camera)
5865
Random.InitState((int)particle.randomSeed);
5966
var mesh = cloudMeshes[Random.Range(0, cloudMeshes.Length)];
6067

61-
var scale = particle.startSize3D;
68+
scale = particle.startSize3D;
6269
scale.x *= Random.value > 0.5f ? 1f : -1f;
6370

64-
MaterialPropertyBlock mpb = new MaterialPropertyBlock();
65-
mpb.SetVector("_BA_CloudData", new Vector4(scale.x, 0f, 0f, particle.GetCurrentColor(ps).a / 255f));
71+
mpbs[index].SetVector("_BA_CloudData", new Vector4(scale.x, 0f, 0f, particle.GetCurrentColor(ps).a / 255f));
6672

6773
Graphics.DrawMesh(mesh, Matrix4x4.TRS(pos, q, scale * SkyboxSystem.SkyboxScale),
68-
cloudMaterial, LayerMask.NameToLayer("3DSkybox"), camera, 0, mpb, false, false, false);
74+
cloudMaterial, LayerMask.NameToLayer("3DSkybox"), camera, 0, mpbs[index], false, false, false);
6975
}
7076
}
7177
}

0 commit comments

Comments
 (0)