AK2Sのプログラム日記

フリーランスプログラマのプログラムに関する日記です

Unityでのメモリの破棄方法

こんばんは~AK2Sです!

 

C#ではあまり気にしないメモリですが、ゲーム作成となると結構メモリがシビアだったりしませんか?

UnityForVitaだと使用できるメモリが128MB~256MBしかなくかなーり四苦八苦してました(最近のスマホ端末だと1GB前後はあるかな?

そこでその時に自作して使用していたメモリ関連のクラスを先日、使用する機会が出来たので整理がてら紹介したいと思います(ΦωΦ)

※ある程度C#のメモリを知っている人向けの話になります


Unityでソースコードを書いている時にこんなコードを書いた事はないでしょうか?

ここで気になるのがOnDestroyのnullチェックです。

初めてプロパティにアクセスした時にNewをしてインスタンスを生成する、if文等でインスタンスが生成されない場合がある処理など、インスタンスをまだ生成していない時にOnDestoryをコールする可能性がある場合Nullチェックを行わなくてはいけません。

 

これを回避するには…

  • Fieldで定義した時に一緒にNewしておく
  • コンストラクタでNewをしておく

などの処理が必要になります。

Unityの場合はSerializableで自動的にNewされている場合があるので、後者では対応出来ない場合があります…。

 

そこでこういったケースを回避する為に作成したのが、今回紹介するMemoryクラスです!

github.com

 

使い方はこちら↓

Nullチェックがないぶん随分とスッキリしましたよね?

MemoryクラスのDelete系のメソッド破棄を宣言することによりメソッド内でNullチェックを行い、それぞれの型に応じたメモリの解放を行っております。

 

もちろん、OnDestroy以外でもIDisposableを継承したクラスや破棄したい時に使用しても大丈夫です!

ちなみにMemoryメソッドにrefリファレンスオーバーロードされているのは、アクセスを早くするためです。

また、プロパティで定義した変数refリファレンス使えませんのでこちらにも対応出来ます!

 

それでは今回はここまで!

それでは良いプログラミングライフを!(∩´∀`)∩