GUI部品
ラベルやボタン、テキストフィールドがGUI部品として存在します。
これらは「GUI」のクラスで使用できます。
http://docs-jp.unity3d.com/Documentation/Components/gui-Basics.html
たとえば、ボタンに反応する場合は以下のように記載します。
using UnityEngine; using System.Collections; public class drawGUI : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI () { if (GUI.Button(new Rect (40,10,80,20), "ボタン")) { print ("OK!"); } } }
スクリーン左上を(0, 0)としたときの(40, 10)の位置に80 x 2 pixelのボタンを表示。
ボタンを押すと、OK!メッセージがコンソールに表示されます。
GUI部品は、OnGUI関数内で記述してイベント処理もこの中で行われます。
BOXを使用することで、コントロール類をグループの中に配置します。
private string m_textStr = "input"; void OnGUI () { GUI.Box(new Rect(10, 10, 100, 130), "Group"); GUI.Label(new Rect(20, 40, 80, 20), "ラベル"); if(GUI.Button(new Rect(20, 70, 80, 20), "ボタン")) { print("OK!"); } { m_textStr = GUI.TextField(new Rect(20, 100, 80, 20), m_textStr, 8); print ("text : " + m_textStr); } }
Box
GUI.Box(new Rect(10, 10, 100, 130), "Group");
ボックス枠を表示。
Rectは第一引数から、位置X、位置Y、幅、高さ、の順番。
Label
GUI.Label(new Rect(20, 40, 80, 20), "ラベル");
表示だけのテキストを表示。背景は透過になります。
GUIStyle style = new GUIStyle(); style.normal.textColor = Color.green; GUI.Label(new Rect(20, 40, 80, 20), "ラベル", style);
とすると、ラベルのテキスト色を変更できます。
Button
if(GUI.Button(new Rect(20, 70, 80, 20), "ボタン")) { print("OK!"); }
ボタンを配置。ボタンプッシュされたらtrueが返される。
if(GUI.Button(new Rect(20, 70, 80, 20), new GUIContent("ボタン", "ツールチップ"))) { print("OK!"); } GUI.Label(new Rect(40, 50, 120, 20), GUI.tooltip);
のようにすると、2つめのGUI.Labelの指定により、GUI.ButtonのGUIContentの第二引数で指定したテキストが、マウスオーバー時にツールチップとして表示される。
ボタンに画像を指定
スクリプト内で
public Texture2D m_icon;
のようにpublicでTexture2Dを記述。MonoからいったんUnityに戻り、
対象のGameObjectのInspectorウィンドウで割り当て。
再びスクリプトに戻ってOnGUI関数内で
GUI.Button(new Rect(20, 50, 80, 20), m_icon);
のように記述すると、テキストの代わりにアイコンを指定できます。
TextField
private string m_textStr = "input"; m_textStr = GUI.TextField(new Rect(20, 100, 80, 20), m_textStr, 8);
入力フィールド。第二引数で表示するテキストを指定。第三引数は最大の文字数。
戻り値は、変更されたテキストの文字列。
入力が変化するたびに呼び出される。
Group
GUI.BeginGroup(new Rect(20, 20, 120, 110)); GUI.Button(new Rect(20, 20, 80, 20), new GUIContent("ボタン", "ツールチップ")); GUI.Label(new Rect(40, 0, 120, 20), GUI.tooltip); GUI.Button(new Rect(20, 50, 80, 20), "ボタン2"); GUI.Button(new Rect(20, 80, 80, 20), "ボタン2"); GUI.EndGroup();
GUI.BeginGroup 〜 GUI.EndGroup内で、GUI部品を配置することで
入れ子構造の相対的は配置を行うことができます。グループ内のGUI部品の位置は、グループの左上を(0, 0)としたときの相対位置で指定します。
なお、上記の例ではグループ自身の描画は行われません。
グループの背景を変更
背景にTexture2Dのテクスチャを指定することで、背景色や模様を変更することができます。
private Texture2D m_texture; void Start () { // 灰色のテクスチャを作成. m_texture = new Texture2D(16, 16); for (int y = 0; y < m_texture.height; y++) { for (int x = 0; x < m_texture.width; x++) { m_texture.SetPixel(x, y, Color.gray); } } m_texture.Apply(); } void OnGUI () { // グループの背景にTexture2Dのテクスチャを指定. GUIStyle style = new GUIStyle(); style.normal.background = m_texture; GUI.BeginGroup(new Rect(20, 20, 120, 110), style); GUI.Button(new Rect(20, 20, 80, 20), new GUIContent("ボタン", "ツールチップ")); GUI.Label(new Rect(40, 0, 120, 20), GUI.tooltip); GUI.Button(new Rect(20, 50, 80, 20), "ボタン2"); GUI.Button(new Rect(20, 80, 80, 20), "ボタン2"); GUI.EndGroup(); }
あらかじめTexture2Dのテクスチャを作成しておき(m_texture)、
GUIStyleというのを生成し、それの「style.normal.background」に代入。
BeginGroupの第二引数で生成したstyleを入れると、それがグループの背景のテクスチャになります。
TextArea
複数入力が可能なテキスト領域です。
private string m_textStr = ""; void OnGUI() { m_textStr = GUI.TextArea(new Rect(10, 10, 120, 80), m_textStr); }
横スクロールはせずに折り返します。
また、縦スクロールしますがスクロールバーは表示されません。
HorizontalSlider
水平方向のスライダを配置。
private float m_value = 0.0f; void OnGUI() { GUI.Label(new Rect(10, 35, 30, 20), m_value.ToString()); m_value = GUI.HorizontalSlider(new Rect(50, 40, 100, 20), m_value, 0.0f, 1.0f); }
Labelはスライダの数値を表示するために配置。
HorizontalSliderの第二引数に値、第三引数に最小値、第四引数に最大値を指定します。