Kiedy tworzysz skrypt za pomocą edytora Unity, generuje skrypt z pewnym wstępnie sformatowanym kodem.
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 () {
}
}
Podczas tworzenia skryptu generalnie gwarantuje się użycie dodatkowego kodu, takiego jak przestrzeń nazw lub edytor niestandardowy. Co więcej, prawie zawsze usuwam zawartość z automatycznie generowanego skryptu. Czy istnieje sposób na zmianę automatycznego kodu generowanego przez Unity?
Odpowiedzi:
Ponadto możesz również
Dodaj skrypt edytora w folderze Assets / Editor, który subskrybuje miejsce, w
OnWillCreateAsset
którym możesz analizować dane wyjściowe i modyfikować je. Na przykład skrypt, który automatycznie wstawi przestrzeń nazw, może wyglądać następująco:Wstaw własne sekwencje kontrolne do szablonów, aby łatwo je wymienić
OnWillCreateAsset
, npDodaj więcej szablonów do folderu szablonów, na przykład jeden dla wzoru Singleton - Unity nie ogranicza się do jednego szablonu skryptu.
Fragmenty kodu studia wizualnego są sposobem na dostosowanie tworzenia nowych skryptów (... a nawet - nowych części skryptu). Na przykład
SerializeField
przydatny może być fragment kodu dla prywatnego . Po zaimportowaniuprivateField.snippet
:w Narzędzia / Menedżer fragmentów kodu / Moje fragmenty kodu wystarczy wpisać podwójną kartę „pf” i wpisać nazwę pola. Na przykład:
Jeszcze wygodniejsze byłyby fragmenty często powtarzanych dłuższych sekwencji, np. Tylko do odczytu poparte
SerializeField
polem.Visual Studio oferuje również bardzo potężne narzędzie do generowania kodu, szablony tekstowe T4 (EF używa T4), chociaż osobiście uważam, że praktyczne zastosowanie w projektach Unity jest wątpliwe - są przesadne, dość skomplikowane, a kompilacja projektu prawdopodobnie zależałaby od Visual Studio.
źródło
Path.GetFileWithoutExtension
. Mówi mi, że próbuje uzyskać dostęp doMonoBehaviour
, co wydaje się dziwne. Dołączam przestrzeń nazwusing Path = System.IO.Path.GetFileWithoutExtension
i tracęPath
wszystko razem. W końcu musiałem w pełni rozwinąć linię, samą (.Contains("class " + System.IO.Path.GetFileNameWithoutExtension(assetPath)));
).string
/File.Write
wyprowadzić tylko LF z BOM. O ile wiem „\ n” powinno być tylko LF, możesz też spróbowaćEnvironment.Newline
zamiast tego, ale powinien to być CRLF. Może również istnieć opcja użycia haków git, jeśli wszystko inne zawiedzie. BOM powinno być łatwe dzięki temu pytaniu o przepełnienie stosu .Możesz znaleźć szablony skryptów do automatycznego generowania kodu w folderze instalacyjnym Unity. Znajduję szablony w „Unity / Editor / Data / Resources / ScriptTemplates” , podczas gdy inne źródła znalazły go w „Unity / Editor / Data / Resources” .
Ogólne szablony UnityScript i C # są identyfikowane odpowiednio jako pliki „82-JavaScript-NewBehaviourScript.js.txt” i „81-C # Script-NewBehaviourScript.cs.txt” . Możesz bezpośrednio edytować te pliki, aby zmienić sposób, w jaki Unity automatycznie generuje skrypt.
Możesz także dołączyć dodatkowe szablony, które pojawią się po wybraniu „Utwórz” w oknie „Projekt” . Wygląda na to, że szablony nie wymagają unikalnej numeracji i używają początkowego ciągu, aby określić hierarchię menu, gdzie „__” oznacza podmenu. Na przykład posiadanie pliku o nazwie „81-C # Script__Editor Script-NewBehaviourScript.cs.txt” zapewni dodatkowe menu „ C # Script” z opcją podrzędną umożliwiającą utworzenie „Script Editor” przy użyciu tego szablonu.
Czy nie zmieniać nazwy oryginalne szablony; są one wykorzystywane bardziej bezpośrednio przez silnik. Na przykład zmiana nazwy „81-C # Script-NewBehaviourScript.cs.txt” uniemożliwi dodawanie nowych skryptów C # jako składników bezpośrednio przez inspektora.
Poniżej znajduje się mój przykład, chociaż pokazuje on szczególne praktyki, do których jestem najbardziej przyzwyczajony. Na przykład wolę mieć niestandardowy skrypt edytora w tym samym pliku, co klasa docelowa, więc go kapsułkuję
#if UNITY_EDITOR .. #endif
, zamiast umieszczać w ogólnym folderze edytora „nie kompiluj w kompilacji”.Nie jestem pewien, czy możliwe jest podanie kontekstu niestandardowej przestrzeni nazw; Po prostu używam „NAMESPACE”, ponieważ pozwala mi to zapewnić poprawną przestrzeń nazw po utworzeniu, używając powszechnie wbudowanej funkcji „find..replace all”.
Szablon:
Wyjście:
źródło