【问题标题】:Set default text color when extending Text component扩展文本组件时设置默认文本颜色
【发布时间】:2017-01-19 20:05:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# unity3d unity5


    【解决方案1】:

    这里需要考虑两件事:

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

    2. 这是因为调用层次结构 UI/文本上下文菜单不仅仅是添加 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
        }
    }
    

    【讨论】:

    • 很有趣,我没有想到 GUI.skin。因此,为了使其也与自定义兼容,我应该检查 color == white 是否使用您提供的默认主题来重写它。 if (color == Color.white) { color = GUI.skin.textField.normal.textColor; } 还有一件事,textField 颜色是黑色而不是 323232FF :S 我记得 Unity 中有一个地方可以检查 GUI 皮肤颜色,所以我会进行一些搜索!
    • 好吧,我已经放了 或其他任何东西,因为实际上颜色不是您要寻找的颜色 :)
    【解决方案2】:

    在我看来,没有深入研究 Text 的代码,您的类没有调用 Text 的构造函数。即使你没有定义构造函数,你的类默认也是这样的。

    public class CodeText : Text
    {
        public CodeText() { 
        }
    
        void Awake() {
            Game.Instance.trackMe();
        }
    }
    

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

    public class CodeText : Text
    {
        public CodeText() : base() { 
        }
    
        void Awake() {
            Game.Instance.trackMe();
        }
    }
    

    【讨论】:

    • 那是不正确的,默认会生成一个调用基础构造函数的默认空构造函数。顺便说一句,'constructor' 在 Unity 中是一个邪恶的地方,因为它们很可能会失败 (docs.unity3d.com/Manual/script-Serialization.html)。
    • @Aybe 或者调用基类中的Awake,继承类也没有调用。
    • 你是对的,实际上我没有,因为它在继承链中没有被使用。
    猜你喜欢
    • 2022-11-13
    • 2021-05-24
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2019-08-22
    相关资源
    最近更新 更多