2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】materialがリークするけど、sharedMaterialにも問題がある場合

Last updated at Posted at 2021-08-29

Unityエディタを操作中、次のようなエラーが出ました。

Instantiating material due to calling renderer.material during edit mode. This will leak materials into the scene. You most likely want to use renderer.sharedMaterial instead.

翻訳すると

編集モード中にrenderer.materialを呼び出したことが原因で、マテリアルをインスタンス化します。これはシーンにマテリアルをリークすることになります。代わりにrenderer.sharedMaterialを使用することをお勧めします。

materialを使わず、sharedMaterialを使えということなのですが、sharedMaterialを使うと元のアセットのプロパティを書き換えてしまうという問題があります。
そこでsharedMaterialを使うけど、元のアセットも書き換えない方法です。

var tempMaterial = new Material(renderer.sharedMaterial);
tempMaterial.mainTexture = texture;
renderer.sharedMaterial = tempMaterial;

###追記
この方法を使ってもエラーが出ないだけでリークしていて、Hierarchyに勝手にインスタンスを作ってしまうことがあるようです。
なのでmaterialを取得したら自分で破棄した方がいいのかも知れません。

【Unity】Renderer.materialで取得したマテリアルは自分で破棄しないとリークする話

###追記その2
エディタのプレイモード終了時、Hierarchyに勝手にインスタンスを作るのは別の問題が原因っぽいです。
sharedMaterialを使って自分で破棄処理したのと、しないのをプロファイラーで比較しましたが、大きな差は確認できませんでした。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?