Saat Anda membuat skrip melalui editor Unity, skrip tersebut menghasilkan skrip dengan beberapa kode yang telah diformat sebelumnya.
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 () {
}
}
Ketika saya membuat skrip, saya biasanya dijamin untuk menggunakan kode tambahan, seperti namespace atau editor khusus. Selain itu, saya hampir selalu menghapus konten dari skrip yang dibuat secara otomatis. Apakah ada cara untuk mengubah kode otomatis yang dihasilkan oleh Unity?
Jawaban:
Selain itu kamu juga bisa
Tambahkan skrip editor di folder Aset / Editor yang berlangganan
OnWillCreateAsset
tempat Anda dapat menguraikan output dan memodifikasinya. Misalnya skrip yang secara otomatis memasukkan namespace dapat terlihat seperti berikut:Masukkan urutan kontrol sendiri ke dalam template untuk memudahkan penggantian
OnWillCreateAsset
, misalnyaTambahkan lebih banyak templat ke folder templat, misalnya satu untuk pola Singleton - Unity tidak terbatas pada templat skrip tunggal.
Cuplikan kode visual studio adalah cara untuk menyesuaikan pembuatan skrip baru (... dan lebih jauh lagi - bagian skrip baru). Misalnya, cuplikan kode untuk pribadi
SerializeField
mungkin berguna. Setelah mengimporprivateField.snippet
:ke Tools / Code Snippet Manager / Cuplikan Kode Saya Anda cukup mengetik tab ganda "pf" dan ketik nama bidang. Misalnya:
Yang lebih nyaman adalah potongan untuk urutan berulang yang sering diulang, misalnya properti hanya baca yang didukung oleh
SerializeField
bidang.Visual studio juga menawarkan alat penghasil kode yang sangat kuat, Templat Teks T4 (EF menggunakan T4), meskipun saya pribadi menemukan penggunaan praktis untuk proyek Unity diragukan - mereka berlebihan, cukup rumit dan kompilasi proyek kemungkinan akan menjadi tergantung pada Visual Studio.
sumber
Path.GetFileWithoutExtension
. Ini memberitahu saya sedang mencoba mengaksesMonoBehaviour
, yang tampaknya aneh. Saya menyertakan namespaceusing Path = System.IO.Path.GetFileWithoutExtension
, dan saya kehilanganPath
semuanya. Pada akhirnya, saya harus sepenuhnya memagari garis itu sendiri (.Contains("class " + System.IO.Path.GetFileNameWithoutExtension(assetPath)));
).string
/File.Write
menghasilkan LF-only dengan BOM. Sejauh yang saya tahu '\ n' seharusnya hanya LF, Anda juga bisa mencobaEnvironment.Newline
tetapi itu harus CRLF. Mungkin juga ada opsi untuk menggunakan kait git jika semuanya gagal. BOM seharusnya mudah dengan pertanyaan stackoverflow ini .Anda dapat menemukan templat skrip untuk menghasilkan kode secara otomatis di folder instalasi Unity Anda. Saya menemukan templat di bawah "Unity / Editor / Data / Resources / ScriptTemplates" , sementara sumber lain menemukannya di "Unity / Editor / Data / Resources" .
Templat UnityScript dan C # generik diidentifikasi sebagai file "82-Javascript-NewBehaviourScript.js.txt" dan "81-C # Script-NewBehaviourScript.cs.txt" , masing-masing. Anda dapat langsung mengedit file-file ini untuk mengubah cara Unity menghasilkan skrip otomatis.
Anda juga dapat menyertakan templat tambahan, yang akan muncul ketika Anda memilih "Buat" dari jendela "Proyek" . Templat tampaknya tidak memerlukan penomoran yang unik, dan gunakan string awal untuk menentukan hierarki menu, di mana "__" menunjukkan submenu. Misalnya, memiliki file bernama "81-C # Script__Editor Script-NewBehaviourScript.cs.txt" akan memberi Anda menu " C # Script" tambahan , dengan sub opsi untuk membuat "Editor Script" menggunakan templat ini.
Jangan tidak mengubah nama template asli; ini digunakan lebih langsung, oleh mesin. Misalnya, mengganti nama "81-C # Script-NewBehaviourScript.cs.txt" akan mencegah Anda menambahkan skrip C # baru sebagai komponen, langsung melalui inspektur.
Di bawah ini adalah contoh saya sendiri, meskipun itu menunjukkan praktik-praktik khusus yang paling saya sukai. Sebagai contoh, saya lebih suka memiliki skrip editor khusus saya di file yang sama dengan kelas target, jadi saya merangkumnya
#if UNITY_EDITOR .. #endif
, daripada menempatkannya di folder editor generik "jangan dikompilasi dalam build".Saya tidak yakin apakah mungkin untuk menyediakan konteks ruang nama kustom; Saya cukup menggunakan "NAMESPACE", karena ini memungkinkan saya untuk memberikan namespace post-creation yang benar, menggunakan fungsi "find..replace all" yang umum dibuat.
Templat:
Hasil:
sumber