Estendendo o Studio
O Turian Studio é um plugin da Gaya, uma plataforma feita para ser estendida. Os scripts do seu projeto também podem estender o Studio — com atributos, sem referenciar nenhum assembly do editor. Tudo abaixo é detectado quando seus scripts compilam e atualizado a cada recompilação.
Itens de menu
Um método public static com [MenuItem] vira um comando de menu. O primeiro segmento do caminho escolhe o menu; File, Edit, View, Project e Help caem nos menus do próprio Studio, e qualquer outro cria um menu novo:
namespace Usercode;
public static class LevelTools
{
[MenuItem("Tools/Count Scene Files")]
public static void CountScenes() =>
Log.Logger.LogInformation("{Count} cenas", Directory.GetFiles("Assets", "*.prefab", SearchOption.AllDirectories).Length);
}
O método não recebe parâmetros, ou recebe um: um IServiceProvider, ou qualquer serviço que o Studio consiga resolver. Os itens de menu também aparecem na paleta de comandos, onde você pode lhes dar um atalho.
Painéis
Uma classe simples com [Panel] vira um painel encaixável. Seus membros públicos são desenhados como um formulário, e os métodos [Button] como botões:
namespace Usercode;
[Panel("Level Stats", "Tools/Level Stats")]
public sealed class LevelStatsPanel
{
public string Note { get; set; } = "";
public int Enemies { get; set; }
[Button]
public void Report() => Log.Logger.LogInformation("{Note}: {Enemies} inimigos", Note, Enemies);
}
O segundo argumento é o caminho de menu que o abre (o padrão é Window/<nome>).
Páginas de configuração
Uma classe com [EditorSetting] vira uma página em File → Settings…; seus valores são salvos e restaurados:
[EditorSetting("My Tools/Level Export", Description = "Como os arquivos de fase são exportados.")]
public sealed class LevelExportSettings
{
[EditorSetting("Compress", Description = "Grava arquivos de fase comprimidos.")]
public bool Compress { get; set; } = true;
public string OutputFolder { get; set; } = "Exports";
}
Mais pontos de extensão
| Atributo | Adiciona | Veja |
|---|---|---|
[CustomGizmo(desenhista, componente)] |
Desenho na visualização Scene para um componente | Gizmos |
[AssetPreview(tipoDeAsset)] |
Pré-visualizações no Inspector para um tipo de asset | Pré-visualização de assets |
[CreateAssetMenu(caminho)] |
Uma entrada New no painel Assets para um data asset | Assets |
[ComponentContextMenu(caminho)] |
A posição de um componente em Add Component | Componentes |
[Button], [Range], [ReadOnly], [HideInEditor], … |
Como os membros aparecem no Inspector | Componentes |
Plugins Gaya
Os painéis, menus e comandos do Studio são contribuições de um plugin Gaya (Gaya.Plugin.Turian). Escrever um plugin Gaya separado — para ferramentas que não pertencem a um projeto — usa os mesmos registros: painéis, comandos, menus, atalhos, páginas de configuração e temas.