2012年02月03日

[Unity] 生成したインスタンスの子にパラメーターを渡す

親子関係を持ったゲームオブジェクトを何個も登場させたいとき、
プレファブを作り、そのインスタンス(コピー)を生成しています。

それで、生成した後に子にパラメーターを渡したいと思ったときに
「Find」という関数を使ったので備忘メモ。


まずは、親子関係のあるゲームオブジェクトをプレファブ化↓

20120203unity_parentchild1.png

親 : nullPointer
子 : respawn (Respawn.jsを適用)
Respawn.js
--------------------------------------------
private var yPos : int = 50;
private var message : String = "Hello World!";

function OnGUI() {
GUI.Label (Rect(50, yPos, 100, 20), message);
}

// セッター2つ
function SetYPos(y : int) { yPos = y; }
function SetMessage(m : String) { message = m; }
--------------------------------------------

次に、インスタンスを生成する準備↓

20120203unity_parentchild2.png

空のゲームオブジェクト「ObjectLoader」を作り、インスタンスを生成するための「Loader.js」を適用。
ObjectLoaderのパラメーター「OrgPrefab」に、コピー元となる「nullPointer」プレファブを適用。
Loader.js
--------------------------------------------
var orgPrefab : GameObject; // コピー元のプレファブ

function Start() {
// 出力位置(適当)
var outputPos3D : Vector3 = Vector3.zero;
// ■ インスタンスを生成しただけ
Instantiate(orgPrefab, outputPos3D, Quaternion.identity);

// ■ 2つ目のインスタンスを生成。こっちは変数を変更してみる
var respawnParent : GameObject = Instantiate(orgPrefab, outputPos3D, Quaternion.identity);
// 子インスタンスを参照
var respawnChild : GameObject = respawnParent.Find("respawn");
// 子インスタンスの変数を変更
(respawnChild.GetComponent(Respawn)).SetMessage("Second Object !");
(respawnChild.GetComponent(Respawn)).SetYPos(100);
}
--------------------------------------------


Loader.js では、単にインスタンスを生成した場合と、
インスタンスを生成した後に子を参照してパラメーターを渡した場合とを記述しています。

動作画面はこの通りです↓

20120203unity_parentchild3.png

ここまで書いて思ったのですが、SendMessage()でも実現できるかも……。
最適な方法って何だろう。
posted by be-style at 21:35| Comment(0) | Unity
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]