Wenn Sie ein Skript über den Unity-Editor erstellen, wird ein Skript mit vorformatiertem Code generiert.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GenericClass : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
Wenn ich ein Skript erstelle, wird im Allgemeinen garantiert, dass ich zusätzlichen Code verwende, z. B. einen Namespace oder einen benutzerdefinierten Editor. Außerdem lösche ich fast immer Inhalte aus dem automatisch generierten Skript. Gibt es eine Möglichkeit, den von Unity generierten automatischen Code zu ändern?
Antworten:
Darüber hinaus können Sie auch
Fügen Sie im Ordner "Assets / Editor" ein Editor-Skript hinzu, das abonniert,
OnWillCreateAsset
wo Sie die Ausgabe analysieren und ändern können. Ein Skript, das automatisch einen Namespace einfügt, könnte beispielsweise folgendermaßen aussehen:Fügen Sie eigene Steuersequenzen in Vorlagen ein, um sie einfach zu ersetzen
OnWillCreateAsset
, zFügen Sie dem Vorlagenordner weitere Vorlagen hinzu, z. B. eine für das Singleton-Muster. Unity ist nicht auf einzelne Skriptvorlagen beschränkt.
Mit den Visual Studio- Codefragmenten können Sie das Erstellen neuer Skripte anpassen (... und noch weiter - neue Skriptteile). Zum Beispiel könnte ein Code-Snippet für private
SerializeField
nützlich sein. Nach dem ImportprivateField.snippet
:Unter Extras / Code-Snippet-Manager / Meine Code-Snippets können Sie einfach die doppelte Registerkarte "pf" eingeben und den Namen des Felds eingeben . Z.B:
Noch praktischer wären Schnipsel für häufig wiederholte längere Sequenzen, z. B. schreibgeschützte Eigenschaften, die von unterstützt werden
SerializeField
Feld .Visual Studio bietet auch ein sehr leistungsfähiges Tool zur Codegenerierung, die T4-Textvorlagen (EF verwendet T4), obwohl ich persönlich die praktische Verwendung für Unity-Projekte zweifelhaft finde - sie sind übertrieben, ziemlich kompliziert und die Kompilierung von Projekten würde wahrscheinlich von Visual abhängen Studio.
quelle
Path.GetFileWithoutExtension
. Es sagt mir, dass es versucht , auf ein zuzugreifenMonoBehaviour
, was seltsam erscheint. Ich füge den Namespace hinzuusing Path = System.IO.Path.GetFileWithoutExtension
und verlierePath
alles zusammen. Am Ende musste ich die Linie selbst vollständig flügge machen (.Contains("class " + System.IO.Path.GetFileNameWithoutExtension(assetPath)));
).string
/File.Write
ausgegeben werden soll. Soweit ich weiß , ‚\ n‘ sollte nur LF sein, können Sie auch versuchen ,Environment.Newline
stattdessen aber es sollte CRLF sein. Es kann auch eine Option zur Verwendung von Git-Hooks geben, wenn alles andere fehlschlägt. Die Stückliste sollte mit dieser Frage zum Stapelüberlauf einfach sein .Die Skriptvorlagen zum automatischen Generieren von Code finden Sie in Ihrem Unity-Installationsordner. Ich finde die Vorlagen unter "Unity / Editor / Daten / Ressourcen / ScriptTemplates" , während andere Quellen sie unter "Unity / Editor / Daten / Ressourcen" gefunden haben .
Die generischen UnityScript- und C # -Vorlagen werden als die Dateien "82-Javascript-NewBehaviourScript.js.txt" und "81-C # Script-NewBehaviourScript.cs.txt" identifiziert . Sie können diese Dateien direkt bearbeiten, um die Art und Weise zu ändern, in der Unity automatisch Skripte generiert.
Sie können auch zusätzliche Vorlagen, die angezeigt wird , wenn Sie wählen „Create“ aus dem „Projekt“ Fenster. Vorlagen scheinen keine eindeutige Nummerierung zu erfordern und bestimmen anhand der Anfangszeichenfolge die Menühierarchie, wobei "__" ein Untermenü bezeichnet. Wenn Sie beispielsweise eine Datei mit dem Namen "81-C # Script__Editor Script-NewBehaviourScript.cs.txt" haben, erhalten Sie ein zusätzliches " C # Script" -Menü mit der Unteroption zum Erstellen eines dieser Vorlage "Editor-Skript" .
Haben nicht die Originalvorlagen umbenennen; Diese werden direkter vom Motor verwendet. Wenn Sie beispielsweise "81-C # Script-NewBehaviourScript.cs.txt" umbenennen , können Sie keine neuen C # -Skripte als Komponenten direkt über den Inspektor hinzufügen.
Unten ist mein eigenes Beispiel, obwohl es bestimmte Praktiken zeigt, an die ich am meisten gewöhnt bin. Zum Beispiel möchte ich mein benutzerdefiniertes Editor-Skript lieber in derselben Datei wie die Zielklasse haben, also kapsle ich es ein
#if UNITY_EDITOR .. #endif
, anstatt es in einem generischen Editorordner "Nicht in Build kompilieren" abzulegen.Ich bin nicht sicher, ob es überhaupt möglich ist, den Kontext eines benutzerdefinierten Namespace anzugeben. Ich verwende einfach "NAMESPACE", da dies mir ermöglicht, den korrekten Namespace nach der Erstellung mithilfe der allgemein integrierten Funktion "find..replace all" bereitzustellen.
Die Vorlage:
Die Ausgabe:
quelle