2012年4月26日木曜日

Unity: ResourcesフォルダからPrefabを読む

先日の記事「Unity: Prefabをスクリプトからインスタンス化する」に対して、@rin_himawariさんからResourcesフォルダの中にPrefabを入れておけばスクリプトから簡単に呼び出せるよ、とツイートで教えて頂いたので、その辺りのことを調べてみました。

Unity: Prefabをスクリプトからインスタンス化する では、public宣言したBeePrefabに、InspectorからPrefabを指定する必要がありましたが、その必要がなくなります。
まずResourcesフォルダを作成して、以下のような構成でPrefabデータを格納しました。
/Resources/Prefabs/Bee
スクリプトは以下のように変わります。

using UnityEngine;
using System.Collections;

public class GameScene : MonoBehaviour {
  //public GameObject BeePrefab;   <-- いらなくなった

  void Start () {
    for (int i=0 ; i<3 ; ++i) {
      //Instantiate(BeePrefab,new Vector3(-50+i*50,0,0),Quaternion.identity);
      Instantiate(Resources.Load("Prefabs/Bee"),new Vector3(-50+i*50,0,0),Quaternion.identity);  // こちらを使います
    }
  }
  
  void Update () {
  }
}
Resourcesフォルダ内のデータ読み出しクラスがResourcesって分かりやすい!

この方法の利点と欠点をまとめると…

利点
  • リソースデータの呼び出しが簡潔になる。
  • 動的に呼び出すデータを変更する仕組みが作りやすい。

欠点
  • スクリプトの再利用性がなくなる場合がある。
  • 使わなくなったデータがキャッシュに残るので適当にUnloadしてやる必要がある。
多人数で開発する場合は、デザイナーさんがPrefabをInspectorから指定できた方が良い場合があるので、その時々で作り方も変わるでしょう。

ちなみに上記スクリプトですが、下のようなフォルダ構成でも正常にデータを読み出せます。
その辺りのことはまた次回。
/Test/Resources/Prefabs/Bee

こちらも合わせてどうぞ。

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...