WisdomSoft - for your serial experiences.

ボタン

ボタンを描画する方法を解説します。押すことで何らかのアクションを実行する GUI 要素として活用できます。

ボタンを描画する

ラベルはテキストやテクスチャを描画するだけの GUI 要素でしたが、多くの GUI 要素はユーザーからの入力や操作を受けて何らかの値を得ることができます。中でも、基本となるのはボタンでしょう。

ボタンはユーザーがクリックやタッチで押すことのできる GUI 要素です。描画に関してはラベルと同じですが、スクリプトでボタンが押されたことを感知してスクリプトで処理できます。何らかの機能を発動させるスイッチとしてボタンを利用できます。

ボタンを描画するには GUI クラスの Button() メソッドを用います。

GUI クラス Button() メソッド
public static bool Button(Rect position, string text)
public static bool Button(Rect position, Texture image)
public static bool Button(Rect position, GUIContent content)
public static bool Button(Rect position, string text, GUIStyle style)
public static bool Button(Rect position, Texture image, GUIStyle style)
public static bool Button(Rect position, GUIContent content, GUIStyle style)

オーバーロードされた各種 Button() メソッドのパラメータは Label() メソッドと同様です。ボタンがクリックされたかどうかを表す bool 値を返します。OnGUI() メソッド内で Button() メソッドを呼び出し、このメソッドの結果を if ンを用いて調べることで、ボタンが押されたかどうかを監視します。

コード1
using UnityEngine;

public class Test : MonoBehaviour 
{
	void OnGUI()
	{
		Rect rect = new Rect(10, 10, 400, 100);
		bool isClicked = GUI.Button(rect, "Set UP!!");
		if (isClicked)
		{
			print("Stand by Ready!");
		}
	}
}
実行結果
コード1 実行結果

コード1はボタンを押すと「Console」ウィンドウに文字列を出力する単純なプログラムです。OnGUI() メソッド内で Button() メソッドを呼び出し、常にその結果を if 文で調べています。Button() メソッドから返された値を格納する isClicked 変数が true であれば、ボタンが押されたと判断できます。

リピートボタン

上記の Button() メソッドはボタンがクリックされたときに true を返しました。クリックはボタン上でマウスボタンを押し(タッチする)、その後にマウスボタンを離す一連の動作によって判定されます。したがって、ボタンを押している間は、まだ false が返されています。ボタンが押されたときに何らかのアクションを 1 度だけ実行する場合に適しています。

一方で、ボタンが押されている間に何らかの処理を実行し続ける場合は Button() メソッドによる通常のボタンではなく、RepeatButton() メソッドによるリピートボタンを描画します。

GUI クラス RepeatButton() メソッド
public static bool RepeatButton(Rect position, string text)
public static bool RepeatButton(Rect position, Texture image)
public static bool RepeatButton(Rect position, GUIContent content)
public static bool RepeatButton(Rect position, string text, GUIStyle style)
public static bool RepeatButton(Rect position, Texture image, GUIStyle style)
public static bool RepeatButton(Rect position, GUIContent content, GUIStyle style)

このメソッドは基本的に Button() メソッドと同じですが、ボタンが押されている間は true を返します。OnGUI() メソッドはフレームの間で連続して実行され続けているので、ボタンが押されている間に実行し続ける処理がある場合に有効です。

コード2
using UnityEngine;

public class Test : MonoBehaviour 
{
	void OnGUI()
	{
		Rect buttonRect = new Rect(10, 10, 400, 100);
		bool isClicked = GUI.RepeatButton(buttonRect, "Set UP!!");
		if (isClicked)
		{
			Rect labelRect = new Rect(10, 110, 400, 100);
			GUI.Label(labelRect, "Button pressed");
		}
	}
}
実行結果
コード2 実行結果

コード2はボタンが押されている間だけラベルを表示するというプログラムです。見た目は通常のボタンですが Button() メソッドではなく RepeatButton() メソッドを用いて描画している点に注目してください。