トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

unity_script_gui_widgets

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の第二引数に値、第三引数に最小値、第四引数に最大値を指定します。