Assets内にResourcesフォルダを作成してアセットを入れておくと、実行時にスクリプトで読み込むことができます。
例えば、プレハブからインスタンスを作成するようなスクリプトの場合、
public GameObject _prefab;
のようにパブリックな変数を用意し、
InspectorパネルへDrag&Dropすることで複製するプレハブを設定します。
この一連の操作は、アセットをリソースとして登録しておくことで、実行時にスクリプトから行うことが出来ます。前回の記事「Unity3D:インスタンスのマテリアルを変更する」をResourcesフォルダから実行時に読み込む方法に変えてみます(プレハブの作成やスクリプトの追加などの手順は省略)。
1. AssetsにResourcesフォルダを作成
スクリプトから読み込むアセットはResourcesフォルダ以下に入れておく必要があります。
サブフォルダを作成して分類することも可能。この例ではサブフォルダ「Mat」と「Prefab」を作成し、それぞれにマテリアル「CubeMat」とプレハブ「CubePrefab」を入れました。
2. スクリプトから読み込む
Resoucesフォルダ内のアセットを読み込むには、Resouces.Load()メソッドを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
using UnityEngine; using System.Collections; public class ChangeColor : MonoBehaviour { private GameObject _prefab; private Material _material; GameObject[,] _instance = new GameObject[2, 3]; void Awake() { _prefab = Resources.Load("Prefab/CubePrefab", typeof(GameObject)) as GameObject; _material = Resources.Load("Mat/CubeMat", typeof(Material)) as Material; } void Start() { for (int j = 0; j < 2; j++) { for (int i = 0; i < 3; i++) { _instance[j, i] = Instantiate(_prefab) as GameObject; _instance[j, i].transform.localPosition = new Vector3(i * 3 - 3, j * 3 - 1.5f, 0); } } for (int i = 0; i < 3; i++) { _instance[0, i].renderer.material.color = new Color(i * 0.5f, 0.5f, 0.5f); } _material.color = new Color(1, 1, 1); } } |
パブリックな変数はプライベートに変更し、Awake()でリソースから変数へ読み込みます(行13-14)。
3. 実行結果
Inspectorパネルで設定したときと同等な結果になりました。
コメントを残す
コメントを投稿するにはログインしてください。