/// <summary>デバッグログを追加する</summary> /// <param name="columnName">カラム名</param> /// <param name="format">本文</param> public static void Log(string columnName, string format, params object[] args) { //キーが存在しない場合は新規にカラムを作成 if (!_columns.ContainsKey(columnName)) { _columns.Add(columnName, new Queue <LogData>()); ColumnProperty prop = new ColumnProperty(); SetLogColumnProperty(columnName, prop); } format = string.Format(format, args); StringBuilder builder = new StringBuilder(1024); builder.AppendFormat("<color=#c0c0c0>{0}</color>", format); //色を置き換える if (_columnProps.ContainsKey(columnName)) { foreach (var elem in _columnProps[columnName]._coloredWords) { builder.Replace(elem.word, string.Format("<color={0}>{1}</color>", TFColor.GetCodeFromColor(elem.color), elem.word)); } } //溢れたデータをポップする LogData logData = new LogData(builder.ToString(), Time.time); _columns[columnName].Enqueue(logData); if (_columns[columnName].Count > _capacity) { _columns[columnName].Dequeue(); } }
/// <summary>描画関数</summary> void OnGUI() { Color[] colors = { TFColor.GetColorFromCode(0x2a2a2a), TFColor.GetColorFromCode(0x303030) }; //Assets側からデータを取得 var columns = TFDebug.columns; //カラム幅の計算 var width = this.position.width / columns.Count; using (var h1 = new EditorGUILayout.HorizontalScope()) { foreach (var elem in columns) { var prop = TFDebug.GetLogColumnProperty(elem.Key); using (var v1 = new EditorGUILayout.VerticalScope()) { using (var h2 = new EditorGUILayout.HorizontalScope()) { //カラムヘッダーの描画 EditorGUILayout.LabelField(elem.Key, GUILayout.Width(width / 2f)); } using (var h2 = new EditorGUILayout.HorizontalScope()) { //ログ消去ボタン if (GUILayout.Button("Clear", EditorStyles.miniButtonLeft, GUILayout.Width(width / 2f))) { TFDebug.ClearLogColumn(elem.Key); } prop.collapsed = GUILayout.Toggle(prop.collapsed, "Collapse", EditorStyles.miniButtonRight); } prop.scrollPosition = EditorGUILayout.BeginScrollView(prop.scrollPosition, GUILayout.Height(v1.rect.height)); //ログ配列の取得 var logs = elem.Value.ToArray(); for (int f2 = logs.Length - 1; f2 >= 0; f2--) { //GUIStyleをラップ(折り返し)/リッチテキスト(カラータグが使えるようになる等)に設定 GUIStyle style = new GUIStyle(); style.wordWrap = true; style.richText = true; using (var h2 = new EditorGUILayout.HorizontalScope()) { //ログ背景の描画 EditorGUI.DrawRect(h2.rect, colors[f2 % 2]); //ログ本文の描画 EditorGUILayout.LabelField(logs[f2].text, style, GUILayout.Width(width)); } } EditorGUILayout.EndScrollView(); } } } }