トップ 一覧 検索 ヘルプ 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!メッセージがコンソールに表示されます。
{{ref_image unity_gui_button.png}}
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);
    }
 }
{{ref_image unity_gui_button_02.png}}

!!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の第二引数で指定したテキストが、マウスオーバー時にツールチップとして表示される。
{{ref_image unity_gui_button_03.png}}

!ボタンに画像を指定
スクリプト内で
 public Texture2D m_icon;
のようにpublicでTexture2Dを記述。MonoからいったんUnityに戻り、
対象のGameObjectのInspectorウィンドウで割り当て。
{{ref_image unity_gui_button_05.png}}
再びスクリプトに戻ってOnGUI関数内で
 GUI.Button(new Rect(20, 50, 80, 20), m_icon);
のように記述すると、テキストの代わりにアイコンを指定できます。
{{ref_image unity_gui_button_06.png}}

!!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を入れると、それがグループの背景のテクスチャになります。
{{ref_image unity_gui_button_04.png}}

!!TextArea
複数入力が可能なテキスト領域です。
 private string m_textStr = "";
 
 void OnGUI() {
   m_textStr = GUI.TextArea(new Rect(10, 10, 120, 80), m_textStr);
 }

{{ref_image unity_gui_button_07.png}}
横スクロールはせずに折り返します。
また、縦スクロールしますがスクロールバーは表示されません。

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