2016-07-27 13 views
1

Also implementiere ich eine gekrümmte Text-Klasse, die von Text erbt. Darin habe ich diese OnValidate Umsetzung:Warum kann ich "OnValidate()" in Unity3D nicht überschreiben?

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

Jetzt, wenn ich versuche, das Projekt, das ich diesen Fehler zu bauen:

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

Also dann war ich ok diese wierd ist auch VS die überragende vorschlagen. Was mache ich als nächstes? Entfernen Sie das Schlüsselwort override und ignorieren Sie die VS-Warnung. Also jetzt Einheit wirft diesen Fehler:

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

Also was mache ich jetzt? Ich sollte auch erwähnen, dass, wenn das Skript zu einem Objekt in der Szene hinzugefügt wird, es wie erwartet funktioniert und keine Fehler geworfen werden.

+0

Es gibt keine OnValidate in der Basisklasse für die Überschreibung –

+0

, aber die Sache ist, gibt es. [Check this] (https://docs.unity3d.com/ScriptReference/UI.Text.html) –

+2

Laut der Referenz ist 'OnValidate' nicht' virtuell' und kann daher nicht überschrieben werden. Dies könnte nur eine Ungenauigkeit der Skript-Referenz sein, aber da VS zustimmt, ist es wahrscheinlich wahr. – Luaan

Antwort

1

Da OnValidate Teil des Unity3D-Messaging-Systems ist.

Und als this blog erwähnt diese Messaging-Funktion wird nur gelöst, wenn ein MonoBehaviour Object ersten Mal zugegriffen wird und das zugrunde liegende Skript durch Scripting-Laufzeit (entweder Mono oder IL2CPP) überprüft wird.

Also jetzt, für den Compiler, ist es nicht OnValidate zu überschreiben.

rufen Sie einfach die Methode wie folgt:

void OnValidate() 
{ 
    // some other code 
} 

My 2 Cents auf die Kommentare

  • Das protected Schlüsselwort nicht Dinge nicht überschrieben werden.

  • Das Schlüsselwort virtual wird verwendet, um Dinge zu ändern und zu ermöglichen, dass sie in einer abgeleiteten Klasse überschrieben werden. Dies bedeutet, dass Sie eine nicht virtuelle Methode nicht überschreiben können.

+0

Ok, das funktioniert sowohl im Build als auch im Editor, aber jetzt beschweren sich VS, dass ich das geerbte Mitglied verberge. Ich denke, ich kann dort mit einer einzigen grünen Linie leben. Danke Mann/ –

+0

Ich bin gestern über diesen Blogeintrag gestolpert. Kein Problem! – Smartis

+0

_ "bedeutet nicht, dass es falsch ist." _ Klingt für mich wie totales Schlachten der C# -Sprachspezifikation. – Gusdor

Verwandte Themen