GUIでポップアップを作りたかった
- GUIでポップアップを作ろうと思った(EditorWindowで遊んでた)
- ポップアップメニューによくある右のやつ(
)を表示したかった - GUIStyleとか調べたけどそんなもんはねえって言われた
- GetCursorPixelPositionを使って長さ計測してちょうどいい感じにするやり方の話
その他やったこと
- 画像を使ってimagePositionでできないの?
右側なんてオプションはねえ - GUIStyle.overflowでずらせば?
文字よりも画像のほうが先に描画された
GetCursorPixelPosition の使い方
public Vector2 GetCursorPixelPosition(Rect position, GUIContent content, int cursorStringIndex);
公式ドキュメントにすら「Get the pixel position of a given string index.」とかしか書いてないこのメソッドは試してみたところ
positionを起点としてこのスタイルでcontentの内容を描画した時cursorStringIndexの文字の描画位置の左上を返してくれる
ということがわかったのでこれを元にforで回して描画範囲を超えたらその一個前で止めるってことにしました。
(多分空白計算したほうが早いけど思考停止)
var text = content.text;
int i = 0;
int border = (int)(rect.position.x + rect.size.x);
for (; ; i++)
{
content.text = text + new String(Enumerable.Repeat(' ', i).ToArray()) + "▼▼";//これがボーダー超えるまで回す
var s = style.GetCursorPixelPosition(rect, content, content.text.Length);
if (s.x > border)
{
break;
}
}
content.text = text + new String(Enumerable.Repeat(' ', i).ToArray()) + "▼";
if (GUI.Button(rect, content, style))
{
//やりたいこと
}
というわけで出来たはできたんだけどUnityちゃんの便利な機能でできませんかね!
EditorGUILayout使えってことですね!