!!!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}}