From e03dbef5ffd55fc60a2bed1e2a4f45b9b323fe22 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Fri, 24 Mar 2023 17:10:30 +0800 Subject: [PATCH] Optimize GC for mesh wrapper. --- Assets/Cryville/Crtr/Components/SectionalGameObject.cs | 1 + Assets/Cryville/Crtr/Components/SpriteBase.cs | 2 +- Assets/Cryville/Crtr/MeshWrapper.cs | 8 +++++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Assets/Cryville/Crtr/Components/SectionalGameObject.cs b/Assets/Cryville/Crtr/Components/SectionalGameObject.cs index 1134336..5c5c15c 100644 --- a/Assets/Cryville/Crtr/Components/SectionalGameObject.cs +++ b/Assets/Cryville/Crtr/Components/SectionalGameObject.cs @@ -106,6 +106,7 @@ namespace Cryville.Crtr.Components { public override void Init() { base.Init(); mesh.Init(transform); + mesh.Mesh = new Mesh(); mesh.Renderer.sharedMaterials = materials = new Material[] { MeshWrapper.NewMaterial(), diff --git a/Assets/Cryville/Crtr/Components/SpriteBase.cs b/Assets/Cryville/Crtr/Components/SpriteBase.cs index fb5a2b6..34c2294 100644 --- a/Assets/Cryville/Crtr/Components/SpriteBase.cs +++ b/Assets/Cryville/Crtr/Components/SpriteBase.cs @@ -89,7 +89,7 @@ namespace Cryville.Crtr.Components { protected void InternalInit(string meshName = "quad") { mesh.Init(transform); mesh.Renderer.sharedMaterials = materials = new Material[] { MeshWrapper.NewMaterial() }; - mesh.Mesh = GenericResources.Meshes[meshName]; + mesh.Mesh = Mesh.Instantiate(GenericResources.Meshes[meshName]); UpdateColor(); UpdateScale(); UpdateZIndex(); diff --git a/Assets/Cryville/Crtr/MeshWrapper.cs b/Assets/Cryville/Crtr/MeshWrapper.cs index c9c7d8b..0734726 100644 --- a/Assets/Cryville/Crtr/MeshWrapper.cs +++ b/Assets/Cryville/Crtr/MeshWrapper.cs @@ -10,9 +10,10 @@ namespace Cryville.Crtr { get; private set; } + Mesh m_mesh; public Mesh Mesh { - get { return MeshFilter.mesh; } - set { MeshFilter.mesh = value; } + get { return m_mesh; } + set { MeshFilter.sharedMesh = m_mesh = value; } } public Transform MeshTransform { get; @@ -42,7 +43,8 @@ namespace Cryville.Crtr { Initialized = true; } public void Destroy() { - Mesh.Destroy(Mesh); + Mesh.Destroy(m_mesh); + m_mesh = null; GameObject.Destroy(MeshObject); } }