2016-07-27 2 views
1

Итак, я реализую изогнутый класс Text, который наследуется от текста. В этом у меня есть эта OnValidate реализация:Почему я не могу переопределить «OnValidate()» в Unity3D?

protected override void OnValidate() 
{ 
    base.OnValidate(); 
    // some other code 
} 

Теперь, когда я пытаюсь построить проект, я получаю эту ошибку:

error CS0115: CurvedText.OnValidate() is marked as an override but no suitable method found to override 

Итак, я был в порядке, это даже странно VS предложить подмену. Итак, что мне делать дальше? Удалите ключевое слово переопределения и игнорируйте предупреждение VS. Таким образом, теперь единство вызывает эту ошибку:

error CS0117: UnityEngine.UI.Text does not contain a definition for OnValidate 

Итак, что мне теперь делать? Я должен также упомянуть, что когда скрипт добавляется к объекту в сцене, он работает так, как ожидалось, и ошибок не возникает.

+0

Существует нет OnValidate в базовом классе для переопределения –

+0

, но вещь есть. [Проверить это] (https://docs.unity3d.com/ScriptReference/UI.Text.html) –

+2

Согласно ссылке, 'OnValidate' не является' virtual', поэтому его нельзя переопределить. Это может быть просто неточностью ссылки на скрипт, но поскольку VS соглашается, это, вероятно, так. – Luaan

ответ

1

Потому что OnValidate является частью системы обмена сообщениями Unity3D.

И как this blog упоминает эту функцию обмена сообщениями будет решена только тогда, когда MonoBehaviour Объект первый раз доступ и базовый сценарий контролируется при помощи сценариев выполнения (моно или IL2CPP).

Так что прямо сейчас, для компилятора, это не OnValidate для переопределения.

Просто вызовите метод следующим образом:

void OnValidate() 
{ 
    // some other code 
} 

мои 2 цента на комментарии

  • protected Ключевое слово не мешает вещи от перезаписи.

  • Ключевое слово используется для изменения параметров и их переопределение в производном классе. Это означает, что вы не можете переопределить не виртуальный метод.

+0

Хорошо, это работает как в сборке, так и в редакторе, но теперь VS жалуется, что я скрываю унаследованный элемент. Наверное, я могу жить с одной зеленой линией. Спасибо man/ –

+0

Я вчера наткнулся на эту запись в блоге. Нет проблем! – Smartis

+0

_ «не означает, что это неправильно». _ Мне кажется, что полная комбайн языка языка C# мне. – Gusdor

Смежные вопросы