Change materials to shared mode in components.

This commit is contained in:
2023-02-19 22:08:09 +08:00
parent ba3238614b
commit e59769158a
5 changed files with 17 additions and 9 deletions

View File

@@ -46,11 +46,15 @@ namespace Cryville.Crtr.Components {
}
protected override void OnDestroy() {
if (materials != null)
foreach (var mat in materials) {
Material.Destroy(mat);
}
DestroyMaterials();
mesh.Destroy();
}
protected void DestroyMaterials() {
if (materials == null) return;
foreach (var mat in materials) {
Material.Destroy(mat);
}
}
}
}

View File

@@ -107,7 +107,7 @@ namespace Cryville.Crtr.Components {
base.Init();
mesh.Init(transform);
mesh.Renderer.materials = materials = new Material[] {
mesh.Renderer.sharedMaterials = materials = new Material[] {
MeshWrapper.NewMaterial(),
MeshWrapper.NewMaterial(),
MeshWrapper.NewMaterial(),

View File

@@ -88,7 +88,7 @@ namespace Cryville.Crtr.Components {
protected void InternalInit(string meshName = "quad") {
mesh.Init(transform);
mesh.Renderer.materials = materials = new Material[] { MeshWrapper.NewMaterial() };
mesh.Renderer.sharedMaterials = materials = new Material[] { MeshWrapper.NewMaterial() };
mesh.Mesh = GenericResources.Meshes[meshName];
UpdateColor();
UpdateScale();

View File

@@ -122,7 +122,7 @@ namespace Cryville.Crtr.Components {
return;
}
mesh.Renderer.enabled = true;
mesh.Renderer.material.mainTexture = frame.Frame.Texture;
mesh.Renderer.sharedMaterial.mainTexture = frame.Frame.Texture;
UpdateShader();
UpdateUV();
UpdateScale();

View File

@@ -77,6 +77,9 @@ namespace Cryville.Crtr.Components {
meshes.Clear();
verts.Clear();
uvs.Clear();
DestroyMaterials();
materials = new Material[m_frames.Count];
int i = 0;
foreach (var f in m_frames) {
if (frameHeight == 0) frameHeight = f.Value.Rect.height;
else if (frameHeight != f.Value.Rect.height) throw new Exception("Inconsistent frame height for text component");
@@ -85,8 +88,9 @@ namespace Cryville.Crtr.Components {
var m = new MeshWrapper();
m.Init(mesh.MeshTransform);
m.Mesh = new Mesh();
m.Renderer.material = MeshWrapper.NewMaterial(); // TODO Destroy or add to `materials`
m.Renderer.material.mainTexture = tex;
var mat = MeshWrapper.NewMaterial();
mat.mainTexture = tex;
m.Renderer.sharedMaterial = materials[i++] = mat;
meshes.Add(tex, m);
verts.Add(tex, new List<Vector3>());
uvs.Add(tex, new List<Vector2>());