FC2ブログ
    08 «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.» 10

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

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

     

    【Unity】ダイアログ出してみた!with NGUI 

    おはようございます!
    おなじみ坂内です。

    花粉やばいっす!なんか今日はそれほどじゃないんですが、土日がやばかった!
    スマホから半径1mの花粉をやっつけてくれるアプリないですかねー
    え?物理的にむりだって?了解!

    本日はダイアログについてです。
    ゲームにダイアログって必須ですよね?
    でもネットで調べても素敵な方法が出てこない!(OnGUIのダイアログは色々でてきますが)
    ということで、NGUIでダイアログつくってみよー的な感じです。

    まずは、ボタンとダイアログの背景の絵を用意します。



    んで、これをAtlasに組み込んでおきます。

    Scriptも作っておきます。
    MainControl ⇒ ボタン押したときの処理と、ダイアログから戻ってきた時の処理
    DialogControl ⇒ ダイアログにて、OK・NOを押した時の処理

    とりあえずこんな感じで考えてみましたが、どうなんだろう。
    DialogControlにてボタン押した時の処理をするのが一番早いんだけど、そうなるとDialogControlという名前に違和感が・・
    ってことで、処理はMainControlの方に置いておきます。(こんな感じでいいのかな?)

    で、中身はまずはこんな感じ。
    【MainControl】
    using UnityEngine;
    using System.Collections;

    public class MainControl : MonoBehaviour {

    public GameObject dialogPref;

    /// ボタン押下時ダイアログオープン.
    public void OpenDialog(){
    Instantiate(dialogPref);
    }

    /// ダイアログにてOKが押された場合の処理.
    public void Proc(){
    Debug.Log("OKの処理されました!");
    }
    }

    【DialogControl】
    using UnityEngine;
    using System.Collections;

    public class DialogControl : MonoBehaviour {

    /// OKボタン押下時処理.
    public void Click_OK(){
    CloseDialog();
    GameObject.Find("Test").GetComponent().Proc();
    }

    /// NOボタン押下時処理.
    public void Click_NO(){
    CloseDialog();
    }

    /// ダイアログ抹殺.
    void CloseDialog(){
    Destroy(gameObject);
    }
    }

    どうでしょう。
    こんな感じで動きそうじゃないっすか?

    んじゃボタンを作ってみましょう。

    一番上のオブジェクトの名前を「Test」にして、このオブジェクトにMainControlをつけておきます。
    DialogControlのClick_OKメソッドで呼ばれるオブジェクトになります。
    ここで、mainPanelというPanel。dialogというPanelを用意しました。
    mainPanelにはボタンを追加しています。
    で、ボタンの方にはNGUIのUIButtonMessageやUIButton等のコンポーネントをつけて、MainControlのOpenDialogを呼ぶようにします。
    では、次にダイアログを作っていきます。
    ダイアログはPrefabにして置いておくのでどんな形でもいいですが、今回はPanelを用意し、その下にダイアログの背景、ボタン等を作成します。(ここが不明なんですが、ふつうはどうするんだろう?)

    メインパネルの表にダイアログが来ないといけないので、mainPanelのDepthは「0」にdialogのDepthは「1」にしています。
    で、dialogの子供にバックグラウンドとボタンを二つ作成しました。
    とりあえず押してる感を出すため、各ボタンにはNGUIのUIButtonScaleをくっつけてみます。
    その後、dialogのオブジェクトにはDialogControlをつけます。


    ちゃんとOKボタンとNOボタンに先ほど作ったDialogControlのメソッドをくっつけてやります。

    ここまでできたら、ダイアログ側のオブジェクト完成です!

    ダイアログ側の処理が全部作れたら、プレハブにしちゃいます。

    プレハブ化が終わったら、ヒエラルキーからdialogをけしまーす。

    そしたら次は、Testオブジェクトに付けたMainControlの「public GameObject dialogPref」で用意したdialogPrefに先ほど作成したdialogのプレハブをつけます。

    はい、出来上がり。
    さて実行してみましょう。

    しーーーーーーん。
    あれ?
    ボタンにコライダーつけていませんでした!
    大事です!忘れないでください!(おれだけ?

    で、実行をすると・・・・
    画面が灰色に!!!


    なんか、dialogの場所がおかしいです!
    プレハブ化する前の場所ってCameraの下でしたよね。
    ってことで、Cameraの子供にダイアログが来るようにコードを修正します。

    【DialogControl】
    using UnityEngine;
    using System.Collections;

    public class DialogControl : MonoBehaviour {

    /// オブジェクトの初期設定.
    void Start(){
    gameObject.transform.parent = GameObject.Find("Camera").transform;
    gameObject.transform.localScale = new Vector2(1f,1f);
    }


    /// OKボタン押下時処理.
    public void Click_OK(){
    CloseDialog();
    GameObject.Find("Test").GetComponent().Proc();
    }

    /// NOボタン押下時処理.
    public void Click_NO(){
    CloseDialog();
    }

    /// ダイアログ抹殺.
    void CloseDialog(){
    Destroy(gameObject);
    }
    }


    でやってみると・・・・・


    でた!!
    OKボタン押すとちゃんとメッセージでるし、NOボタン押すとメッセージでないでダイアログが閉じます!

    って感じでダイアログ使ってます。色々間違えているような気もするが・・・・
    正しいというか、一般的なダイアログってみなさんどうしてるんでしょうか?
    何か方法ございましたら、喜んで聞きます!

    以上、本日の記事でした!

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

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