From fa9cfb75cd9d7b5f07a372b08a4f90712b43a5e1 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sun, 27 Aug 2023 14:44:51 +0900 Subject: [PATCH 1/2] chore: Error if there are non-Readable Mesh --- Editor/OptimizerSession.cs | 3 +++ .../EditSkinnedMeshComponentProcessor.cs | 2 +- Editor/Processors/SkinnedMeshes/MeshInfo2.cs | 20 ++++++++++++++----- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Editor/OptimizerSession.cs b/Editor/OptimizerSession.cs index 4ada56b55..5a56e52cf 100644 --- a/Editor/OptimizerSession.cs +++ b/Editor/OptimizerSession.cs @@ -55,6 +55,9 @@ public T AddToAsset(T obj) where T : Object public T MayInstantiate(T obj) where T : Object => _added.Contains(obj) ? obj : AddToAsset(Object.Instantiate(obj)); + public T MayCreate(T obj) where T : Object, new() => + _added.Contains(obj) ? obj : AddToAsset(new T { name = obj.name + "(Clone)" }); + public void MarkDirtyAll() { foreach (var o in _added) diff --git a/Editor/Processors/EditSkinnedMeshComponentProcessor.cs b/Editor/Processors/EditSkinnedMeshComponentProcessor.cs index f68a196a7..c872afcb5 100644 --- a/Editor/Processors/EditSkinnedMeshComponentProcessor.cs +++ b/Editor/Processors/EditSkinnedMeshComponentProcessor.cs @@ -75,7 +75,7 @@ public void SaveToMesh(OptimizerSession session) BuildReport.ReportingObject(targetRenderer, () => { var mesh = meshFilter.sharedMesh - ? session.MayInstantiate(meshFilter.sharedMesh) + ? session.MayCreate(meshFilter.sharedMesh) : session.AddToAsset(new Mesh()); meshInfo.WriteToMesh(mesh); meshFilter.sharedMesh = mesh; diff --git a/Editor/Processors/SkinnedMeshes/MeshInfo2.cs b/Editor/Processors/SkinnedMeshes/MeshInfo2.cs index 5e0a82c1f..637cba29e 100644 --- a/Editor/Processors/SkinnedMeshes/MeshInfo2.cs +++ b/Editor/Processors/SkinnedMeshes/MeshInfo2.cs @@ -34,10 +34,14 @@ internal class MeshInfo2 public MeshInfo2(SkinnedMeshRenderer renderer) { SourceRenderer = renderer; - var mesh = renderer.sharedMesh - ? renderer.sharedMesh - : new Mesh { name = $"AAOGeneratedMesh({renderer.name})" }; - + var mesh = renderer.sharedMesh; + if (!mesh) return; // no mesh; make empty mesh + if (!mesh.isReadable) + { + BuildReport.LogFatal("The Mesh is not readable. Please Check Read/Write")?.WithContext(mesh); + return; + } + BuildReport.ReportingObject(renderer, true, () => { ReadSkinnedMesh(mesh); @@ -67,6 +71,12 @@ public MeshInfo2(MeshRenderer renderer) BuildReport.ReportingObject(renderer, true, () => { var mesh = renderer.GetComponent().sharedMesh; + if (!mesh) return; // no mesh; make empty mesh + if (!mesh.isReadable) + { + BuildReport.LogFatal("The Mesh is not readable. Please Check Read/Write")?.WithContext(mesh); + return; + } ReadStaticMesh(mesh); SetIdentityBone(renderer.transform); @@ -438,7 +448,7 @@ public void WriteToSkinnedMeshRenderer(SkinnedMeshRenderer targetRenderer, Optim BuildReport.ReportingObject(targetRenderer, () => { var mesh = targetRenderer.sharedMesh - ? session.MayInstantiate(targetRenderer.sharedMesh) + ? session.MayCreate(targetRenderer.sharedMesh) : session.AddToAsset(new Mesh { name = $"AAOGeneratedMesh{targetRenderer.name}" }); WriteToMesh(mesh); From 1bf2b84398f61a9c61fe66baca9040470bfa4818 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Sun, 27 Aug 2023 14:46:49 +0900 Subject: [PATCH 2/2] docs(changelog): add Unclear Error with Mesh with Read/Write off --- CHANGELOG-PRERELEASE.md | 1 + CHANGELOG.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG-PRERELEASE.md b/CHANGELOG-PRERELEASE.md index 73a761c9e..f3fbdf012 100644 --- a/CHANGELOG-PRERELEASE.md +++ b/CHANGELOG-PRERELEASE.md @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog]. ### Removed ### Fixed +- Unclear Error with Mesh with Read/Write off `#386` ### Security diff --git a/CHANGELOG.md b/CHANGELOG.md index b48891841..3d1b675cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ The format is based on [Keep a Changelog]. ### Fixed - MergeBone not working well with non-restpose bones `#379` +- Unclear Error with Mesh with Read/Write off `#386` ### Security