Quando você cria um script por meio do editor do Unity, ele gera um script com algum código pré-formatado.
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 () {
}
}
Quando crio um script, geralmente sou garantido o uso de código adicional, como um espaço para nome ou um editor personalizado. Além disso, quase sempre excluo o conteúdo do script gerado automaticamente. Existe uma maneira de alterar o código automático gerado pelo Unity?
Respostas:
Além disso, você também pode
Adicione um script de editor na pasta Assets / Editor que assine
OnWillCreateAsset
onde você pode analisar a saída e modificá-la. Por exemplo, um script que inserisse automaticamente um espaço para nome poderia se parecer com o seguinte:Insira seqüências de controle próprias nos modelos para facilitar a substituição
OnWillCreateAsset
, por exemploAdicione mais modelos à pasta de modelos, por exemplo, um para o padrão Singleton - o Unity não se limita ao modelo de script único.
Os trechos de código do visual studio são uma maneira de personalizar a criação de novos scripts (... e ainda mais - novas partes de script). Por exemplo, um trecho de código para particular
SerializeField
pode ser útil. Após a importaçãoprivateField.snippet
:em Ferramentas / Gerenciador de trechos de código / Meus trechos de código, basta digitar a guia dupla "pf" e digitar o nome do campo. Por exemplo:
Ainda mais conveniente seriam trechos para sequências mais longas, muitas vezes repetidas, por exemplo, propriedade readonly apoiada por
SerializeField
campo.O Visual studio também oferece uma ferramenta de geração de código muito poderosa, os Modelos de Texto T4 (a EF está usando o T4), embora eu pessoalmente ache duvidoso o uso prático para projetos do Unity - eles são um exagero, bastante complicado e a compilação do projeto provavelmente se tornará dependente do Visual Estúdio.
fonte
Path.GetFileWithoutExtension
. Ele me diz que está tentando acessar umMonoBehaviour
, o que parece estranho. Eu incluo o espaço para nomeusing Path = System.IO.Path.GetFileWithoutExtension
e percoPath
todos juntos. No final, eu tive que ignorar completamente a linha em si (.Contains("class " + System.IO.Path.GetFileNameWithoutExtension(assetPath)));
).string
/File.Write
produzir somente LF com BOM. Tanto quanto sei '\ n' deve ser apenas LF, você também pode tentar,Environment.Newline
mas deve ser CRLF. Também pode haver uma opção para usar ganchos git se tudo mais falhar. A lista técnica deve ser fácil com esta pergunta sobre o fluxo de pilha .Você pode encontrar os modelos de script para gerar automaticamente o código na sua pasta de instalação do Unity. Eu encontro os modelos em "Unity / Editor / Data / Resources / ScriptTemplates" , enquanto outras fontes o encontraram em "Unity / Editor / Data / Resources" .
Os modelos genéricos de UnityScript e C # são identificados como os arquivos "82-Javascript-NewBehaviourScript.js.txt" e "81-C # Script-NewBehaviourScript.cs.txt" , respectivamente. Você pode editar diretamente esses arquivos para alterar a maneira como o Unity gera automaticamente o script.
Você também pode incluir modelos adicionais, que aparecerão quando você selecionar "Criar" na janela "Projeto" . Os modelos não parecem exigir numeração exclusiva e usam a sequência inicial para determinar a hierarquia do menu, onde "__" indica um submenu. Por exemplo, ter um arquivo chamado "81-C # Script__Editor Script-NewBehaviourScript.cs.txt" fornecerá um menu adicional " C # Script" , com a subopção para criar um "Script do editor" usando este modelo.
Você não renomear os modelos originais; estes são usados mais diretamente, pelo mecanismo. Por exemplo, renomear "81-C # Script-NewBehaviourScript.cs.txt" impedirá que você adicione novos scripts C # como componentes, diretamente através do inspetor.
Abaixo está o meu próprio exemplo, embora ele demonstre práticas específicas às quais sou mais personalizado. Por exemplo, eu prefiro ter meu script de editor personalizado no mesmo arquivo que a classe de destino, então o encapsulo em
#if UNITY_EDITOR .. #endif
vez de colocá-lo em uma pasta de editor genérica "não compile na compilação".Não tenho certeza se é possível fornecer o contexto de um espaço para nome personalizado; Eu simplesmente uso "NAMESPACE", pois isso permite que eu forneça o pós-criação correto do namespace, usando a função "find..replace all" comumente embutida.
O modelo:
A saída:
fonte