とてもまずいリーク

前々回の記事で作成した剣の軌跡エフェクト
おそらくこれが原因でとんでもないことになった。

Unity起動~

ちょっとお風呂いってこよう

ふー、あれ、Unityがぴくりとも動かない・・

Unityメモリ使用4GB()

数十分の間にとんでもないメモリリークしてやがった・・・

さて当然原因を探るわけですが
.SetDestroy(time);
という具合に、軌跡メッシュに削除時間を指定
Destroy(gameObject, time);
という具合に指定された時間で消滅する
ヒエラルキーからもちゃんと消えていくのがわかる。
が、やっぱりリークしている。

いろいろ調べてみたところ、どうやらマテリアルはgameObjectをDestroyしても残り続けるらしい。こいつはやばいので早速破棄・・
が、駄目っ・・!
さらに調べてみると、動的に生成されたメッシュもまずいらしいので、早速().Meshを破壊する処理を追加する・・
が、(ry

しかし、困り果ててソースを見ているとあることに気づいた。
obj.GetComponent().sharedMesh = obj.mesh;

そう、つまり消すべき対象はこいつだ
gameObject.GetComponent<MeshFilter>().sharedMesh

・・解決!
少し目を離したすきに数GB持っていく最悪なゲームから解放

最近Unityがやたらクラッシュしてイライラしていたのだけど、実は自分のせいだったっていうね。とにかく、今回学んだことをわずれずに進もう。



拍手3件と3件ありがとうございます!

テーマ : ゲーム - ジャンル : ゲーム

comments

comment form

管理者にだけ表示を許可する

trackback


この記事にトラックバックする(FC2ブログユーザー)

リンク
報告
20150405 新カテゴリ追加
月別アーカイブ