2013年10月22日

Unity Project内のアイテムをプログラム側から指定する方法

毎日Unityです。使用言語をJavascriptからC#に変更しました。
別に大きな理由はないのですが
単純に、QAサイトではC#のほうが多かったのと
2DアニメーションツールのSpriteStudioがC#だったから
というのみです。

C#に乗り換えて1番びっくりしたのは
MonoDevelopのコード補完が
Javascriptと比べてC#のほうが優れていたことです。

と、少し話しが脱線しましたが
今回はProject内にあるアイテム(プレハブとかマテリアル)を
プログラム側で指定する方法「Resources」についてメモ

Project内のアセットをプログラム側から読み込む


Unityでいろいろ物を作成してきましたが
多くのサンプルゲームなどでは
とりあえずプレハブを作成して
そのプレハブのコードの中で
使用する他のプレハブ、または書き換え用のマテリアルを宣言しておいて
ドラッグして使用する、というものが多かったです。

例えば、シューティングゲームにおいて
敵の物体を Instantiateで生成する場合は
オブジェクトを指定しておかないといけません。

●Javascript例
var obj : GameObject;

●C#例
public GameObject obj;

こうやって書いておけば
Inspector内のスクリプトのコンポーネントの中に
オブジェクトをドラッグできるようになります。

ただ、これはあくまで固定されたものであり
他のアイコンを使いたい場合は
別の変数を宣言しておかないといけなくなり
メンテナンスがめんどくさく感じていました。


そうこうしている中で、Project内にあるアセットを
プログラム側で使用する方法がわかったので残しておきます。

1.Project内にプログラム側で読み込みたいアセットを用意
2.「Resources」というフォルダを作成
3. 2.で作成したResourcesの中に 1.で用意したものを入れる

これで準備完了です。
下記のようなイメージ。

Resources
┗hoge

次にコードです。

●Javascript例
var obj : GameObject;
obj = Resources.Load("hoge") as GameObject;

●C#例
public GameObject obj;
obj = Resources.Load("hoge") as GameObject;

こんな感じ。

Resources.Loadで
Resourcesフォルダの中にあるものを
使用することができるようになります。

もちろん、Resources/child/hoge などのように
階層をつけた場合でも下記のようにすることで
読み込むことができます。

●Javascript例
var obj : GameObject;
obj = Resources.Load("child/hoge") as GameObject;

●C#例
public GameObject obj;
obj = Resources.Load("child/hoge") as GameObject;

複数のプレハブやマテリアルがあり
すべて変数を用意、または配列を用意して
ドラッグするのが面倒な場合は

上記のResources関数を利用すると幸せになれるかもしれません。

参考サイトさま
Unity Script Reference:(公式※英語)
http://docs.unity3d.com/Documentation/ScriptReference/Resources.html

ActionScript入門Wiki - Unity - アセットをプログラム側から動的に読み込む
http://www40.atwiki.jp/spellbound/pages/1370.html

ハマケン100%開発: Unity: ResourcesフォルダからPrefabを読む
http://hamken100.blogspot.jp/2012/04/unity-resourcesprefab.html



posted by おちと at 09:56 | Comment(0) | TrackBack(0) | Unity | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。