ざきのメモ

2020/3/20

Label に色をつける - Unity エディタ拡張

Unity のエディタ拡張で、スタイルを崩すことなくラベルに色をつける方法をメモします。

使用環境

Unity 2019.2.13f1

手順

1, 使用する変数の用意

以下の変数をクラス内に用意します。

private bool isFirst = true;
private Color defaultLabelColor;

次に、OnGUI() メソッド内などに以下を追記し, 使用スタイルの色を取得します。

// 初回に, 使用スタイルのラベルの色を取得する
if (isFirst) {
    this.defaultLabelColor = GUI.skin.label.normal.textColor;
}
this.isFirst = false;

2, 任意の色のラベルを描画するメソッドを用意

以下のメソッドをクラス内に用意します。

標準のラベルも併用できるように、スタイルを復元しています。

// 任意の色のラベルを描画するメソッド
private void colorLabel(string text, Color color) {
    GUIStyle style = GUI.skin.label;
    GUIStyleState styleState = new GUIStyleState();
    styleState.textColor = color;
    style.normal = styleState;

    GUILayout.Label(text, style);

    GUIStyleState styleState2 = new GUIStyleState();
    styleState2.textColor = this.defaultLabelColor;
    style.normal = styleState2;
}

3, 任意の色のラベルを描画

ラベルを置きたい箇所に以下の記述をします。

以下の例は、緑色で Hello と描画するものです。

// 緑色で Hello と書かれたラベル
colorLabel("Hello", new Color(0.0f, 1.0f, 0.0f));

まとめ

上記をまとめると, 以下になります。

クラスに内に組み込むことで動作します。

private bool isFirst = true;
private Color defaultLabelColor;

void OnGUI() {
    // 初回に, 使用スタイルのラベルの色を取得する
    if (isFirst) {
        this.defaultLabelColor = GUI.skin.label.normal.textColor;
    }
    this.isFirst = false;

    // 緑色で Hello と書かれたラベル
    colorLabel("Hello", new Color(0.0f, 1.0f, 0.0f));
}

// 任意の色のラベルを描画するメソッド
private void colorLabel(string text, Color color) {
    GUIStyle style = GUI.skin.label;
    GUIStyleState styleState = new GUIStyleState();
    styleState.textColor = color;
    style.normal = styleState;

    GUILayout.Label(text, style);

    GUIStyleState styleState2 = new GUIStyleState();
    styleState2.textColor = this.defaultLabelColor;
    style.normal = styleState2;
}

参考

Copyright © 2017-2021 Ryo Okazaki, all rights reserved.