ラジオボタンの作成(Editor拡張)

ラジオボタンの作成(Editor拡張)

 EditorWindowでラジオボタンを作成する方法です。

GUILayout.SelectionGridを用いて作成

 GUILayout.SelectionGridは選択したボタンのインデックスを返します。動作としてはラジオボタンと同じですが、実行すると

このように、複数のボタンが並んだ状態で表示されます。このGUILayout.SelectionGridに、EditorStyle.radioButtonを追加すると

このように、見た目をラジオボタンへ変更することができます。

Script

 GUILayout.SelectionGridを用いてラジオボタンを作成するScriptは以下の通りです。

GUIStyle.Drawを用いて作成

 ラベル色の変更などができるように、GUIStyle.Drawを用いてラジオボタンを作成しました。

Script

 GUIStyle.Drawを用いて作成するラジオボタンのScriptは以下の通りです。

ラジオボタンを作成する上で表示するラベル(labels)からラジオボタンの数を取得します。また、ラジオボタンとラベルの隙間(margin)を決めておきます。次に、GUIStyleからラジオボタンの大きさを取得します(button_size)。

ラベルのスタイルを変更するために使用するGUIStyleを作成します。また、Eventからマウスの位置を取得します(mouse_pos)。

for文内でラジオボタンを作成します。GUIUtility.GetControlIDによりラジオボタンに設定するidを取得し(control_id)、GUILayoutUtility.GetRectでコントロールで使用するRectを取得します。このRectからlabelとボタン部分のRectを計算します。

EventType.MouseDownとRect.Containsを用いてラジオボタンがクリックされたかを判定します。クリックされた場合は、出力するインデックス(selected)を取得します。また、キーボードでフォーカスされているidにクリックされたラジオボタンのidを渡します。また、Repaint()によって再描画を行います。

クリックされたラジオボタンのラベル色を変更します。変更したGUIStyle(style_label_temp)と先ほど求めたlabelのRectを用いてlabelを作成します。

最後にラジオボタンのボタン部分をGUIStyle.Drawを用いて作成します。ラジオボタンのインデックスが選択されているラジオボタンのインデックス(selected)と等しいとき、button_on=tureとすることでラジオボタンが選択された状態の画像で描画されるようにしています。

実行結果

 GUIStyle.Drawを用いて作成したラジオボタンを実行するScriptは以下の通りです。

このScriptを実行すると以下のようになります。問題なく動作していることが分かります。