さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

【Unity】Resources.LoadAsyncするけどパス指定したくない

やること

 ロード処理においてResources.LoadAsyncを使いたい。が、いちいちパス指定するのが嫌、という場合のための仕組みをつくる。  

コード

gist.github.com

使い方

 アセットのクラスごとに継承したクラスを作る。

using UnityEngine;
using System.Collections;

namespace TSKT
{
    public class PrefabReferer : ResourceReferer<GameObject>
    {
    }
}

 ScriptableObjectファイルを作成して、インスペクタでassetフィールドにResourcesフォルダ下のファイルを紐づける。

 すると、pathフィールドが自動で更新される。

 で、実行時にLoad()を呼び出すと、pathフィールドを使ってResources.LoadAsyncを行う。

参照

 ロード処理は前回のResourceLoaderを使っている。

toriden.hatenablog.com

びみょう?

 わざわざScriptableObjectファイルを作るのが面倒。

 [Serializable]なクラスを作ってその中で処理できれば最高だったんだけど、OnValidate相当の機能がなさそうだったのであきらめた。

 OnValidateさえあれば、参照しているassetファイルからパスを取得し、pathフィールドを自動更新する処理を書くことができる。

修正

 UNITY_EDITORを使ってビルド時にフィールドを減らしたりするとエラーになるので良くない。というわけで回りくどいけどguidを取得してやることにした。

answers.unity3d.com