LoginSignup
0
1

More than 5 years have passed since last update.

Resources.LoadのBestPracticesの検証(3,複数回読んでみる

Last updated at Posted at 2019-02-11

Resources.LoadのBestPracticesの検証(2,使用している状態で消してみる
の続き


UnityのAddComponentのつくり上、
いろんなところで複数回よばれ、いろんなところで解放
が呼ばれるはずなので軽く
2個生成して2個削除したときどうなるかを見てみる。

今回は前回のソースに

protected override void OnLoadComplete(Object _object)
{
    ~
    Debug.Log("OnLoadComplete:" + _object.GetInstanceID() + ":" + _object.GetHashCode());
}

を出力してロードしたものは違うものなのか?同じものなのか?を見る

GameObject2個生成コンソール出力
loadone.png
GameObject2個生成プロファイラー
loadtwo.png

GameObject1個目解放
unloadone.png
GameObject2個目解放
unloadtwo.png

画像においては複数Resources.Loadを呼んでも読み込まれた実態は1つのように見える
解放については1個目の開放ではTextureSprite両方とも使われているので解放に失敗
2個目でSpriteは解放できたがTextureは解放できずと前回と同じ結果になった。

途中結果
最善の方法は使わないこと
について取得したら解放するとソースに書いても意図とした取得、解放にはならず
メモリ管理が困難になる
になる
まともに使うためにはかなり無駄な労力を費やしそうなのが見えてきた。
単純なだけにソースレビューするだけでなく実機確認及びProfiler確認までしないと
この部分の問題を発見することは非常に困難と見える。

Loadした分Unloadすればよいという挙動ではないのでちゃんと解放するには難儀しそうな印象。
実はResources.UnloadはResources.Loadで得たUnityEngine.Objectを引数指定すれば
解放されるものではないでは?ということも含め検証を進めていくとしよう。

解放についての検証はまた次回

0
1
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
0
1