LoginSignup
2
2

More than 5 years have passed since last update.

Resources.LoadのBestPracticesの検証(1,ロードとアンロード

Last updated at Posted at 2019-02-11

今回のUnityバージョン
Unity 2018.3.5f1


https://unity3d.com/jp/learn/tutorials/topics/best-practices/resources-folder
Unity公式のチュートリアルより要約
・最善の方法は使わないこと
・メモリ管理が困難になる
・アセットの管理が非常に難しくなる
・配信機能の低下
・プロトタイプを迅速に制作するには優れているが、製品版では排除する必要がある
・リソースフォルダ以下のAssetはシリアライズされる

次の場合は便利に使える
・プロジェクトの存続期間を通して一般的に必要
・メモリ集約型ではない
・パッチを適用する傾向がない、またはプラットフォームやデバイス間で差がない
・最小限のブートストラップに使用

とあるがなにより
・最善の方法は使わないこと
とはどういうことなのか?

簡単に下記ソースコードを書いて検証してみた

ResourcesLoader.cs
using System.Collections;
using UnityEngine;

public class ResourcesLoader : MonoBehaviour
{
    protected System.Type LoadObjectType;

    [SerializeField, Header("ResourcesLoadのPathを指定")]
    private string ResourcesLoadPath;

    private UnityEngine.Object Asset;

    private void Awake()
    {
        SetLoadObjectType();
    }

    private IEnumerator Start()
    {
        var request = Resources.LoadAsync(ResourcesLoadPath, LoadObjectType);

        yield return request;

        Asset = request.asset;
        OnLoadComplete(Asset);
    }

    private void OnDestroy()
    {
        if (Asset != null)
        {
            Resources.UnloadAsset(Asset);
            Asset = null;
        }
    }

    protected virtual void SetLoadObjectType()
    {
        LoadObjectType = typeof(Object);
    }

    protected virtual void OnLoadComplete(Object _object)
    {
        ;
    }
}

ざっくりどんな挙動をするかというと
1.GameObjectが生成されたらResourcesLoadPathに設定されているPathでリソースの非同期読み込みを行う
2.ロードが完了したらOnLoadCompleteが呼ばれる
3.GameObjectが削除されたらResources.UnloadAssetを呼ぶ

で検証の前にカメラだけがあるSceneにおいてAssetがどうなってるか
ProfilerでMemoryの項目をDetailed表示でAssetのSampleを取っておく
before.png
適当にGameObjectを作ってAddComponentし、test.pngを読み込んだのが
load.png
PrefabやらTransformやらMonoBehaviourなど増えているがLoadに関係するもののみ開いておく
そしてGameObjectを削除したら
unload.png

画像データのロードにおいてはSprite情報は解放されず
Texture本体のみ解放されてしまったように見える。

ソースコードではリソースのAssetを読んで消したから関連するものは
消したつもりだったが完全に消し去ることはできなかったようだ。

続く

2
2
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
2