WisdomSoft - for your serial experiences.

テキスト入力

ユーザーがキーボードなどを用いて文字列を任意に編集できるテキストボックスを表示します。

テキストボックス

テキストボックスを表示し、ユーザーが入力した任意の文字列を受けれます。一般的なゲームではテキストボックスが使われるような場面はありませんが、例えばネットワークに対応したゲームで、ユーザー名やパスワード、チャットなどの入力に必要になるでしょう。

テキストボックスにはいくつかの種類がありますが、中でも GUI クラスの TextField() メソッドで描画する一行テキストボックスが最も単純です。

GUI クラス TextField() メソッド
public static string TextField(Rect position, string text)
public static string TextField(Rect position, string text, GUIStyle style)
public static string TextField(Rect position, string text, int maxLength)
public static string TextField(Rect position, string text, int maxLength, GUIStyle style)

position パラメータにはテキストボックスの位置とサイズを表す長方形領域を指定します。text パラメータに表示するテキストとなる文字列を、maxLingth パラメータに入力可能な文字数を指定します。maxLingth パラメータを省略した場合、文字数の制限はありません。style パラメータには描画するテキストボックスの GUI スタイルを指定します。

このメソッドは、現在入力されている文字列を返します。

コード1
using UnityEngine;

public class Test : MonoBehaviour 
{
	void OnGUI()
	{
		Rect rect1 = new Rect(10, 10, 400, 30);
		GUI.TextField(rect1, "Stand by Ready!!");
	}
}
実行結果
コード1 実行結果

コード1は TextField() メソッドに指定した文字列リテラルを固定表示するテキストボックスです。TextField() メソッドの第2パラメータに常に同じ文字列リテラルを指定し、キー入力の結果を反映させていないため、テキストボックス上に表示する文字列をキー入力で変更することはできません。

ユーザーによるキー入力で編集された文字列は TextField() メソッドの結果として得られます。これをフィールドなどに一時保存し、次の OnGUI() メソッドで反映させるとで、編集可能なテキストボックスになります。

コード2
using UnityEngine;

public class Test : MonoBehaviour 
{
	private string text = "";
	void OnGUI()
	{
		Rect rect1 = new Rect(10, 10, 400, 30);
		text = GUI.TextField(rect1, text, 16);
	}
}
実行結果
コード2 実行結果

コード2は任意の文字列を入力できる、標準的な一行テキストボックスを描画します。

ゲーム内でユーザーが入力した任意の文字列を使用する場合は注意が必要です。予期しない文字コードが含まれていたり、全角空白など印字されない文字が入力される可能性があります。入力された文字が、すべてゲーム内で使用可能かどうかを調べる必要があります。

パスワード入力

オンラインゲームやソーシャルゲームなど、Web と通信してユーザー認証を行うようなゲームでは、ゲーム内にパスワードなど機密性の高いテキストを入力したいことがあるでしょう。このような場合は、入力された文字を指定した任意の文字でマスクするパスワード用のテキストボックスを利用できます。パスワードの入力には PasswordField() メソッドを用います。

GUI クラス PasswordField() メソッド
public static string PasswordField(Rect position, string text, char maskChar)
public static string PasswordField(Rect position, string text, char maskChar, GUIStyle style)
public static string PasswordField(Rect position, string text, char maskChar, int maxLength)
public static string PasswordField(Rect position, string text, char maskChar, int maxLength, GUIStyle style)

position パラメータにはテキストボックスの位置とサイズを表す長方形領域を指定します。text パラメータに表示するテキストとなる文字列を、maskChar パラメータにマスク文字を、maxLingth パラメータに入力可能な文字数を指定します。maxLingth パラメータを省略した場合、文字数の制限はありません。style パラメータには描画するテキストボックスの GUI スタイルを指定します。

このメソッドは、現在入力されている文字列を返します。

画面に表示される文字が maskChar パラメータに指定した文字に置き換えられるという点を除けば TextField() メソッドと同じです。

コード3
using UnityEngine;

public class Test : MonoBehaviour 
{
	private string text = "";
	void OnGUI()
	{
		Rect rect1 = new Rect(10, 10, 400, 30);
		text = GUI.PasswordField(rect1, text, '*', 24);
		
		Rect rect2 = new Rect(10, 40, 400, 30);
		GUI.Label(rect2, text);
	}
}
実行結果
コード3 実行結果

コード3は PasswordField() メソッドを用いてパスワード入力用のテキストボックスを描画します。入力された文字が何であれ、画面上にはマスク文字に指定した * 記号が表示されます。確認のため、テキストボックスの下部に入力された実際の文字列を表示しています。 

複数行テキストの入力

TextField() メソッドや PasswordField() メソッドで表示するテキストボックスは改行できません。複数行に渡る長い文章を入力する場合は TextField() メソッドの代わりに TextArea() メソッド使ってください。改行文字を入力できる点を除いて TextField() メソッドと同じです。

GUI クラス TextArea() メソッド
public static string TextArea(Rect position, string text)
public static string TextArea(Rect position, string text, GUIStyle style)
public static string TextArea(Rect position, string text, int maxLength)
public static string TextArea(Rect position, string text, int maxLength, GUIStyle style)

position パラメータにはテキストボックスの位置とサイズを表す長方形領域を指定します。text パラメータに表示するテキストとなる文字列を、maxLingth パラメータに入力可能な文字数を指定します。maxLingth パラメータを省略した場合、文字数の制限はありません。style パラメータには描画するテキストボックスの GUI スタイルを指定します。

このメソッドは、現在入力されている文字列を返します。

コード4
using UnityEngine;

public class Test : MonoBehaviour 
{
	private string text = "";
	void OnGUI()
	{
		Rect rect1 = new Rect(10, 10, 400, 200);
		text = GUI.TextArea(rect1, text);
	}
}
実行結果
コード4 実行結果

コード4は TextArea() メソッドを使用して複数行のテキストを入力可能なテキストボックスを描画します。

ちなみに、TextField() メソッドや PasswordField() メソッドで表示するテキストボックスでも改行文字を含む文字列をパラメータに指定することは可能です。特に TextField() メソッドの場合、改行文字を含む文字列を渡せば描画するテキストボックスでも正しく改行されたテキストが表示されます。単に、キー入力で改行文字を受け付けないだけです。