2017-01-19 8 views
1

Компонент текста Unity имеет 323232FF, установленный как цвет по умолчанию. Когда я расширяю компонент Text, этот цвет больше не установлен (он белый).Установить цвет текста по умолчанию при расширении Текстовый компонент

enter image description here

¿Как я могу установить цвет текста по умолчанию при расширении компонента?

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

ответ

0

Две вещи, чтобы рассмотреть здесь :

  1. Когда вы удаляете и повторно добавляете компонент Text из одного GameObject, его первоначальный цвет становится белым. Этот белый цвет является значением по умолчанию в 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 
    } 
} 
+0

Довольно интересно, я не думал о GUI.skin. Поэтому, чтобы сделать его совместимым с настройкой, я должен проверить, будет ли color == white переписывать его, используя тему по умолчанию, как вы указали. 'if (color == Color.white) { color = GUI.skin.textField.normal.textColor; } '}' Еще одна вещь, что цвет textField черный, а не '323232FF': S Я помню, что в Unity было место для проверки цвета кожи GUI, поэтому я сделаю некоторые поиски! – FrakyDale

+0

Ну, я положил * или что-то еще, потому что фактически цвет не тот, который вы искали :) – Aybe

0

Мне кажется, не углубляясь в код Текст, который ваш класс не вызывает конструктор Text. Даже если вы не определяете конструктор, ваш класс по умолчанию выглядит так.

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

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

Возможно, вам понадобится конструктор вызвать конструктор текста.

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

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

Это неверно, по умолчанию будет создан по умолчанию пустой конструктор, вызывающий базовый конструктор. Кстати, «конструктор» - это злое место, чтобы делать что-то в Unity, поскольку они, вероятно, потерпят неудачу (https://docs.unity3d.com/Manual/script-Serialization.html). – Aybe

+1

@Aybe Или вызов класса Awake в базовом классе, который также не вызван наследующим классом. –

+0

Вы правы, на самом деле я этого не делал, потому что нигде в цепочке наследования он не используется. – Aybe