- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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}}