扩展文本组件时设置默认文本颜色

Set default text color when extending Text component

Unity 的文本组件 323232FF 默认设置为颜色。当我扩展文本组件时,不再设置该颜色(它是白色)。

¿扩展组件时如何设置默认文本颜色?

using UnityEngine;
using UnityEngine.UI;

[AddComponentMenu("UI/CodeText", 10)]
public class CodeText : Text
{
    void Awake() {
        Game.Instance.trackMe();
    }
}

Unity的Text组件源码:

https://bitbucket.org/Unity-Technologies/ui/src/0155c39e05ca5d7dcc97d9974256ef83bc122586/UnityEngine.UI/UI/Core/Text.cs?at=5.2&fileviewer=file-view-default

我不会覆盖看起来正在设置颜色的 "GetGenerationSettings" :S

这里需要考虑两点:

  1. 当您从一个 GameObject 中删除 re-add Text 组件时,其初始颜色变为白色。白色是 Graphic 中的默认值,Text 继承自该值。

  2. 这是因为调用层次结构 UI/Text 上下文菜单不仅仅是简单地添加一个 Text 组件,它还应用了一个默认主题。

除非您能准确地发现源代码中的层次结构菜单做了什么,否则您可以执行以下操作来设置默认属性:

using UnityEngine;
using UnityEngine.UI;

[AddComponentMenu("UI/MyText", 10)]
public class MyText : Text
{
    protected override void Awake()
    {
        color = GUI.skin.textField.normal.textColor; // or whatever
    }
}

在我看来,在不深入研究 Text 代码的情况下,您的 class 并未调用 Text 的构造函数。即使您没有定义构造函数,您的 class 默认情况下也是这样。

public class CodeText : Text
{
    public CodeText() { 
    }

    void Awake() {
        Game.Instance.trackMe();
    }
}

您可能需要做的是让构造函数调用 Text 的构造函数。

public class CodeText : Text
{
    public CodeText() : base() { 
    }

    void Awake() {
        Game.Instance.trackMe();
    }
}