原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

Unity製アプリのメモリリーク対応について

IT系勤務とはいうものの

IT系の職業に就いていたり休日は携帯用ゲームを作っていたりしますが、だからいってPC(=ハード)に興味があるわけではなくって、例えばTVショッピングとかで「お手ごろです!!」と宣伝されているノートPCを見ると素直に「これはお得かも」とか思っちゃうぐらいの情弱な人間なのです。

 

つまりは、床屋とかで職業を問われてIT系だと答えると十中八九「お勧めのPCはなんですか?」とか聞かれて困る、ということなんです。そんなことはヨドバシの店員にでも聞いてください。

 

まぁ、気が弱い人間なのでそんな質問でも拒絶できずに「う~ん、、、今はメーカものよりも自作の方がいいかもですね~」とか適当に答えるんですが、稀に「そうですよね~、私も自作で組んでて~」とか言われてマザーボードの型番とかを持ち出されたり、ごめんなさい、ごめんなさい、全然わかりません。
そんなこともあります。

 

意外とあっさりと

そんな感じで冴えない日々が続いているのですが、ゲーム制作の方は以外と進捗があって、前回の記事でCutieCircutのiOS版について『アプリが音もなく落ちる』と伝えていた問題は意外にあっさりと解決しました。

 

元々メモリ管理には厳しめのiOSで、そんなのお構いなしにプログラムを組んでいた私が悪いのですが、なにせ前述のようにPCハードとかアーキテクチャとかあまり興味がないので、メモリリーク?なにそれ美味しいの?状態。何をどうしたらよいか思案に明け暮れていたのですが、Google先生を駆使して色々調べたらあれよいう間に解決したので今回はそのお話

 

解決方法

前回の記事でも書いたように今回のメモリリークは初期処理でキャラクタの走るステージを作る際に、一旦プレハブを読み込んでInstantiateでオブジェクト化して、要が済んだらそのオブジェクトをDestroyする、といった処理を繰り返しているところで発生しているみたい。

 

「Destroyする」とは勝手に「メモリ上から破棄する」と考えていたのですが、調べてみると「生成されたオブジェクトのRendererが持っているMaterial(Clone)が、Rendererが破棄されたあとも残り続けている」ことがあるみたい。要はゴミが残っていることがあるってことです。

なのでそれらのゴミを一掃すべく以下の方法を使いました。

 

1.Destroy時にMaterialを解放する。

オブジェクトをDestroyするとそのGameObjectにOnDestroyというイベントが発生するので、そのイベント内でGameObjectが使用しているMaterialを明示的に破棄するようにしました。

 

 これは以下のサイトに詳しく書かれていて、自動解放用のスクリプトも掲載されています。

qiita.com

 

2.アセットのアンロードを実施する。

Resource.UnloadUnusedAssetsを使用すると「強制的に」不使用なアセットを解放してくるようです。併せてSystem.GC.Collectをコールすればガベージコレクションを実施してくれるのでメモリの最適化も行ってくれます。


ただ、この処理自体が結構重たいのでDestroyの度に行うとその度にゲームが止まってしまうので、ある程度のところで一気に行います。

 

3.使用するテクスチャの最大サイズを下げる。

メモリリークには関係ないのですが、テクスチャの最大サイズを下げることでメモリ使用量自体を少なくしました。


やり方はAndroid版と同様にテクスチャをクリックしてInspectorに表示される

「Override for iOS」

のチェックをONにして、MaxSizeを小さいサイズに下げます。

f:id:Karvan:20180703205307p:plain

 

それらの結果

前回大騒ぎした割にはあっさり解決してちょっと拍子抜けですが、無事にiOS上でも動作確認が取れて一安心です。

 

現在はAppStoreへ申請中なので申請が通れば無事にCutieCircuitがAppStoreに並ぶことになります。申請が通れば。

 

プロモーション動画

iOS版リリースを先取りしてプロモーション動画を作成しました。

Android版リリースの時に作っとけよ、って話ですが、色々課題が山積みだったのでそこまで時間が取れなかったんですよね。

 

今回はゲームの流れがわかるようなゲーム実況風の紹介動画となっています。

つたない編集ですが見てやってください。

 


Cutie Promotion【ちょっぴり高画質版】

 

次回は新作の話ができたらいいなぁ・・・

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。