【Unity记录】編集モード中にMeshFilter.meshを呼び出したため、メッシュがインスタンス化されています。

[エラー]

編集モード中に 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;

これにより、新しいメッシュがコピーされ、オブジェクトに割り当てられます。

方法引用:Alter Meshes in Editor by Script without warning

おすすめ

転載: blog.csdn.net/weixin_74545283/article/details/131553557