2016-07-27 5 views
1

私はテキストを継承した曲線のTextクラスを実装しています。その中で私はこのOnValidate実装を持っている:Unity3Dで "OnValidate()"をオーバーライドできないのはなぜですか?

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 

それでは、私はOKだった、これは奇妙であってもVSオーバーライドを示唆しています。それで私は次に何をしますか? overrideキーワードを削除し、VS警告を無視します。だから今、統一はこのエラーを投げます:

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

私は今何をしますか?また、シーン内のオブジェクトにスクリプトを追加すると、期待どおりに動作し、エラーはスローされません。

+0

オーバーライド –

+0

の基本クラスにはOnValidateはありませんが、それがあります。 [これをチェックする](https://docs.unity3d.com/ScriptReference/UI.Text.html) –

+2

参照によると、 'OnValidate'は' virtual'ではないので、オーバーライドすることはできません。これはスクリプト参照の不正確さに過ぎないかもしれませんが、VSが同意するので、おそらく本当です。 – Luaan

答えて

1

OnValidateはUnity3Dメッセージングシステムの一部です。

this blogには、 MonoBehaviourオブジェクトに初めてアクセスし、スクリプト実行時(MonoまたはIL2CPPのいずれか)で基本スクリプトが検査された場合にのみ、このメッセージング機能が解決されると記載されています。

今、コンパイラの場合、therは無効にするOnValidateではありません。

は、単純に次のようにメソッドを呼び出します。コメントへの

void OnValidate() 
{ 
    // some other code 
} 

私の2セント

  • protectedキーワードが上書きされてから物事を防ぐことはできません。

  • virtualvirtualキーワードは物事を修正し、それらを派生クラスで上書きできるようにするために使用されます。つまり、非仮想メソッドをオーバーライドすることはできません。

+0

これはビルドとエディタの両方で動作しますが、VSは継承したメンバを非表示にしていると不平を言っています。私はそこに一本の緑色の線で暮らすことができると思う。ありがとうございました/ –

+0

私はこのブログのエントリについて昨日つまずいた。問題ない! – Smartis

+0

_ "それは間違っているとは限りません。" _私にはC#言語仕様の総屠殺のように聞こえる。 – Gusdor

関連する問題