Instantiateで生成したオブジェクトに値を渡す 生成したオブジェクトの親子関係
こんばんにちは!
毎日楽しくUnityをさわれていますが、やっぱりゲームはやってるのも楽しいもので休みの日は一日気が付いたらゲームだけして終わってるという事も多々あります。
さて、今回はInstantiateでオブジェクトを生成した場合にそのオブジェクトに値を渡すやり方を紹介したいと思います。
新しいProjectでもシーンでもいいので開いていただいてまずUIのImageを選択して下さい。
白い四角イメージが出来たのでとりあえずそれでOKです。そいつをプレハブ化しちゃいましょう。
次に空のオブジェクトを作りましょう。
作ったからのオブジェクトにhogehogeという名前で新しいスクリプトを作成します。
ごめんなさい忘れてました!HierarchyのImageを右クリックしてUI→Textを選択して子オブジェクトにTextを入れておいてください。
TextのInspectorはこんな感じに
Imageのプレハブを更新する為にImageのInspectorからApplyボタンを押してプレハブを更新しておいてください。
それではhogehogeのスクリプトを書いていきます。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class hogehoge : MonoBehaviour {
public GameObject pref;
public GameObject canvasObj;
public void hogehogeButton(){
GameObject obj = (GameObject)Instantiate (pref);
obj.transform.FindChild ("Text").gameObject.GetComponent<Text>().text = "abc";
obj.transform.SetParent (canvasObj.transform, false);
iTween.MoveTo (obj.gameObject, iTween.Hash ("y",1000.0f,"time",2.0f));
}
}
canvasObjeにCanvasをprefにはプレハブのImageを突っ込んでください。
最後にCreateからUI→Buttonを選択してButtonを作って下さい。
作ったらInspectorの下の方からOn Click()の+を選択して、Inspectorのhogehoge.csが入ったGameObjectを選択し右のプルダウンからhogehogeButtonを選択して下さい。
InspectorのImageのアクティブは非アクティブにして、ゲームをスタートさせてみましょう。
ボタンを押すとイメージが作られてイメージの中のテキストの中身がスクリプトの中で指定した abc になっていると思います。
これでInstantiateで作られたオブジェクトの中のTextに値を渡せている事がわかると思います。
iTweenを使ったのは作ったものが上に重なるとわかりづらいと思って使ってるだけなので、別に今回の題材には必要ないのでスクリプトから消しちゃっても構いません。
Canvasの子オブジェクトに生成することもついでにやっちゃいましたが、わかりましたでしょうか?ボタンを押すと次々に生成されていき、生成された子オブジェクトのテキストの中身が変更されているのがわかると思います。