[エラー]
編集モード中に MeshFilter.mesh を呼び出すことにより、メッシュをインスタンス化します。これによりメッシュが漏れてしまいます。代わりに MeshFilter.sharedMesh を使用してください。
発生状況: 次のコードがエディターで呼び出されました。
Mesh mesh = GetComponent<MeshFilter>().mesh;
//这里写对mesh的改变
GetComponent<MeshFilter>().mesh = mesh;
理由: 新しいメッシュがエディタで作成され、メモリに保存されます。
エラーの影響: 直接的な影響はありません。すべてのコードは引き続き正常に実行できますが、コンソールにエラー メッセージが表示されます。解決
策:
1. この新しいメッシュが本当に必要なく、参照している元のメッシュを変更できる場合は、コードを次のように変更します。
Mesh mesh = GetComponent<MeshFilter>().sharedMesh;
//这里写对mesh的改变
GetComponent<MeshFilter>().mesh = mesh;
2. この新しいメッシュが必要で、それが参照する元のメッシュを変更したくない場合は、コードを次のように変更します。
Mesh mesh = new Mesh();
#if UNITY_EDITOR
MeshFilter mf = GetComponent<MeshFilter>();
Mesh meshCopy = Mesh.Instantiate(mf.sharedMesh) as Mesh;
mesh = meshCopy;
#else
mesh = GetComponent<MeshFilter>().mesh;
#endif
//这里写对mesh的改变
GetComponent<MeshFilter>().mesh = mesh;
これにより、新しいメッシュがコピーされ、オブジェクトに割り当てられます。