Google

2011年11月16日水曜日

PrefabをC#のみで生成

GUIで指定したPrefabの生成方法は以前行いました。
しかしこの方法、100個必要なら100個のメンバ変数と紐付けが待ってるという事です。
これではとてもではありませんが実用に耐えるものではありません。

そこで今回はGUI指定不要なプレハブ生成です。
これなら何個あろうが命名規則でまとめるだけですみますね。

では実験の手順です。
  1. プレハブを作成します。
  2. Projectヒエラルキー上にResoucesという名称のディレクトリを作成します。
  3. 作成したプレハブをその下に入れます。
  4. 生成ソースを空GameObjectに紐付け
今回もプレハブにはCubeを使用します。
1.の手順は以前の記事と全く同じなので割愛。
プレハブにしたらヒエラルキー(シーン)からCubeを削除しておきましょう。
2.と3.は以下のように行います。

Projectの下にあるCreateを押して
メニューからフォルダを選択
できたフォルダをResorcesに変名しましょう。
ここまで来たらCubeのプレハブをフォルダにドロップして3.まで完了です。
続いて今回のソースコード。

さっくりとstart関数の中を解説。
1行目はprefabという変数はCubeという名前のプレハブから作成してます。
プレハブの名称はCubeなので、このまま引数に渡し、戻りがObjectなのでGameObjectにキャストします。
このprefabという変数をひな形として、GameObjectを生成しているのが2行目です。

このResouces.Loadはクラスメソッドなのでいつでも呼び出せます。
リファレンス原文はこちらを御覧ください。
http://unity3d.com/support/documentation/ScriptReference/Resources.Load.html

ここから4.の作業に入ります。
以前と同様にUnityGUI上でC#のソースコードを生成し、上記ソースを書きこんで、空っぽのGameObjectにドラッグ&ドロップで紐付けしてください。

実行前にはシーンにカメラとこのソースのGameObjectがあるのみで、目に見える物体が何もない状態であれば準備完了です。
では実行してみましょう。

実行前。カメラとソースが入ったGameObjectだけです。
実行後。シーンになかったCubeプレハブができています。
出来上がった動的GameObjectの名称はCube(Clone)となっています。
(Clone)はUnityが勝手に付けるので、名称管理などをしてて気になるのなら、nameプロパティで動的に名称を変更すればよいでしょう。



ちなみに、今回わざわざフォルダを作成した理由ですが、、、、

・Resource以下で無いと生成元データを見つけられない。

という制約があるためです。
実際にディレクトリ無しでやってみると、ひな形がnullとなってうまく動いてくれません。

なんでこんなルールかというと、、、。
Unity3dはGUI型ツールなので、エディタ等特殊なサポートツールを追加可能です。
しかしサポートツールのコードを、最終的なゲームのバイナリに出力したくない場合もあります。
(例えばEzGUIの設定画面とか)
Unityではその区分けをディレクトリの表記名で行なっているため、こういったルールとなっているようですね。
ResoucesはGameObject等を動的に読み出すために予約された名称で、この下ならある程度のディレクトリ構成名称は自由なようです。

原文を読みたい方は以下からどうぞ。

0 件のコメント:

コメントを投稿