WisdomSoft - for your serial experiences.

GUIコンテンツ

ラベルやボタンなどの GUI 要素上に表示するコンテンツを GUIContent クラスで表すことができます。テキストとテクスチャを組み合わせて描画する場合などに用います。

GUI要素の内容

ラベルであれ、ボタンのような他の GUI 要素であれ、GUI 上に表示する文字列やテクスチャを GUI コンテンツと呼びます。GUI コンテンツは UnityEngine.GUIContent クラスによって表されます。文字列とテクスチャを合わせて GUI 上に表示したい場合や、GUI の内容を Unity エディタから編集可能な 1 つの変数として扱いたい場合に有効です。

UnityEngine.GUIContent クラス
[Serializable]
public sealed class GUIContent

このクラスは GUI の内容となるテキストとテクスチャを持ちます。それぞれ、コンストラクタから設定できます。

GUIContent クラスのコンストラクタ
public GUIContent()
public GUIContent(string text)
public GUIContent(Texture image)
public GUIContent(string text, Texture image)

text パラメータには GUI に表示されるテキストとなる文字列を、image パラメータには GUI に表示されるテクスチャを指定します。

テキストは text プロパティ、テクスチャは image プロパティから設定または取得できます。

GUIContent クラス text プロパティ
public string text { get; set; }
GUIContent クラス image プロパティ
public Texture image { get; set; }

ラベルなどの GUI 要素は GUIContent オブジェクトから描画することができます。GUIContent オブジェクトを受けとるオーバーロードされた Label() メソッドが用意されています。 

GUI クラス Label() メソッド
public static void Label(Rect position, GUICentent content)

position パラメータに描画するラベルの長方形領域を、contont パラメータにラベルの内容を定義する GUIContent オブジェクトを指定します。

コード1
using UnityEngine;

public class Test : MonoBehaviour 
{
	private GUIContent content;
	
	void Start()
	{
		content = new GUIContent();
		content.text = "Stand by Ready!";
	}
	void OnGUI()
	{
		Rect rect = new Rect(10, 10, 400, 300);
		GUI.Label(rect, content);
	}
}
実行結果
コード1 実行結果

コード1は Start() メソッドで GUIContent オブジェクトを生成し、ここからラベルを描画しています。この GUIContent オブジェクトはテキストを持つだけなので、実行結果は「ラベル.コード1」と同じです。

GUIContent 型のフィールドを公開すれば「Inspector」ウィンドウから編集できます。

コード2
using UnityEngine;

public class Test : MonoBehaviour 
{
	public GUIContent content;
	void OnGUI()
	{
		Rect rect = new Rect(10, 10, 400, 300);
		GUI.Label(rect, content);
	}
}
実行結果
コード2 実行結果

コード2は GUIContent 型の content フィールドを公開しているため Unity エディタ上の「Inspector」ウィンドウから編集できます。スクリプトは常に content フィールドの値からラベルを描画しているため、設定したテキストやテクスチャが表示されます。