示例#1
0
    /// <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();
        }
    }
示例#2
0
    /// <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();
                }
            }
        }
    }