デジタルフロッグ

Unityのアプリの開発をしながらいろいろと忘れないための備忘録でございます。

Instantiateで生成したオブジェクトに値を渡す 生成したオブジェクトの親子関係

こんばんにちは!

毎日楽しくUnityをさわれていますが、やっぱりゲームはやってるのも楽しいもので休みの日は一日気が付いたらゲームだけして終わってるという事も多々あります。

さて、今回はInstantiateでオブジェクトを生成した場合にそのオブジェクトに値を渡すやり方を紹介したいと思います。

新しいProjectでもシーンでもいいので開いていただいてまずUIのImageを選択して下さい。

f:id:karaagedigital:20160904140438p:plain

白い四角イメージが出来たのでとりあえずそれでOKです。そいつをプレハブ化しちゃいましょう。

 

f:id:karaagedigital:20160904140825p:plain

次に空のオブジェクトを作りましょう。

f:id:karaagedigital:20160904140949p:plain

作ったからのオブジェクトにhogehogeという名前で新しいスクリプトを作成します。

f:id:karaagedigital:20160904141223p:plain

ごめんなさい忘れてました!HierarchyのImageを右クリックしてUI→Textを選択して子オブジェクトにTextを入れておいてください。

f:id:karaagedigital:20160904141825p:plain

TextのInspectorはこんな感じに

f:id:karaagedigital:20160904141845p:plain

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));
    }

}

 

f:id:karaagedigital:20160904142829p:plain

canvasObjeにCanvasをprefにはプレハブのImageを突っ込んでください。

最後にCreateからUI→Buttonを選択してButtonを作って下さい。

作ったらInspectorの下の方からOn Click()の+を選択して、Inspectorのhogehoge.csが入ったGameObjectを選択し右のプルダウンからhogehogeButtonを選択して下さい。

f:id:karaagedigital:20160904143118p:plain

InspectorのImageのアクティブは非アクティブにして、ゲームをスタートさせてみましょう。

ボタンを押すとイメージが作られてイメージの中のテキストの中身がスクリプトの中で指定した abc になっていると思います。

これでInstantiateで作られたオブジェクトの中のTextに値を渡せている事がわかると思います。

f:id:karaagedigital:20160904143902g:plain

iTweenを使ったのは作ったものが上に重なるとわかりづらいと思って使ってるだけなので、別に今回の題材には必要ないのでスクリプトから消しちゃっても構いません。

 

Canvasの子オブジェクトに生成することもついでにやっちゃいましたが、わかりましたでしょうか?ボタンを押すと次々に生成されていき、生成された子オブジェクトのテキストの中身が変更されているのがわかると思います。