FC2ブログ
    02 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 04

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【Unity】ポップアップウィンドウ的なあれ。こうやって作ってるけど、他に良い方法あるんすかね?よくわかりませんわ。 

    こんにちは、坂内です。
    Unityでポップアップウィンドウ的なやつって皆さんどうやって作ってますでしょうか?

    僕はいつもPrefabでやっちゃってます。

    こんな感じですね。
    で、これの「popupWindow」をPrefab化して、Instantiateしてる感じです。

    こういうのって増えれば増えるほど、Sceneの容量が増えて行ってしまいますが、いいんでしょうか?

    もちろん、popupWindowにはScriptをつけて、「決定」や「キャンセル」の処理を書いています。
    また、popupWindowのScriptのAwakeには以下のコード書いてます。

    void Awake(){
       transform.SetParent(GameObject.Find("親オブジェクト名").transform);
       transform.localScale = Vector2.one;
       transform.localPosition = Vector2.zero;
    }

    という感じで、ポップアップ的なやつをやっちゃってます。
    他にいい方法あるんかな?

    という感じで、簡単なメモ的なお話でした!アデュ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 3   

    コメント

    transform.SetParent(Transform)使うよりtransform.SetParent(Transform,bool)使ったほうが楽ですよ。
    位置指定せずにInstantiateしたら、Root直下にLocal座標(0,0,0)で生成されるので、
    2番目の引数をfalseにしたらLocal座標変わらず移動できるからそれで済みます。

    うちはこんな感じにやってます。

    //ダイアログのスクリプト

    private System.Action positiveRes;
    private System.Action negativeRes;
    public void SetEvent(System.Action pos, System.Action neg){
    positiveRes = pos;
    negativeRes = neg;
    }

    //インスペクタ上でボタンと紐づけ
    public void OnClickPositive(){
      if(positiveRes != null){
    positiveRes();
    }
    Destroy(this.gameObject);
    }
    //インスペクタ上でボタンと紐づけ
    public void OnClickNegative(){
      if(negativeRes != null){
    negativeRes();
    }
    Destroy(this.gameObject);
    }


    //呼び出し元のスクリプト

    GameObject obj = Instantiate(prefab) as GameObject;
    DialogScript  dialog = obj.GetComponent<DialogScript>();
    dialog.SetEvent(
    ()=>{
    //Yes押下時のイベント
    },()=>{
    //No押下時のイベント
    });


    後はプレハブの方に呼び出し時、破棄時のアニメーションでも設定してやるくらいでしょうか?
    参考になれば幸いです

    名無しさん #- | URL | 2015/05/27 12:10 [edit]

    あ、自分で言っときながらミス

    GameObject obj = Instantiate(prefab) as GameObject;
    obj.transform.SetParent("親オブジェ",false);
    DialogScript dialog = obj.GetComponent<DialogScript>();

    です。

    名無しさん #- | URL | 2015/05/27 12:11 [edit]

    おー 名無しさんありがとうございます!
    なるほどこういう方法あったのですね!
    あんまり最近はAPIも見てないので知りませんでした!

    SetParent見直してみます!

    halcyon system 坂内 #- | URL | 2015/05/28 14:32 [edit]

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/205-2c1419e2
    この記事にトラックバックする(FC2ブログユーザー)