Когда вы создаете скрипт через редактор Unity, он генерирует скрипт с некоторым предварительно отформатированным кодом.
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 () {
}
}
Когда я создаю сценарий, мне обычно гарантируется использование дополнительного кода, такого как пространство имен или пользовательский редактор. Кроме того, я почти всегда удаляю контент из автоматически сгенерированного скрипта. Есть ли способ изменить автоматический код, сгенерированный Unity?
Ответы:
Кроме того, вы также можете
Добавьте скрипт редактора в папку Assets / Editor, который подписывается на то,
OnWillCreateAsset
где вы можете анализировать вывод и изменять его. Например, скрипт, который автоматически вставляет пространство имен, может выглядеть следующим образом:Вставьте собственные последовательности управления в шаблоны для легкой замены
OnWillCreateAsset
, например,Добавьте больше шаблонов в папку шаблонов, например, один для шаблона Singleton - Unity не ограничивается одним шаблоном сценария.
Фрагменты кода Visual Studio позволяют настраивать создание новых сценариев (и, более того, новых частей сценариев). Например, фрагмент кода для частного использования
SerializeField
может пригодиться. После импортаprivateField.snippet
:в Инструменты / Диспетчер фрагментов кода / Мои фрагменты кода вы можете просто ввести «pf» двойную вкладку и ввести имя поля. Например:
Еще более удобными были бы фрагменты для часто повторяющихся длинных последовательностей, например свойство readonly, поддерживаемое
SerializeField
полем.Visual Studio также предлагает очень мощный инструмент генерации кода, текстовые шаблоны T4 (EF использует T4), хотя я лично считаю сомнительным практическое использование проектов Unity - они излишни, довольно сложны, и компиляция проекта, вероятно, станет зависеть от Visual Студия.
источник
Path.GetFileWithoutExtension
. Это говорит мне, что он пытается получить доступ кMonoBehaviour
, что кажется странным. Я включаю пространство именusing Path = System.IO.Path.GetFileWithoutExtension
, и я теряюPath
все вместе. В конце концов, мне пришлось полностью опередить саму линию (.Contains("class " + System.IO.Path.GetFileNameWithoutExtension(assetPath)));
).string
/File.Write
вывод LF-only с BOM. Насколько я знаю, '\ n' должно быть просто LF, вы можете попробоватьEnvironment.Newline
вместо этого, но это должен быть CRLF. Также может быть возможность использовать git hooks, если все остальное не работает. С этим вопросом о стековом потоке должно быть легко .Вы можете найти шаблоны сценариев для автоматической генерации кода в папке установки Unity. Я нахожу шаблоны в «Unity / Editor / Data / Resources / ScriptTemplates» , в то время как другие источники находят его в «Unity / Editor / Data / Resources» .
Общие шаблоны UnityScript и C # определяются как файлы «82-Javascript-NewBehaviourScript.js.txt» и «81-C # Script-NewBehaviourScript.cs.txt» соответственно. Вы можете напрямую редактировать эти файлы, чтобы изменить способ, которым Unity автоматически генерирует скрипт.
Вы также можете включить дополнительные шаблоны, которые появятся при выборе «Создать» в окне «Проект» . Шаблоны не появляются требуют уникальной нумерации, и использовать исходную строку для определения иерархии меню, где «__» обозначает подменит. Например, наличие файла с именем «81-C # Script__Editor Script-NewBehaviourScript.cs.txt» даст вам дополнительное меню « C # Script» с дополнительной опцией для создания «Редактора сценария» с использованием этого шаблона.
Вы не переименовывайте оригинальные шаблоны; они используются более непосредственно двигателем. Например, переименование «81-C # Script-NewBehaviourScript.cs.txt» не позволит вам добавлять новые сценарии C # в качестве компонентов непосредственно через инспектор.
Ниже приведен мой собственный пример, хотя он демонстрирует особые методы, которые я больше всего использую. Например, я предпочитаю, чтобы мой пользовательский скрипт редактора находился в том же файле, что и целевой класс, поэтому я инкапсулирую его
#if UNITY_EDITOR .. #endif
, а не помещаю в общую папку редактора «не компилировать в сборку».Я не уверен, возможно ли вообще предоставить контекст пользовательского пространства имен; Я просто использую «NAMESPACE», так как это позволяет мне обеспечить правильное пост-создание пространства имен, используя обычно встроенную функцию «find..replace all».
Шаблон:
Выход:
источник