Data Studio — A Superfície de Autoria
O Data Studio é uma única janela para tudo: consulta, busca, edição de célula, autoria de linha/coluna/aba, criação e exclusão de planilha, e um canvas de registros que mostra do que um registro é feito.
Uma regra está por trás de tudo isso: a planilha é canônica. O Studio grava na origem (arquivo local / planilha do Google), nunca nos SOs, e confirma toda alteração com uma reimportação automática.
Tools ▸ SheetForge ▸ Data Studio o abre — a única entrada de autoria no menu. Ele não precisa de nenhum plugin: tudo abaixo funciona apenas com os tipos embutidos do core, e um plugin acrescenta formas e espaços de chave somente leitura por cima (veja Com e sem plugins).
Existe apenas uma janela de autoria. O antigo Workbench — a janela IMGUI original — foi removido, e tudo que ele fazia, o Studio faz. Veja o que aconteceu com o Workbench se você está atualizando.
O que está na tela
Barra superior
- O chip da origem ativa nomeia o provedor. Ele fica esmaecido quando nenhuma configuração está ativa.
- ↓ Pull from source roda a Importação.
- ↑ Push to source carrega um pill contando as alterações pendentes.
- Um botão Discard fica ao lado e descarta toda alteração preparada na janela. Ele pede uma confirmação nomeando a contagem primeiro, e ele acontece como um único passo de
Ctrl+Z, então a preparação volta se você descartar por engano. A origem nunca é tocada. - Os selos
isolated/draft. - Contadores ⛔/⚠. Clicar em um contador pula para o primeiro erro/aviso.
- Um menu de transbordo ⋯ contendo Executar Exportação, Push para Planilha do Google, Exportar traduções…, Importar traduções…, Verificação de integridade, Abrir o relatório de localização e Configurações de tema…. Fora de uma origem da API do Google, a linha de push do Google fica visível mas desabilitada, com o motivo anexado ao rótulo; as duas linhas de tradução se comportam da mesma forma quando o projeto não contém nenhuma planilha de localização.
Barra lateral
- Uma entrada All fica no topo — busca entre planilhas, descrita abaixo.
- Depois, toda planilha com sua contagem de linhas, seu ponto de cor, e um marcador ● em qualquer planilha que tenha alterações preparadas. O pill da barra superior dá o total; este diz de quais planilhas ele veio.
- As planilhas são agrupadas em seções pelo rótulo de grupo
@styleda própria planilha. Clique com o botão direito em uma planilha ▸ Group & color ✎ para defini-los; planilhas sem rótulo permanecem na seção padrão. - Abaixo das planilhas há um grupo READ-ONLY listando os registros de código registrados por plugin.
- Selos honestos também vivem aqui:
parse failedem uma aba que está ausente da prévia,name clashquando um registro de código reivindica o nome de uma planilha real, e o aviso de quarentena descrito abaixo. - Cada item de clique-direito que está bloqueado no momento permanece visível com o seu motivo anexado.
Tabela
- Um cabeçalho fixo de quatro linhas: a letra da coluna da planilha de origem sobre as células brutas
@name/@type/@desc. A coluna A guarda os marcadores, então os dados começam em B. - Uma margem com o número de linha real da planilha, e um chip de referência por linha:
shared Nquando dois ou mais registros apontam para esta linha,↩ 1quando exatamente um aponta, nada quando nenhum. - Letra e número de linha são as mesmas coordenadas que o relatório de erro imprime, então "linha 5, coluna C" pode ser apontado diretamente. Clicar neles seleciona a coluna ou a linha para ações com múltiplos alvos e movimentos por arrastar — veja Selecionando linhas e colunas abaixo.
- A letra pertence ao assento, não à coluna. Mova uma coluna e ela mostra a letra da posição em que vai se sentar assim que refletida. A mesma regra dá a uma coluna que você adicionou mas ainda não enviou por push a letra que ela está prestes a receber.
- A edição de estrutura vive nos menus de clique-direito. Um cabeçalho de coluna oferece propriedades, mover, inserir de qualquer lado e excluir; a margem de número de linha oferece mover para cima, mover para baixo e excluir. Um item bloqueado permanece visível com o seu motivo.
- Um cabeçalho de coluna também oferece Congelar até esta coluna, que mantém essa coluna e tudo à esquerda dela fora do scroll horizontal (veja abaixo).
- O restante do menu de coluna — largura da coluna, autoajuste, ocultar, filtro, limpar dados da coluna e os itens de ordenação — está descrito em Largura de coluna, ocultação e filtros por coluna abaixo. Uma alça de arrastar para redimensionar fica na borda direita de cada célula de letra.
- Dentro de uma célula de referência, apenas os fragmentos de lista quebrados são destacados.
Canvas
- Abre abaixo da tabela quando você ativa uma linha.
- O registro que você abriu fica no meio: o que ele consome flui a partir da esquerda, o que consome ele fica à direita. Um controle segmentado acima do canvas escolhe até onde ir em cada direção.
- Arraste a alça para redimensionar,
Esco fecha. - Cada card de nó mostra suas portas de referência e suas colunas comuns como linhas de valor editáveis, então o canvas é um segundo lugar para editar, não uma imagem (veja Editando no canvas abaixo).
Inspector de nó
No canto inferior direito do canvas. Ele contém:
- o endereço de célula do nó (clique para focar aquela célula na grade);
- uma nota de "registro compartilhado" / "esta chave não existe" / "este registro é novo";
- a lista Used by (clique em uma entrada para navegar até ela);
- a ação embutida Go to this sheet;
- Duplicate and split / Cancel new row onde se aplicam.
Problems
O painel inferior carrega os mesmos diagnósticos que uma importação produz, renderizados pelo mesmo renderizador de relatório. O pipeline é a fonte da verdade; a janela nunca inventa uma mensagem. Clicar em uma linha foca a célula problemática e abre o seu canvas.
Painéis de domínio
Um painel à direita com um segmento por painel registrado por plugin, recolhível, lembrando qual você tinha aberto. Ele só é desenhado quando um plugin registra um painel — sem nenhum registrado não há caixa vazia, porque uma caixa vazia afirma que algo está faltando.
Modal de push
O diff pré-gravação: aba · chave de linha · campo · antigo → novo para cada alteração preparada, mais uma nota quando algumas edições estão isoladas. Uma seção Addressables lista todo registro de asset que o reflect vai fazer (adicionar · mover · criar grupo — veja Editando uma célula). Cancel não grava nada.
Editando uma célula
- O widget segue o
@type. O@typeque ele lê é o que está em tela, então uma coluna que você adicionou ou retipou mas ainda não enviou por push já ganha o widget daquele tipo.- Um
boolobrigatório é um toggle; umboolopcional abre o mesmo seletor que a célula de enum usa, já que tem três estados. Enum<T>é exibido como o seu valor mais um ▾ e abre o mesmo seletor pesquisável que uma célula de referência usa. Um valor não reconhecido permanece no topo da lista, em vez de ser reescrito silenciosamente. Onde o enum é definido em uma planilha, o seletor termina com "Add a new member…". Uma célula opcional vazia mostra —, ou — (padrão).- Uma coluna
RecordId@Tabganha um dropdown de referência (abaixo). - Uma coluna
AssetRef@Groupganha um seletor de asset e aceita arrastar e soltar (abaixo). - Colunas
Color/AnimationCurve/Gradientganham os próprios campos de cor, curva e gradiente da Unity (abaixo). - Tudo o mais é texto bruto canônico — números, strings, chaves,
List<>de não referências, wrappers, tipos personalizados — porque esse texto é o que o parser faz o round-trip.
- Um
- Células de referência têm um dropdown, sempre. Uma célula
RecordId@Tabé uma caixa de texto mais um botão ▾; digitar uma chave à mão continua funcionando. O botão está lá mesmo quando a planilha de destino atualmente não oferece candidatos: esse estado normalmente significa que algo está quebrado agora mesmo, que é exatamente quando você precisa da ferramenta, e o seletor diz isso e oferece para criar, em vez de abrir uma lista vazia.- Uma célula
List<RecordId@Tab>ganha+▾. O seletor permanece aberto e cada linha é uma checkbox, então marcar três registros leva uma única visita. Marcar anexa, desmarcar remove aquele elemento, e cada marcação é o seu próprio passo de undo. - A ordem dos elementos não é o que um dropdown responde. Reordene elementos a partir do canvas, onde cada elemento de lista tem a sua própria linha ▲▼.
- Uma célula escalar substitui o seu valor e fecha, com a chave já presente na célula marcada para que você não possa escolhê-la duas vezes.
- Uma célula
- Uma coluna opcional pode ser esvaziada de volta. Onde a coluna declara
?ou=default, os seletores — de referência, de enum e de boolean opcional, igualmente — carregam uma linha de deixar vazio, rotulada com o valor ao qual a célula recorre. Uma coluna obrigatória não recebe essa linha, porque uma célula vazia é um erro ali. - Crie o registro que está faltando, direto da célula. Se a chave que você quer não existe, pressione + Create a new … record no seletor: a caixa de busca vira uma caixa de chave pré-preenchida com o prefixo comum da planilha. Digite um nome, pressione Enter, e a linha é criada e gravada nesta célula como um único passo de
Ctrl+Z.- A linha não é oferecida quando não poderia funcionar. Um espaço de chave que pertence ao código não pode receber adições, e o seletor diz isso em uma frase. Uma origem somente leitura, um pipeline em execução ou uma planilha baseada em xlsx a bloqueiam com o mesmo portão que o canvas usa.
- Células de asset têm um seletor e aceitam arrastar e soltar. Uma célula
AssetRef@Groupé uma caixa de texto mais um botão ⊙, no espírito do object field da Unity. Não importa por qual caminho um asset chega, as regras são as mesmas.- ⊙ abre o seletor de asset do SheetForge: os endereços já presentes naquele grupo — restritos ao
<Type>da coluna quando ela tiver um, sub-assets listados depois do seu pai comoparent[sub]— com busca e o valor atual marcado. Uma linha ⊙ Procurar no projeto… abaixo da lista abre o próprio object picker da Unity filtrado para aquele tipo. - Você também pode arrastar assets da janela Project para a célula: um asset para uma coluna escalar, qualquer quantidade para um
List<>(anexados em ordem; uma chave que já está na célula é ignorada). - Um asset já registrado naquele grupo mantém o seu endereço. Um asset que ainda não é addressable é preparado para registro: a célula recebe o seu endereço na hora — o nome do arquivo sem a extensão — e a entrada do grupo, e o próprio grupo quando ele ainda não existe, são criados quando você reflete, depois que a gravação da planilha tiver sido bem-sucedida. Nada no projeto muda antes disso, e descartar a preparação não muda nada.
- Um asset registrado em outro grupo pergunta primeiro — um diálogo nomeando os dois grupos e quantas outras células o referenciam através do antigo — e então prepara uma movimentação.
- Recusado, com um toast dizendo o motivo: objetos de cena, pastas, vários assets soltos em uma célula escalar, um asset que não satisfaz o tipo da coluna, e um endereço já usado por um asset diferente naquele grupo.
- Registros preparados aparecem no push modal em Addressables e contam para o pill da barra superior.
Ctrl+Zremove o valor da célula e o registro juntos; retipar a célula de forma que nada mais referencie o endereço descarta o registro no mesmo passo, então um registro obsoleto nunca sobrevive por conta própria. - Toda célula de asset também carrega um botão fixo ↗ à sua direita: pressione-o e a janela Project localiza e seleciona aquele asset — uma célula de lista seleciona todo asset que ela guarda e localiza o primeiro, e um endereço
parent[sub]localiza o próprio sub-objeto. Ctrl+clique (Cmd+clique no macOS) na célula faz o mesmo, enquanto um clique simples continua editando o texto. Quando o endereço não resolve para um asset, o botão permanece visível mas desabilitado, com o motivo como tooltip. - Clique com o botão direito em uma célula para Localizar no projeto — cobrindo também células de lista — e, em uma coluna opcional, Limpar (padrão). As linhas de valor do canvas carregam o mesmo botão de localizar, porque são o mesmo widget.
- O Problems relata
UnknownAssetKeyeAssetTypeMismatchantes de você refletir, e um registro preparado não é um erro — a projeção já o conta. Sem o pacote Addressables, o botão ⊙ e o soltar ficam desabilitados, com o motivo como tooltip; digitar um endereço continua funcionando.
- ⊙ abre o seletor de asset do SheetForge: os endereços já presentes naquele grupo — restritos ao
- Células de asset mostram o próprio asset. Quando o endereço de uma célula
AssetRefresolve, uma pequena miniatura aparece ao lado do texto — qualquer tipo de asset para o qual o editor consiga renderizar uma prévia, dimensionada para que a altura da linha nunca mude; uma célulaList<>mostra a do seu primeiro elemento.- Clique na miniatura e uma visualização ampliada flutuante abre; no canvas de registros, assets de imagem são desenhados grandes no card.
- Um endereço que não resolve simplesmente não mostra miniatura nenhuma — o botão ↗ de localizar já carrega o motivo.
- Células
AssetRef<AudioClip>reproduzem. Um botão de reprodução ao lado do endereço do clipe o toca através do próprio canal de prévia do editor; pressioná-lo de novo a interrompe, assim como seguir em frente — trocar de célula, fechar a janela, um domain reload.- Quando a build do editor não consegue fornecer o recurso de prévia, o botão permanece visível mas desabilitado, com o motivo como tooltip. Em uma célula cujo asset não é um clipe de áudio, simplesmente não há botão nenhum.
- Células de cor, curva e gradiente são os campos nativos. Uma célula escalar
Color,AnimationCurveouGradienté o campo de cor, o campo de curva ou o campo de gradiente da Unity — a célula inteira, sem texto bruto.- Toda alteração grava o texto canônico (veja Sintaxe da Planilha). Uma rajada de alterações — arrastar no seletor de cor, uma sessão no editor de curva — se funde em um único passo de undo, a mesma regra que a digitação segue.
- Em uma coluna opcional, uma célula vazia mostra —. Clique nela para abrir o campo no padrão do tipo, e clique com o botão direito ▸ Limpar (padrão) para esvaziá-la de novo.
List<Color>,List<AnimationCurve>eList<Gradient>são editores de chips: um chip por elemento (uma amostra de cor, uma miniatura de curva, uma barra de gradiente) e um chip+. Clicar abre um popup com um campo nativo por elemento, mais ▲▼ e ✕; adicionar, remover, reordenar e cada edição de elemento são, cada um, o seu próprio passo de undo, porque a ordem de uma lista é dado. Listas de outros tipos permanecem como texto canônico.- As linhas de valor do canvas usam exatamente os mesmos widgets.
- Restrinja uma coluna de asset a um tipo a partir do formulário de coluna. No formulário de propriedades de coluna — e nos formulários de adicionar coluna e criar planilha — um botão Tipo… aparece sempre ao lado do campo
@type; ele fica habilitado enquanto a notação sendo digitada é umAssetRef@Group, e do contrário permanece desabilitado com um tooltip que explica o motivo. Ele lista os tipos de asset que o projeto consegue carregar (pesquisável, nome curto com o nome completo como subtítulo) e reescreve o campo paraAssetRef@Group<Type>, deixandoList<>,?e=defaultintocados; Sem restrição (qualquer asset) remove o<…>. Digitar a restrição à mão também funciona. O tooltip do cabeçalho de coluna mostra o nome completo do tipo resolvido. - O que você digita é o que você vê, imediatamente. O texto da grade é o baseline mais a sua preparação, então ele nunca espera pela validação. Um valor confirmado mostra a sua cor de preparado assim que é confirmado — um valor escolhido em um dropdown, uma edição de valor visual e a digitação rápida, igualmente, mesmo enquanto a célula ainda está em foco. A prévia mais pesada (Problems, contadores, chips, canvas) recomputa uma vez por sequência de edição, em vez de uma vez por tecla. A exceção é um gesto único no canvas, que redesenha na hora.
- Sem validação em linha enquanto você digita — diagnósticos vêm de um único canal (o validador de pre-flight/importação), mostrados em Problems.
- + Row adiciona um registro com um id sugerido (detecção de prefixo comum, seguro contra colisão). Toda alteração preparada — edições de célula, edições de chave, adições de linha, descartar tudo — é um passo de Ctrl+Z / Ctrl+Y. Fechar a janela com alterações preparadas pergunta salvar/descartar/cancelar.
- ↑ Push to source roda o dispatcher compartilhado: pre-flight → gravação de volta por origem → reimportação automática. Renomeações de chave ainda perguntam "N referências serão atualizadas — continuar?", e um push do Google ainda mostra a aprovação do plano antes que qualquer coisa seja enviada.
- Portões honestos:
- uma origem somente leitura (Google ExportUrl) desabilita a edição e o push com um motivo ao passar o mouse;
- uma aba de origem xlsx é somente leitura, com um selo (a gravação de volta pula o xlsx);
- enquanto uma importação/exportação/push está em execução, pull e push ficam desabilitados.
Selecionando linhas e colunas — e arrastando-as
As coordenadas da grade são alças, da mesma forma que são em uma planilha eletrônica.
- Clique em um número de linha para selecionar a linha; clique em uma letra de coluna para selecionar a coluna.
- Ctrl+clique alterna mais delas para dentro da seleção; Shift+clique pega o intervalo a partir do último clique.
- O cabeçalho e o corpo destacam tudo que está selecionado, e a célula onde o teclado está desenha um contorno de seleção que segue os movimentos das setas.
- Trocar de planilha derruba a seleção — os mesmos números apontariam para colunas diferentes ali — e os menus carregam um item Limpar a seleção.
- Arraste uma seleção para movê-la. Segure um número de linha (ou letra de coluna) selecionado e arraste: uma linha de inserção acompanha onde a soltura vai aterrissar, e soltar move a seleção para lá como um único passo de
Ctrl+Z.- Uma seleção não adjacente — linhas 2, 5 e 9, digamos — chega reunida no ponto de soltura, na ordem em que você as selecionou.
- Enquanto uma ordenação, busca ou filtro fixa a ordem visível, os movimentos de linha continuam recusados pelo mesmo motivo que os itens de menu se desabilitam — e começar o arrastar avisa disso no instante em que ele começaria, em vez de simplesmente não mover em silêncio.
- Os menus de clique-direito agem sobre a seleção inteira. Com várias colunas selecionadas, Largura da coluna…, AutoAjuste da largura da coluna, Ocultar coluna, os movimentos ◀▶, excluir e Limpar dados da coluna… se aplicam a toda coluna selecionada; com várias linhas, os movimentos e a exclusão cobrem todas elas — cada lote como um único passo de undo.
- Itens que só fazem sentido para um alvo por vez — propriedades, filtro, ordenação, congelar, inserir — ficam à parte em sua própria seção de alvo único.
- Um item bloqueado permanece visível com o seu motivo, como em todo o resto.
Selecionar é um gesto de momento de visualização: nada sobre isso é preparado ou gravado até que uma ação o use.
Os próprios menus agora são um único componente. Todo menu de contexto e dropdown no Studio — cabeçalhos de coluna, margens de linha, o ⋯ da barra de ferramentas, a barra lateral, nós e fios do canvas, menus de célula — tem a mesma forma: seções tituladas, marcas de verificação, navegação por teclado, e itens desabilitados que permanecem no lugar com o motivo. É a mesma forma que os menus do aplicativo web têm, então não é preciso reaprender nada entre os dois.
Editando no canvas
O canvas edita o mesmo buffer de preparação que a tabela. Tudo abaixo é uma alteração preparada comum: aparece no push modal, é um único passo de Ctrl+Z, e é gravado de volta pela mesma cadeia de pre-flight e reimportação.
O que é desenhado
Tudo flui em um sentido: materiais à esquerda, as coisas que os usam à direita, com o registro que você abriu no meio.
Um controle segmentado acima do canvas escolhe até onde ir em cada direção:
- materiais → este → used by — um passo cada;
- somente materiais — dois passos, para seguir uma cadeia de montagem;
- somente used by.
Uma planilha sem colunas de referência próprias não tem nada à sua esquerda, então ela oferece apenas a última dessas opções. O limite de passos existe para que um material amplamente usado não derrame o projeto inteiro na tela. Para ver mais longe, dê duplo clique em um vizinho para torná-lo o novo terminus.
- O mesmo registro alcançado duas vezes continua sendo um único nó.
- Um registro que não existe é desenhado de qualquer forma, marcado como quebrado, porque um vínculo que você não consegue ver é um vínculo que você não consegue corrigir.
- Um ciclo também não é escondido: a aresta que o fecha corre de volta por uma faixa sob os cards, tracejada, para que você possa seguir até onde ela retorna.
O layout é determinístico — os mesmos dados sempre produzem a mesma imagem. As posições dos nós podem ser arrastadas para a sessão, e o arrastar deliberadamente não é salvo.
O que há em um nó
O cabeçalho carrega a chave, um subtítulo (sua planilha, ou o nome legível por humanos que um plugin forneceu), o endereço de célula, e um selo contando quem mais aponta para este registro.
Abaixo dele as portas de referência estão sempre visíveis. Uma porta é onde um fio se conecta, então esconder uma faria a imagem mentir. Cada porta mostra um ponto preenchido ou vazio, o que ela aceita, e quantas estão vinculadas. Uma porta de lista mostra os seus elementos em ordem, cada um com controles de mover e remover, porque a ordem de uma lista é dado.
As colunas comuns se dobram em um grupo de "n valores", aberto no terminus e fechado em outros lugares. Cada linha é uma linha de valor na qual você pode digitar — o mesmo widget que a grade usa, confirmado através do mesmo portão. Os pontos de porta são tingidos com a cor da planilha que eles aceitam, então uma cadeia inteira se lê como uma única cor.
Um card mostra a mesma projeção que a tabela mostra. Uma coluna preparada neste lote — ainda não refletida, tipos obrigatórios e de referência incluídos — já aparece no card, marcada como pendente da mesma forma que o cabeçalho da tabela a marca, tooltip incluído: uma coluna de referência preparada aparece como uma porta, uma coluna comum preparada como uma linha de valor, uma renomeação preparada mostra o novo nome sobre o valor original, e uma exclusão preparada remove a linha do card também. Adicionar uma coluna obrigatória a uma planilha já populada não deixa os cards em branco enquanto as células vazias ainda estão sendo preenchidas — o canvas continua mostrando a planilha como ela ficará depois do reflect, exatamente como a grade faz.
No ombro direito está um único ponto de saída. O que este registro exporta é ele mesmo, então há apenas um. Arrastar a partir dele pergunta a questão oposta ("onde eu uso isto?") de arrastar uma porta ("para onde isto aponta?").
Esse ponto só é desenhado quando alguma planilha no projeto de fato tem uma coluna que aceita esta planilha, porque um ponto sem lugar para ir é uma affordance com falha garantida. O teste é o esquema, não os dados: uma coluna que declara RecordId@ThisSheet mantém o ponto vivo mesmo antes de alguém ter escrito uma única linha.
Gestos e menus
O ponto é a alça. Pressionar um ponto de porta inicia o gesto, e pressionar em qualquer outro lugar da linha não, então nada é agarrado por acidente. Pressionar e soltar sem mover ainda conta como um clique.
- O cabeçalho de um card é a sua própria alça:
- clique nele para selecionar o card, o que também o eleva acima de qualquer card que o sobreponha;
- arraste-o para mover o card durante esta sessão;
- dê duplo clique para tornar aquele registro o novo terminus.
- Clique com o botão direito no canvas vazio → Novo registro. Um seletor em cascata abre: o painel esquerdo lista as planilhas para onde as portas atualmente desenhadas apontam, o painel direito carrega a busca, a criação e a lista de registros, e uma terceira página pergunta qual porta recebe o registro quando mais de uma poderia.
- Um plugin pode estreitar ou ampliar essa lista de planilhas. Uma planilha que ele declarou e que nenhuma porta em tela aceita permanece listada com o seu motivo anexado, em vez de desaparecer.
- Não existe um "novo registro" livre de contexto aqui — todo registro nascido no canvas nasce vinculado. Uma linha independente é para o que o + Row da tabela serve.
- Clique em um ponto de porta vazio, ou clique com o botão direito em um nó → Connect, para vincular aquela coluna. O seletor abre no cursor e é a mesma lista de chaves pesquisável que a grade usa.
- Duas linhas de cabeçalho dizem o que o slot aceita e em qual célula a escolha será gravada.
- Cada linha carrega a chave, o seu nome de exibição e quantos lugares já apontam para ela, e chaves já vinculadas aqui são marcadas, em vez de duplicadas silenciosamente.
- Se o registro que você quer ainda não existe, a caixa de busca vira uma caixa de chave com o prefixo comum da planilha preenchido. Digite um nome, pressione Enter, e ele é criado e vinculado em um único gesto que um
Ctrl+Zdesfaz. Um nome vazio ou já em uso diz isso (e onde) em vez de criar qualquer coisa.
- Um registro que você cria no canvas se torna o canvas. A visualização é roteada até ele da mesma forma que dar duplo clique em um card faz, então o novo registro fica no meio, com o vínculo que você acabou de fazer ao lado dele. (Bifurcar é a exceção — o ponto de uma bifurcação é que este terminus mantém a sua própria cópia, então a visualização permanece onde está.)
- Arraste a partir de um ponto de porta vazio e o fio segue o cursor: solte-o sobre um card para vincular, sobre o canvas vazio para abrir o seletor ali.
- Arrastar a partir do ponto de saída vai na direção oposta. Solte sobre um card e o canvas encontra qual das suas colunas consegue receber este registro — um candidato vincula direto, vários perguntam qual. Soltar no canvas vazio abre a cascata espelhada de planilhas que poderiam recebê-lo, incluindo planilhas fora de tela.
- Enquanto um arrastar está ativo, tudo que não é relacionado escurece e as portas que poderiam aceitá-lo brilham, então os alvos legais ficam visíveis, em vez de adivinhados.
- Todo gesto completado responde com um toast curto nomeando a célula que escreveu — e, quando importa, que o vínculo fechou um ciclo ou que o registro agora é compartilhado com outra pessoa.
- Pegue um vínculo que já está conectado. Arrastar uma porta de referência única preenchida levanta exatamente aquele fio, exatamente como puxar um cabo para fora de um soquete. Solte-o sobre outro card para reapontá-lo, ou sobre outra porta para mover o vínculo entre duas células — ainda um único passo de undo, e nenhuma das duas células é gravada a menos que os dois planos se sustentem. Solte-o de volta onde estava, ou pressione
Esc, para não mudar nada.- Soltá-lo no canvas vazio abre o seletor daquela célula no cursor, com o desconectar oferecido como uma linha dentro dele, em vez de feito na hora: uma mão que escorregou não deve apagar um vínculo.
- Clicar em tal ponto sem mover seleciona aquele fio em vez disso, então os dois gestos nunca custam nada um ao outro.
- Uma porta escalar preenchida ainda é um alvo válido para o arrastar de outra pessoa — soltar sobre ela significa substituir.
- Portas de lista não têm um único fio para levantar, então elas sempre iniciam um novo vínculo. Remover ou reordenar um elemento é para o que a própria linha ✕ / ▲▼ do elemento serve.
- O corpo de um fio é para escolher, não para arrastar. Clique em qualquer lugar ao longo de um fio — a faixa clicável segue todo segmento do seu caminho — para selecioná-lo e abrir o inspector de fio.
Deleteou clique com o botão direito ▸ Disconnect o desvincula. Reapontar é o gesto de porta acima, então existe exatamente uma forma de fazer cada coisa. - Clique com o botão direito em um nó → Delete this record. Um único diálogo nomeia tudo que vai junto: quantas conexões apontam para o registro, e quantas edições preparadas naquela linha serão descartadas.
- Bifurque um registro compartilhado. Quando um registro é usado em vários lugares, o inspector de nó oferece Duplicate and split. Ele clona toda coluna em uma nova chave (sugerida a partir do prefixo da planilha), e reaponta apenas os vínculos deste canvas para a cópia. Um único passo de undo, e o registro que todo mundo mais usa fica intocado.
- O inspector de fio abre com o fio selecionado. Ele diz que uma linha é um token: a célula em que o vínculo está escrito, e o texto inteiro daquela célula dividido nos seus tokens com uma marca no que esta linha é.
- Quando o plugin que abriu a aresta o descreve, uma linha edita a parte do token que não é a chave (o
add:10deattack:add:10). Editar essa linha reescreve apenas o resto; mudar para onde ele aponta é reapontar, que é o gesto de porta. - A partir daqui você também pode abrir o registro para o qual ele aponta, ou cortar o vínculo.
- Quando o plugin que abriu a aresta o descreve, uma linha edita a parte do token que não é a chave (o
- A tecla
Deletelê a seleção, e pergunta o que essa seleção significa aqui.- Com um fio selecionado, ela o desvincula.
- Com um card selecionado, depende se o card é o registro que você abriu. No terminus — o card no meio, o registro sobre o qual esta tela é — ela exclui o registro, através do mesmo diálogo de confirmação do item de menu.
- Em qualquer outro card, ela corta toda conexão entre aquele card e esta tela de uma vez, porque, a partir daqui, aquele card é material, não o assunto. Isso é um único passo de undo, com os planos encadeados de forma que uma coluna de lista perca todos os seus elementos correspondentes, em vez de todos menos o último, e uma conexão que não pôde ser cortada diz por quê, em vez de simplesmente ficar quieta.
- (Clique com o botão direito ▸ Delete this record sempre significa excluir, não importa em qual card esteja — a tecla é o atalho cujo significado segue a seleção, a linha de menu é a explícita.)
- Um card que um plugin desenhou e que não é uma linha de planilha não tem nada para excluir ou desvincular, então a tecla não faz nada nele.
- Um novo registro que não está vinculado a nada não é desenhado no canvas de outra pessoa. Uma nova linha aparece aqui apenas enquanto uma conexão preparada a amarra a algo em tela — do contrário, uma única linha inacabada na tabela seguiria todo canvas do projeto por aí.
- Nada se perde com isso. Criar um registro a partir do canvas reroteia a visualização até ele imediatamente, então a linha que você acabou de fazer é o que você está olhando. Uma linha feita na tabela permanece na tabela. E uma linha que acaba não vinculada a nada é nomeada na lista de descarte do diálogo de reflect antes de ser descartada, tenha sido desenhada alguma vez ou não.
- Ctrl/Cmd + roda do mouse dá zoom no canvas entre 25% e 200%, mantendo parado o ponto sob o cursor. A porcentagem no cabeçalho do canvas é um botão que volta para 100%. Uma rolagem simples da roda continua fazendo scroll.
- Arraste com o botão do meio do mouse — ou Alt + botão esquerdo — para fazer pan. O cursor muda enquanto você o segura, então fica claro que a visualização está sendo movida, e não algo dentro dela.
- O arrastar com o botão esquerdo sozinho continua significando "selecionar e vincular", que é o motivo pelo qual o pan ganhou o seu próprio botão. Alt + esquerdo é o mesmo gesto para mouses e trackpads sem botão do meio.
- O pan para na borda do conteúdo: isto é uma scroll view, não um plano sem fim, então você não consegue perder o grafo no espaço vazio.
Desconectando e recusas
Desconectar diz o que vai acontecer antes de você apertar. Limpar nunca é recusado, mas a linha do menu explicita a consequência:
- uma coluna opcional com um padrão recorre àquele padrão, então o fio vai embora e o registro ainda resolve em tempo de execução;
- uma coluna opcional sem padrão simplesmente fica vazia;
- uma coluna obrigatória vira uma célula vazia que Problems relata — você pode prepará-la, e o pre-flight vai impedir o reflect até você preenchê-la;
- uma lista simplesmente perde aquele um elemento.
A validação vive em um único canal; o canvas nunca roda um segundo canal próprio.
Duas coisas são recusadas, em vez de falsificadas, e o menu diz quais:
- Um fio que não diz em qual célula está escrito não pode ser editado. O core preenche isso para as referências que ele mesmo lê; um plugin que adiciona um fio à mão o fornece (ou honestamente o deixa de fora).
- Um vínculo enterrado dentro de um tipo personalizado — o nome da stat dentro de um valor
Modifier, por exemplo — só é editável se o plugin que abriu aquela aresta também optou porIAuthorableEdgeContributor. Caso contrário, o fio é somente de exibição.
Chaves duplicadas, origens somente leitura, abas baseadas em xlsx e uma importação em execução desabilitam a autoria no canvas exatamente como desabilitam a da tabela, cada uma com o seu motivo na linha de menu.
Edição de estrutura
Tudo abaixo é preparado como uma edição de célula — visível imediatamente, desfazível, confirmado por uma única gravação de volta. As affordances vivem nos menus de clique-direito descritos acima (cabeçalho de coluna · margem de linha · planilha na barra lateral).
O Studio também mantém botões fixos na barra de cabeçalho da planilha, ao lado do nome da planilha, para que os mais usados possam ser encontrados sem saber que os menus de clique-direito existem. Entre eles estão + Row e + Column, que anexa uma coluna ao final. A mesma barra carrega o ✎ de renomear da planilha, o alternador da linha @overlap, e os controles de busca e ordenação. Clicar com o botão direito em um cabeçalho continua sendo a forma de colocar uma nova coluna em uma posição específica.
- Colunas: adicione, remova, mova e edite propriedades no local.
- O formulário de propriedades (properties ✎ no cabeçalho) edita nome,
@type,@desce@overlapjuntos. Apenas as células de marcador mudam; as células de dado da coluna são 100% preservadas (sem perda de dados por excluir-e-readicionar). @overlapé uma caixa de seleção. A linha é criada automaticamente na primeira vez que for necessária, e a caixa fica desabilitada em colunas-chave, que são sempre únicas.- A entrada de
@typeé validada enquanto você digita. A validação prévia então verifica se cada célula existente é compatível com o novo tipo antes que qualquer coisa seja gravada.
- O formulário de propriedades (properties ✎ no cabeçalho) edita nome,
- Marcadores: adicione/remova a linha opcional
@overlap. O rótulo de grupo e a cor@styleda própria planilha são preparados pelo mesmo caminho (clique direito na barra lateral ▸ Group & color ✎), então o agrupamento e a coloração são enviados por push para a planilha como qualquer outra edição, em vez de ficarem em estado local do editor. - Linhas: exclua; reordene com ▲▼ (no Studio, "move up" / "move down" no menu da margem).
- Reordenação de coluna — qualquer número de movimentos, confirmado em um único reflect. Colunas pendentes (recém-adicionadas) também são reordenáveis, até a frente, passando por colunas já existentes.
- Comentários e linhas em branco são preservados durante todas as edições de estrutura.
WYSIWYG: a grade é uma prévia ao vivo da planilha depois de refletir
Tudo que você prepara é imediatamente o que você vê:
- Uma coluna adicionada aparece instantaneamente — e você pode preencher suas células no mesmo lote (linhas existentes e novas linhas igualmente). É assim que você adiciona uma coluna obrigatória a uma aba já populada: adicione-a e preencha os valores juntos. Células obrigatórias não preenchidas são capturadas pela validação prévia.
- Colunas/linhas excluídas desaparecem instantaneamente. O resumo de preparação lista o que está pendente (
Deleted: column 'hp'·Added: column 'mp') — apenas para exibição. - Tudo se mistura livremente em um único lote: edições de valor, adições de linha, múltiplas adições/remoções de coluna, alternâncias de marcador e reordenações — sem restrições de "uma operação por lote".
- Excluir uma coluna/linha que já tem edições preparadas (ou cancelar uma nova coluna já preenchida) pergunta "N edições serão perdidas — continuar?" — nada é descartado silenciosamente.
Renomeação de aba e trocas A↔B — as referências seguem os dados
Renomear aba ("Rename tab ✎") renomeia a origem e atualiza toda referência @type à aba em todas as planilhas (RecordId@Foo → RecordId@Bar, incluindo formas em lista e personalizadas), depois de uma caixa de confirmação. Renomear a origem significa uma renomeação de arquivo com a extensão preservada no modo local, e uma mudança de título com o conteúdo intocado no Google.
Trocas mútuas (A↔B) e ciclos são suportados em um único lote: preparar qualquer uma das metades primeiro funciona, e as referências seguem os dados através de uma reescrita atômica da troca.
- O modo local troca o conteúdo dos arquivos em uma única passagem de gravação e limpa os arquivos obsoletos da extensão antiga.
- O Google ordena as mudanças de título topologicamente, usando um título temporário para evitar qualquer duplicata momentânea.
A reimportação cuida da limpeza automaticamente: renomeação da classe gerada, remoção do arquivo da classe antiga, e re-registro do SO do bake e do endereço no Addressables.
Renomeação de chave (RecordId) com propagação de referência
Edite uma célula de chave diretamente na grade. Ao refletir, toda célula em toda aba que referencia aquela chave (escalares RecordId@ThisTab e elementos de lista) é atualizada junto, depois de uma confirmação "N referências serão atualizadas — continuar?". Funciona tanto no caminho local quanto no do Google. Limites:
- A propagação toca apenas células do baseline. Texto que você acabou de digitar no mesmo lote nunca é reescrito silenciosamente; a validação prévia captura a referência pendente em vez disso, para que você a corrija conscientemente.
- Se a propagação fosse tocar uma aba de origem xlsx, o Refletir inteiro é bloqueado, porque reflexão parcial nunca é permitida. Edite essa planilha de trabalho (workbook) diretamente e reimporte.
- A chave inteira secundária (
IntId) é editável da mesma forma.
Ctrl+Z / Ctrl+Y reais
Toda alteração em preparação se integra com o Undo nativo da Unity:
- edições de célula;
- edições de chave;
- adição/remoção/cancelamento de coluna;
- adição/exclusão de linha;
- alternâncias de marcador;
- reordenações;
- edições de propriedade;
- renomeações de aba;
- vínculos e desvínculos no canvas;
- soltar assets, junto com os registros que eles preparam;
- até mesmo "descartar tudo".
Dois limites a conhecer:
- Enquanto você digita em um campo de texto, o próprio campo consome o Ctrl+Z primeiro (comportamento padrão do Windows).
- Depois de um Refletir bem-sucedido, o histórico de preparação é limpo — o Ctrl+Z se move apenas dentro da sessão anterior ao reflect. Alterações já gravadas na planilha são desfeitas editando a planilha.
Edições preparadas sobrevivem a reimportações
Edições preparadas carregam um endereço lógico (aba · chave de linha · campo), não um número físico de linha, e são reresolvidas pouco antes de refletir. Então a sua preparação sobrevive a reimportações automáticas e a alterações de baseline em segundo plano.
Uma edição fica isolada quando a planilha mudou externamente de uma forma que quebra a resolução — a chave da linha foi renomeada externamente, a linha foi excluída, ou uma chave agora entra em conflito. Uma edição isolada é excluída do reflect e mostrada com um selo "isolada". Ela não é descartada silenciosamente, nem permitida a bloquear o resto da sua sessão; você pode descartá-la individualmente depois de uma confirmação.
Validação prévia — validar, depois refletir
A gravação de volta primeiro valida o estado projetado inteiro em memória — integridade de referência, unicidade de @overlap, chaves de asset e tipos de asset (com os registros preparados nesta sessão contados como presentes), além de quaisquer validadores de domínio de plugin. Se a validação falhar, nada é gravado e você recebe o relatório completo. A gravação só começa depois que o estado projetado inteiro passa; os registros Addressables preparados rodam depois que a gravação da planilha for bem-sucedida e antes da reimportação automática (veja Fontes, Exportação e Envio).
Criação / exclusão de planilha
- Criar a partir de um dos dois templates embutidos, de um template registrado por plugin, ou do zero, definindo os campos. Um clique cria o arquivo local ou a aba do Google (depois de um aviso).
- Os templates embutidos são Exemplo de item (somente tipos básicos) e Enum definitions, que monta uma planilha
@enum(veja abaixo). - Um template registrado por plugin está presente apenas quando um plugin o fornece — por exemplo, as abas de skill do Plugin Demo.
- Os templates embutidos são Exemplo de item (somente tipos básicos) e Enum definitions, que monta uma planilha
- Se você criar em uma origem diferente daquela de onde você está importando no momento, o diálogo avisa isso antes de agir. A reimportação automática leria a origem antiga e nunca veria a nova aba, então criar troca a origem de importação para aquela em que você criou, e salva isso no asset de configurações.
- Excluir limpa tudo junto: origem, baseline, SO do bake e o
.csgerado (aviso forte + aprovação).
Busca entre planilhas (a entrada All)
O primeiro item da barra lateral é All: digite um termo e ele busca os ids e valores de campo de toda planilha por correspondência parcial, listando planilha · chave · campo · valor, 50 linhas por página. Com a caixa vazia, ele percorre todo registro em toda planilha.
Ele lê os bancos de dados cozidos (bake), então precisa de uma importação bem-sucedida primeiro, e diz isso claramente quando ainda não há nenhuma. Os resultados se atualizam sozinhos quando uma importação é concluída ou as configurações ativas mudam, em vez de mostrar uma resposta desatualizada.
Uma linha de resultado é uma porta, não apenas uma listagem. Dê duplo clique nela — ou selecione-a e pressione Enter — e aquela planilha abre com a célula correspondente selecionada; um clique simples apenas seleciona a linha. Como os resultados vêm de dados cozidos (bake), um resultado pode nomear uma planilha que a sessão atual não carregou — essa linha não navega, e um aviso curto abaixo da lista diz o porquê em vez de simplesmente não fazer nada.
Abrindo uma planilha que falhou ao importar (quarentena)
Um erro de validação costumava te deixar sem nada para corrigi-lo: a importação falhava, então nenhuma planilha aparecia na janela, e o único caminho adiante era abrir a própria planilha eletrônica. Isso está invertido agora.
Buscar e salvar são separados de validar. Contanto que a origem tenha sido lida por completo, as planilhas são salvas como o snapshot de baseline mesmo que a validação tenha falhado — então o Studio as abre, mostra cada erro contra as células problemáticas, e permite que você corrija e envie por push exatamente como de costume.
O que permanece bloqueado é a saída: geração de código e bake não rodam até a contagem de erros ser zero, então "nenhuma montagem parcial" é preservado onde pertence — na saída.
- Você é avisado, não deixado adivinhando. O console diz que as planilhas foram salvas e o que está bloqueado. A barra lateral carrega um aviso
⛔ N error(s) — code generation and baking are blockedque pula para o primeiro erro quando clicado, e os selos de erro por planilha vêm dos diagnósticos de projeção que você já vê em Problems. Uma planilha que não pôde ser analisada de forma alguma diz isso em vez de aparecer vazia. - Enviar sua correção por push pergunta uma vez. Enquanto a planilha está em quarentena, gravar de volta mostra uma confirmação extra: os erros existentes permanecem, e um novo erro que esta edição introduzir também é gravado — a validação não vai impedi-lo. Tudo que ela encontra é listado como um aviso naquele relatório de reflect, e a reimportação automática revalida a planilha inteira depois. Em uma planilha saudável nada muda: o pre-flight continua sendo um portão rígido.
- As saídas permanecem fechadas. Exportação e Push para a planilha ao vivo são ambos recusados enquanto em quarentena, porque os dois emendam os últimos valores cozidos (bake) com sucesso nas planilhas mais novas — o que reverteria exatamente os valores que alguém acabou de corrigir. Um build é interrompido pela verificação de atualidade pelo mesmo motivo, e a janela Primeiros Passos também mostra o estado.
- A flag é limpa em exatamente um lugar — o momento em que uma importação roda até o fim, passando pelo bake. Nenhuma etapa anterior consegue limpá-la, então uma falha posterior não pode deixar um falso "tudo certo" para trás.
Ordenação e filtro (somente exibição)
O Studio adiciona uma ordenação por planilha (qualquer coluna, ascendente/descendente, comparação consciente de tipo, persistida por projeto) e um filtro de texto. Ambos mudam apenas a ordem de exibição: a margem mantém os números de linha reais da planilha, e nada relacionado a ordenar ou filtrar toca a preparação, o reflect, o push ou a exportação.
Enquanto uma ordenação ou filtro está ativo, os itens de mover-linha no menu da margem se desabilitam e dizem por quê, porque "vizinho visível" não seria o vizinho real. Os filtros de valor por coluna e a ocultação de colunas descritos abaixo seguem a mesma regra.
Colunas congeladas (somente exibição)
Clique com o botão direito em um cabeçalho de coluna ▸ Congelar até esta coluna, e aquela coluna, mais toda coluna à esquerda dela, se move para o seu próprio painel fora do scroll horizontal — então a chave permanece visível enquanto você rola até uma coluna distante. Descongelar colunas as libera. Pelo menos uma coluna precisa permanecer rolável, então congelar a última é recusado, com o motivo mostrado. Uma tabela com uma única coluna não tem nada para congelar.
O que é congelado é uma contagem de colunas a partir da esquerda, não uma coluna específica nomeada. Então mover uma coluna muda quais são mantidas, exatamente como painéis congelados se comportam em uma planilha eletrônica.
Como a ordenação e o filtro, é uma configuração de visualização, armazenada por planilha nas preferências por projeto. Ela nunca chega até a planilha, então funciona em planilhas somente leitura e baseadas em xlsx e enquanto uma importação está em execução, e não aparece em nenhum push ou exportação.
Largura de coluna, ocultação e filtros por coluna (somente exibição)
Toda coluna — em planilhas de dados e em planilhas de definição de enum igualmente — pode ser redimensionada à mão: arraste a alça na borda direita da célula de letra da coluna, clique duas vezes na alça para voltar ao ajuste medido, ou use Largura da coluna… no menu da coluna para um número exato e AutoAjuste da largura da coluna para medir de novo. O piso é 24 px e não há teto superior. As larguras são armazenadas por planilha e restauradas quando a planilha ou o editor voltam, e o autoajuste mede toda linha — não somente as visíveis —, então um filtro não pode fazer as larguras saltarem.
O mesmo menu de coluna carrega o restante do conjunto de recursos de planilha eletrônica:
- Ocultar coluna / Mostrar colunas ocultas ({count}) — ocultar é uma configuração de visualização: as letras continuam nomeando as posições reais da planilha (A · C · D), uma linha de fronteira em negrito no cabeçalho e no corpo marca onde ficam as colunas ocultas, e um chip da barra de ferramentas as conta. A última coluna visível recusa-se a ocultar, com o motivo. Colunas ocultas continuam existindo em todo o resto — o canvas, a validação, o Export e o Push veem a planilha sem alteração.
- Filtro… — uma checklist dos valores da coluna (com uma entrada (Em branco) para células vazias) mais uma condição: contém / não contém / está vazio / não está vazio em qualquer coluna, e é igual a / é diferente de / maior que / menor que / maior ou igual a / menor ou igual a em colunas numéricas. Com nada marcado, todo valor passa e a condição ainda se aplica. Um filtro se combina com a caixa de busca, linhas recém-adicionadas sempre permanecem visíveis, o chip da barra de ferramentas conta as colunas filtradas, e Limpar filtro remove um.
- Limpar dados da coluna… — depois de uma confirmação, esvazia o valor daquela coluna em toda linha (linhas filtradas e linhas novas preparadas incluídas) como um único passo de undo. A coluna-chave recusa — o nome de cada linha vive ali; renomeie-a na sua célula — e uma coluna obrigatória relata erros honestamente até ser preenchida de novo. Uma coluna sem nada para limpar não prepara nada.
- Ordenar ascendente / Ordenar descendente / Ordem da planilha — a ordenação por planilha, agora também no menu da coluna, com uma marca de verificação na escolha ativa.
Como a ordenação e as colunas congeladas, tudo isso é somente exibição: configurações de visualização por planilha que nunca chegam à planilha, a um push ou a uma exportação.
Planilhas de definição de enum
Uma planilha que define enums (veja Sintaxe da Planilha) não tem registros, então o Studio dá a ela a sua própria grade, em vez da tabela de registros. A grade mostra uma coluna por enum com seus membros listados em ordem, um selo Enum definitions na barra lateral, e uma contagem de quantos enums ela guarda. Ela se lê como qualquer outra planilha: letras de coluna no topo, números de linha reais da planilha na margem, os mesmos menus de clique-direito na mesma ordem, e alterações preparadas marcadas com as mesmas cores que a tabela de dados usa.
A estrutura da planilha é autorada no próprio lugar, exatamente como a de uma planilha de dados:
- Defina um novo enum com o botão + Enum da barra de cabeçalho (a única forma de colocar o primeiro enum em uma planilha de definição que ainda não tem nenhum) ou a partir do menu de clique-direito de um cabeçalho de coluna, em uma posição escolhida. O formulário pede o nome, o tipo subjacente opcional e a descrição, e os primeiros membros — pelo menos um, porque um enum sem membros não pode ser importado. A ordem dos membros é o seu valor inteiro.
- Renomeie um enum, e toda célula
@typeque se refere a ele em todas as planilhas é reescrita no mesmo lote, então a reimportação depois da gravação continua resolvendo. Edite o tipo subjacente e a descrição no próprio lugar — as linhas de marcador são mostradas mesmo antes de a planilha tê-las, e são criadas quando a alteração é gravada. - Exclua um enum — recusado enquanto qualquer planilha ainda o usa, com as colunas que o usam nomeadas. Reordene colunas livremente; a posição de coluna de um enum não carrega significado nenhum, então isso é sempre seguro.
- Tudo é preparado como qualquer outra edição: visível imediatamente, um passo de
Ctrl+Zpor gesto, gravado por um reflect. Toda decisão — se o nome é válido ou já usado, se um membro é válido, se o tipo subjacente é permitido, se o enum ainda está em uso — é tomada pelo mesmo código que valida a importação, então o formulário e a reimportação não podem discordar. Uma ação bloqueada permanece no seu menu com o motivo, em vez de desaparecer.
As linhas de membro ainda apenas anexam e não há ordenação, porque a posição de um membro é o seu valor — reorganizar membros renumeraria dados já cozidos (bake) em assets.
As células mostram exatamente o que a planilha diz: um membro fixado com a sintaxe Name=value aparece como foi escrito. As verificações de duplicata comparam apenas a parte do nome, então preparar Rare sobre uma planilha que já guarda Rare=10 é recusado, em vez de duplicado.
Para adicionar um membro você nem precisa abrir a planilha. O dropdown de uma célula Enum<T> em qualquer lugar do projeto carrega "Add a new member…" na parte inferior: digite o nome, e ele é preparado na planilha de enum como um único passo de Ctrl+Z, marcado como preparado até o próximo reflect gravá-lo.
A linha fica ausente — em vez de presente e falhando — em um enum que um plugin registrou a partir de C#, porque a planilha não é a dona daquele.
O aplicativo web autora essas planilhas da mesma forma, com as mesmas regras — veja SheetForge Web.
Ir de um erro do Console direto para a célula
Quando uma importação ou um reflect encontra erros, o relatório do Console legível por humanos anexa um link clicável "Abrir no Data Studio" ao lado da coordenada de cada erro. Clicar nele abre o Studio, muda para aquela aba, e destaca a célula (uma barra à esquerda na linha e uma borda na célula). Erros sem uma célula específica (no nível de arquivo/aba) apenas focam a aba.
O link é adicionado apenas ao relatório legível por humanos; a linha de coordenada legível por máquina, usada por CI e coleta de logs, permanece inalterada.
Verificação de integridade
⋯ ▸ Verificação de integridade na barra de ferramentas do Studio executa um diagnóstico rápido, sem rede. Ele imprime ✓/✗ com uma correção sugerida para cada um de:
- configurações ativas;
- alcançabilidade da origem — uma pasta local que existe, ou um id do Google + caminho da chave de conta de serviço;
- um baseline de importação;
- a atualidade do código gerado/bake/addressable.
Uma caixa de diálogo de resumo informa quantas verificações precisam de atenção.
Configurações de importação ativas
Quando o projeto tem mais de um asset SheetForgeSettings, a barra de ferramentas mostra um dropdown para escolher qual está ativo. Selecionar um o ativa imediatamente e reconstrói a visualização; menus, importações e a janela seguem todos a escolha ativa. Com um único asset de configurações, o dropdown fica oculto.
A escolha ativa é armazenada por projeto e por usuário, então ela nunca chega a tocar o controle de versão. Você também pode gerenciá-la a partir da janela Primeiros Passos (Tools ▸ SheetForge ▸ Primeiros Passos), ou a partir do inspector de um asset de configurações, que mostra um selo "ativo" ou um botão "Set as active".
Redes de segurança
- Detecção de alteração externa para origens locais.
- Um aviso de fechamento quando existem alterações preparadas.
- Âncoras de geração de preparação que protegem contra agir sobre uma grade desatualizada.
- Consciência de modo: com uma origem somente leitura (Google ExportUrl), Push / refletir / edição de estrutura / exclusão ficam desabilitados, com uma explicação ao passar o mouse.
- Barras de progresso durante importação/exportação/push, sempre limpas (
try/finally), localizadas. - Uma extensão mal-comportada não consegue derrubar a janela: sobreposições de canvas, widgets e ações são chamados dentro de try/catch, e uma falha é um aviso de console em inglês, enquanto o resto da janela continua funcionando.
O que saber antes de renomear (não reversível depois do reflect)
- Renomeação de coluna / mudança de
@typeregenera o campo gerado (nome/tipo), então o código do jogo que referencia esse campo precisa ser atualizado manualmente. A caixa de confirmação avisa isso explicitamente, e uma quebra de compilação resultante é tratada com safe-abort pela cadeia automática, com uma frase acionável. Os valores da coluna são preservados. - Renomear aba muda o nome da classe gerada (
FooDatabase→BarDatabase) — mesma regra. - Trocas mútuas e ciclos seguem as mesmas regras das renomeações únicas (veja a seção de renomeação de aba acima). Apenas um conflito real — duas renomeações para o mesmo nome — é rejeitado.
- Abas de origem xlsx são excluídas da renomeação. O formulário explica o porquê e o Apply fica desabilitado; renomeie a planilha no próprio workbook, depois reimporte.
- No Google, resta um caso extremo: duas abas trocadas que referenciam uma à outra não são redirecionadas (o modo local é totalmente correto) — veja Capacidades e Limites.
- Depois de refletir, isso não pode ser desfeito com Ctrl+Z (a planilha já foi gravada).
Edição de teste (ajuste temporário de SO)
O inspector do SO do bake tem um alternador de "Edição de teste" (padrão desligado = somente leitura). Ative-o para ajustar temporariamente os valores do SO e testar números em tempo de execução — nunca gravado na planilha, desaparece na próxima reimportação. Os registros são rapidamente localizáveis por codeName/id, no editor e no modo Play.
O botão separado do Workbench para "pré-visualizar meus valores preparados nos SOs" foi junto com aquela janela. A sobreposição que ele acionava continua sendo API pública para uma ferramenta que a queira: EphemeralSoApply aplica o que consegue computar de forma verdadeira, e recusa colunas pendentes e células com falha de parsing, em vez de falsificá-las. O alternador acima cobre o caso do dia a dia.
Com e sem plugins
Toda linha listada como Sem plugin (somente core) funciona em um projeto simples. Cada linha Com um plugin é o que um plugin de domínio adiciona. Tudo isso é exercitado pelo Plugin Demo empacotado, então você pode ver cada um rodando antes de escrever o seu próprio (Autoria de Plugins).
- Planilhas, células, linhas
- Sem plugin: tabela completa, edição de célula, adição de linha, preparação, Ctrl+Z, push.
- Com um plugin: inalterado.
- Pull / Push
- Sem plugin: importa da origem ativa; envia por push através da mesma cadeia de pre-flight + reimportação.
- Com um plugin: inalterado.
- Problems
- Sem plugin: as quatro validações do core (chaves, referências,
@overlap, chaves de asset). - Com um plugin: mais as suas regras
IDomainValidator. O exemplo avisa sobre um ciclo de reação sem freio e sobre um registro órfão.
- Sem plugin: as quatro validações do core (chaves, referências,
- O que o canvas mostra
- Sem plugin: o registro que você abriu, do que ele é feito e o que o usa, organizado deterministicamente.
- Com um plugin: mais a sua sobreposição por aba via
ISheetForgeGraphPlugin— identidades que não são registros de planilha, vínculos que o core não consegue ver, colunas fixadas por ordem de domínio (absoluta ou contada a partir do registro em tela), e o nome legível por humanos pelo qual um registro é conhecido. O exemplo faz crescer nós de evento e um bloco de código em torno de um registroExampleActions, fixa os estágios de elenco (cast) de um registroExampleSkills, e transformafireballem Fireball no card e no seletor.
- Arestas desenhadas
- Sem plugin: toda referência
RecordId@Tabque o scanner do core vê (escalares, elementos de lista, padrões, interior de wrapper). - Com um plugin: mais arestas declaradas por um
IEdgeContributor, e qualquer aresta extra que uma sobreposição de canvas revele. O exemplo abre a referência de stat enterrada dentro de um valor de mini-sintaxeModifier.
- Sem plugin: toda referência
- Edição no canvas
- Sem plugin: criar, conectar, desconectar, reapontar, bifurcar, excluir e editar valores em linha para toda coluna; novos registros podem ser criados nas planilhas para onde as portas desenhadas apontam.
- Com um plugin: mais
IAuthorableGraphShapepara decidir onde novos registros podem ser criados,IAuthorableEdgeContributorpara tornar a própria aresta de um contribuidor editável, eIEdgeTokenEditorpara expor a parte do seu token que não é a chave. O contribuidor do exemplo reescreve a mini-sintaxemodifierquando você vincula ou desvincula uma stat, e oferece o seuop:valuecomo uma linha editável no inspector de fio.
- Widgets de célula
- Sem plugin: as ramificações embutidas (toggle, seletor de opções, seletor de referência, seletor de asset com soltar, campos de cor / curva / gradiente, listas de chips para listas desses três, texto bruto).
- Com um plugin: mais o seu
IStudioCellEditorProviderpara um tipo de célula nomeado. Sem nenhum código de widget, umStudioCellEditorHintnomeia uma entre sete formas embutidas (dropdown, multi-linha, slider, toggle, cor, curva, gradiente) para aquele tipo em vez disso. Um widget registrado vence; o hint vence sobre o padrão do core — inclusive sobre os hints embutidos de cor / curva / gradiente, quando um pacote registra um hint sob o mesmo nome de tipo.
- Menus e painéis
- Sem plugin: apenas os itens embutidos.
- Com um plugin: mais os seus registros
ISheetForgeStudioPlugin— verbos ao final do inspector, menu de linha, menu de cabeçalho de coluna, menu de nó do canvas e o ⋯ da barra superior, um painel de resumo à direita, e um selo ao lado de um cabeçalho de coluna. O exemplo prepara um freio de reação em uma linha, preenche uma coluna inteira em um único passo de Undo, e resume a montagem de uma skill com um medidor de tempo de elenco (cast).
- Painéis ricos
- Sem plugin: nada.
- Com um plugin:
IStudioPanelProviderpinta um painel UIToolkit arbitrário. Registrado sob o mesmo id de um painel descrito, ele vence aqui, enquanto o navegador desenha o descrito.
- Barra lateral
- Sem plugin: apenas as suas planilhas.
- Com um plugin: mais registros de código travados no estilo
_Refs(ISheetForgeCodeRegistryPlugin) mostrados como uma grade somente leitura de chave/rótulo/raises; arestas apontando para essas chaves não são desenhadas como quebradas.
- Acima do canvas
- Sem plugin: nada (o core não distribui nenhum widget).
- Com um plugin: o seu
IStudioGraphWidget. O exemplo mostra uma faixa fixa de estágios (VALIDATE → CAST → COMMIT → DELIVER → APPLY) preenchida a partir da linha do terminus.
- Inspector de nó
- Sem plugin: endereço, lista used-by, "Go to this sheet", "Duplicate and split".
- Com um plugin: mais os seus botões
IStudioInspectorAction. O exemplo preparabrakeSeconds = 0.25em uma reação sem freio (uma edição preparada normal, desfazível).
- Cores e rótulos
- Sem plugin: as predefinições embutidas mais a cor
@stylede cada planilha. - Com um plugin: mais a sua predefinição
ISheetForgeThemePlugine as stringsISheetForgeStringsPlugin— registradas no Core, então os rótulos do mesmo pacote também aparecem no navegador.
- Sem plugin: as predefinições embutidas mais a cor
Começando com um projeto vazio
Aberto com nenhuma configuração de importação ativa, o Studio mostra um painel "Comece agora" no lugar da tabela — botões inline para criar um asset de configurações, importar a demonstração do Plugin/Core, ou abrir o Primeiros Passos. Ele desaparece no momento em que configurações existem.
Ainda mais rápido: arraste uma pasta para a janela, ou um único arquivo .tsv/.csv/.xlsx, cuja pasta pai é usada. Depois de uma confirmação, isso cria um asset de configurações de importação que lê a partir dessa pasta e o torna ativo. Se você já tem configurações ativas, a caixa de diálogo avisa isso e oferece para criar uma nova e trocar.
O que aconteceu com o Workbench
A janela IMGUI original do Workbench foi removida. Ela compartilhava a sessão de autoria do Studio, o motor de composição/validação e o caminho de reflect, então nada de comportamental foi perdido — e as três coisas que só ela oferecia foram movidas primeiro:
| Recurso do Workbench | Onde ele vive agora |
|---|---|
| A aba All — busca entre planilhas com paginação | A entrada All no topo da barra lateral do Studio (mesma busca, mesmo tamanho de página) |
| Integração inicial de arrastar e soltar | O próprio Studio recebe o drop (acima) |
| O painel do Google de preenchimento automático de gid / lista de abas ao vivo | O inspector do asset de configurações, em Google Sheets |
Uma capacidade foi descartada em vez de movida: o botão do Workbench para pré-visualizar valores preparados nos SOs cozidos (bake). O alternador Edição de teste do inspector de SO cobre a mesma necessidade (veja Edição de teste acima).
Se você tem código ou notas apontando para ele: não há entrada de menu para atualizar — ele nunca teve uma — e o inspector de configurações, o inspector de SO cozido (bake) e a galeria de templates do Primeiros Passos todos abrem o Data Studio.
Páginas relacionadas
- Sintaxe da Planilha — contra o que o formulário de propriedades valida
- Fontes, Exportação e Envio — o que "reflect" faz por origem
- Autoria de Plugins — escrevendo as sobreposições de canvas, registros de código, widgets e ações que o Studio capta
- Kernel de Autoria — o motor sobre o qual esta janela é construída
- Capacidades e Limites — a lista completa de limites de autoria