05 «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.» 07

ハルシオンシステムの気まま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.blog.fc2.com/tb.php/89-b90873b6
この記事にトラックバックする(FC2ブログユーザー)