Cuando crea una secuencia de comandos a través del editor de Unity, genera una secuencia de comandos con un código preformateado.
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 () {
}
}
Cuando creo un script, generalmente tengo garantizado el uso de código adicional, como un espacio de nombres o un editor personalizado. Además, casi siempre elimino contenido del script generado automáticamente. ¿Hay alguna manera de cambiar el código automático generado por Unity?
Respuestas:
Además también puedes
Agregue un script de editor en la carpeta Assets / Editor que se suscribe a
OnWillCreateAsset
donde puede analizar el resultado y modificarlo. Por ejemplo, el script que insertaría automáticamente el espacio de nombres podría verse así:Inserte secuencias de control propias en las plantillas para reemplazarlas fácilmente
OnWillCreateAsset
, por ej.Agregue más plantillas a la carpeta de plantillas, por ejemplo, una para el patrón Singleton: Unity no se limita a la plantilla de script único.
Los fragmentos de código de Visual Studio son una forma de personalizar la creación de nuevos scripts (... y aún más, nuevas partes de scripts). Por ejemplo, un fragmento de código para privado
SerializeField
podría ser útil. Después de importarprivateField.snippet
:a Herramientas / Administrador de fragmentos de código / Mis fragmentos de código , simplemente puede escribir "pf" doble pestaña y escribir el nombre del campo. P.ej:
Aún más conveniente serían fragmentos para secuencias más largas que se repiten a menudo, por ejemplo, propiedad de solo lectura respaldada por
SerializeField
campo.Visual Studio también ofrece una herramienta de generación de código muy poderosa, las Plantillas de texto T4 (EF está usando T4), aunque personalmente encuentro dudoso el uso práctico para proyectos de Unity: son excesivos, bastante complicados y la compilación del proyecto probablemente dependerá de Visual Estudio.
fuente
Path.GetFileWithoutExtension
. Me dice que está intentando acceder a aMonoBehaviour
, lo que parece extraño. Incluyo el espacio de nombresusing Path = System.IO.Path.GetFileWithoutExtension
, y pierdoPath
todos juntos. Al final, tuve que renunciar completamente a la línea, en sí misma (.Contains("class " + System.IO.Path.GetFileNameWithoutExtension(assetPath)));
).string
/File.Write
generar solo LF con BOM. Por lo que sé, '\ n' debería ser solo LF, también puede intentarlo,Environment.Newline
pero debería ser CRLF. También podría existir una opción para usar git hooks si todo lo demás falla. BOM debería ser fácil con esta pregunta de stackoverflow .Puede encontrar las plantillas de script para generar código automáticamente en su carpeta de instalación de Unity. Encuentro las plantillas en "Unidad / Editor / Datos / Recursos / ScriptTemplates" , mientras que otras fuentes lo han encontrado en "Unidad / Editor / Datos / Recursos" .
Las plantillas genéricas UnityScript y C # se identifican como los archivos "82-Javascript-NewBehaviourScript.js.txt" y "81-C # Script-NewBehaviourScript.cs.txt" , respectivamente. Puede editar directamente estos archivos para cambiar la forma en que Unity genera automáticamente el script.
También puede incluir plantillas adicionales, que aparecerán cuando seleccione "Crear" en la ventana "Proyecto" . No parece que las plantillas requieran una numeración única, y use la cadena inicial para determinar la jerarquía del menú, donde "__" denota un submenú. Por ejemplo, tener un archivo llamado "81-C # Script__Editor Script-NewBehaviourScript.cs.txt" le dará un menú adicional " C # Script" , con la subopción para crear un "Editor Script" usando esta plantilla.
No , no cambiar el nombre de las plantillas originales; estos son utilizados más directamente por el motor. Por ejemplo, cambiar el nombre de "81-C # Script-NewBehaviourScript.cs.txt" evitará que agregue nuevos scripts C # como componentes, directamente a través del inspector.
A continuación se muestra mi propio ejemplo, aunque demuestra prácticas particulares a las que estoy más acostumbrado. Por ejemplo, prefiero tener mi script de editor personalizado en el mismo archivo que la clase de destino, así que lo encapsulo en
#if UNITY_EDITOR .. #endif
lugar de colocarlo en una carpeta de editor genérico "no compilar en la compilación".No estoy seguro de si es posible proporcionar el contexto de un espacio de nombres personalizado; Simplemente uso "NAMESPACE", ya que esto me permite proporcionar el espacio de nombres correcto después de la creación, usando la función "encontrar ... reemplazar todo" comúnmente incorporada.
La plantilla:
La salida:
fuente