このブログはUnityの初心者向けに、Untiyの機能の使い方、基本のスクリプトファイルの使い方から応用までをご説明しています。中級以上の方に読んでいただきたい内容も随時更新していますので、お時間がある方、検索でここにアクセスされた方はぜひ立ち寄っていってください。
今回はUnityのUI活用方法の3回目、Button(ボタン)をクリックするたびに停止 ⇔ 起動を繰り返す「Pauseボタン」の作成方法です。この記事で使用するUIなどのオブジェクトは前回までの記事で作成したものを使用します。まだタイマーなどを作成していない場合は、こちらの記事をご参照頂き、作成してみてください。
下の動画は「ファイブボックス 一分間Unity講座 UIのボタンで停止、起動を繰り返す一時停止ボタンを作成する方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!
PauseButton の作成
まずはヒエラルキー上で右クリック、または左上の「+ボタン」から UI ⇒ Legacy ⇒ Button を選択します(OSやUnityのEditorバージョンによっては選択しの順番や名前が違いますがButtonが選ばれればOKです)
または前回の記事で作成済みの「CountButton」を右クリック、Duplicate で複製します。複製は「Controlキー」+「Dキー」でも可能です。
作成、または複製したボタンを Inspectorから下の図のように修正しておきましょう。
スクリプトファイルの作成
2-1 前回までのスクリプトファイル
今回はTextに表示されている時間を停止、起動を繰り返し検証を行います。前回までのプログラムで経過時間をテキストに表示する仕組みはできていますが、改めて記載しておきます。
作成済みのUIManager.cs を立ち上げて、以下のコードを確認、または記述します。なおUIManager.cs は Canvas にアタッチしています。
Text timeText,buttonText; //時間表示用のText、カウンター用のボタンンText
float timer; //時間を図る変数
int counter; //ボタンを押すたびに増えるカウンター
void Start()
{
//TimeTextを取得
timeText = transform.Find("Text").GetComponent<Text>();
//ButtonのTextを取得
buttonText=transform.Find("CountButton").GetComponentInChildren<Text>();
buttonText.text = counter.ToString(); //Counterの数をButtonに表示
}
void Update()
{
timer += Time.deltaTime; //時間を計測
timeText.text = timer.ToString("F2") + " 秒"; //TimeTextに時間を表示
}
public void CountUp() //カウンターを押すと発動する関数
{
counter++; //カウンターをインクリメント
buttonText.text = counter.ToString(); //カウンターをButtonのTextに表示
}
変数の宣言と初期値の取得
今回はボタンを押すたびにゲームが停止、起動を繰り返します。その状態を管理するbool型変数:isPause とボタンの内部の文字を管理するText型変数:pauseText を用意します。
Text pauseText; //PauseButtonの内部のTextを管理
bool isPause = false; //停止、起動を管理する変数、初期をfalseに
void Start()
{
//PauseButton のTextを探してpauseText に代入
pauseText = transform.Find("PauseButton").GetComponentInChildren<Text>();
pauseText.text = "PAUSE"; //Textの初期値をPAUSEに指定
}
ボタンが押されたときの処理
PauseButtonが押されたときに行うことは次の2つです
- 起動中(isPause が false の時)に押されたら isPause を true に、停止中(isPause が ftrue の時)に押されたら isPause を false にする
- isPause が true の時はPauseButtonの文字を「Play」に、false の時は「PAUSE」に変換
この内容を条件分岐を使って書くと、以下のように長いコードになってしまいます。
public void Pause()
{
if(isPause)
{
isPause = false;
pauseText.text = "PLAY";
}
else
{
isPause = true;
pauseText.text = "PAUSE";
}
}
行うことは単純ですが、コードが長くなってしまいます。
上の実施内容の 1, は isPause
が true
なら false
に、false
なら true
に変更するだけなので、現在の値と逆になればよいだけです。したがって、次のように記述することができます。
isPause = !isPause
2, の項目は三項演算子を使用して次のように記述することができます。
pauseText.text = isPause ? "PLAY" : "PAUSE";
つまり PauseButton が押されたときの処理は次のようにまとめることができます。
public void Pause()
{
isPause = !isPause;
pauseText.text = isPause ? "PLAY" : "PAUSE";
}
一時停止処理
一時停止処理は実際にプログラムが止まっているわけではなく、isPause
が true
の場合に行う処理をスキップさせます。
void Update()
{
if (isPause) return; //isPause が true なら以下の処理をスキップ
timer += Time.deltaTime; //時間を計測
timeText.text = timer.ToString("F2") + " 秒"; //TimeTextに時間を表示
}
さらに関数:CountUp()
も以下のように記述できます
public void CountUp() //カウンターを押すと発動する関数
{
if (isPause) return; //isPause が true なら以下の処理をスキップ
counter++; //カウンターをインクリメント
buttonText.text = counter.ToString(); //カウンターをButtonのTextに表示
}
関数の登録
最後は PauseButton に作成した関数:Pause()
をセットします。
下の図を参考に関数をセットしておきましょう。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。