Guia do programador de script visual de malha
Acesse o artigo Visão geral do Visual Scripting
Limitações
- Apenas um subconjunto da funcionalidade do Unity é exposto a scripts visuais.
- Variáveis e propriedades com tipos não simples (incluindo referências de objeto) não são compartilhadas automaticamente. Consulte Compartilhamento e networking abaixo para saber mais sobre isso.
Olá, Mundo
O script visual mais simples que você pode criar é aquele que apenas abre uma caixa de mensagem:
É assim que fica no Mesh:
Testando seus scripts
Antes de carregar sua cena no Mesh, você pode desenvolver e testar scripts visuais, mesmo com vários clientes no modo de tela dividida, usando o Modo de Reprodução com Emulação de Malha.
Diagnóstico de script visual no Editor
Quando um GameObject com uma máquina de script é selecionado na hierarquia de transformação, o Mesh exibe o painel Mesh Visual Scripting Diagnostics na parte inferior do painel Inspector:
O painel de diagnóstico fornece feedback imediato sobre quaisquer avisos ou erros que possam impedir que seus scripts funcionem bem no Mesh.
Limitação atual: versões futuras do painel de diagnóstico também podem fornecer informações sobre o uso de variáveis e propriedades compartilhadas pelo script visual e exibir diagnósticos e avisos adicionais.
Carregando para a malha
Use o Mesh Uploader para fazer upload de cenas que contenham scripts visuais. Para abrir o Uploader, no menu Mesh Toolkit , selecione Ambientes.
Observação: o Mesh Uploader valida scripts visuais antes do upload e se recusa a fazer upload quando há erros de validação em scripts visuais. Diagnósticos detalhados são enviados para o Console.
Compartilhamento e networking
Estado de script compartilhado e local
O Mesh usa o Unity Visual Scripting, que foi projetado para funcionar sem rede. Os scripts visuais são executados em cada cliente de forma independente. No entanto, a experiência do Mesh dos usuários é compartilhada; Todos os usuários experimentam uma única cena compartilhada que parece a mesma em todos os clientes.
O efeito da execução de um script visual é como ele altera o estado da cena.
Por padrão, o Mesh replica automaticamente as alterações de cena feitas por scripts visuais em um cliente para todos os outros clientes. Além de tudo o que é compartilhado em uma cena, algum estado permanece independente em cada cliente (em outras palavras, local).
As alterações locais têm precedência temporária sobre as alterações provenientes de clientes. Exemplo: se você continuar animando um objeto localmente, sua animação local não será comprometida por alterações provenientes de outros clientes.
Há alguma limitação automática da taxa de atualização. Um cliente não envia atualizações adicionais enquanto ainda está em andamento; Há uma atualização enviada por ida e volta pelo servidor. Isso equivale a aproximadamente cinco a seis atualizações por segundo em situações práticas. Isso significa que uma animação suave conduzida por um cliente não parecerá suave em outros clientes. A prática recomendada é fazer animações suaves localmente, idealmente não por meio de scripts visuais, mas por meio do sistema de animação normal do Unity.
A consistência eventual do estado compartilhado é garantida (mesmo que os estados dos clientes possam ser temporariamente diferentes).
Estado local:
- Estado local natural – sons, interface do usuário, renderização.
- Estado local controlado pelo usuário – subcenas marcadas com o componente Escopo do Script Local.
- Estado local técnico – objetos que não fazem parte da hierarquia da cena (por exemplo, materiais do renderizador, ativos).
Estado compartilhado:
- Limitado a variáveis de script visual e às propriedades de GameObjects e componentes de cena que fazem parte da hierarquia de cena.
- Somente variáveis e propriedades de tipos simples podem ser replicadas: inteiros, números de ponto flutuante, booleanos, strings,
Color
,3
/Vector2
/4
,Quaternion
,Matrix4x4
, e .Rect
Qualquer alteração no estado compartilhado é enviada pela rede. Isso aumenta o tráfego de rede e, se usado de forma descuidada, pode consumir largura de banda significativa.
Gatilhos de script compartilhados e locais
Todos os fluxos de script visual começam em resposta a um evento.
- Se o evento se originar em um único cliente (por exemplo, o usuário clica em um botão), o script visual será executado somente nesse cliente.
- Se o evento ocorrer em todos os clientes, o script visual será executado em todos os clientes (por exemplo, evento de temporizador, alteração de propriedade compartilhada, atualização de variável compartilhada, avatar entra no gatilho, corpo físico toca no colisor).
Ao adicionar um nó para detectar se um objeto está selecionado, é importante escolher o correto. Você tem duas opções: Corpo interativo da malha: é selecionado localmente e Corpo interativo da malha: é selecionado. Digamos, por exemplo, que você queira ter um botão que possa ser clicado para acionar o teletransporte. Para que o participante clique no botão e transporte apenas a si mesmo, use o nó Corpo interativo da malha: é selecionado localmente .
Para que o participante clique no botão e teletransporte todos na experiência, use o nó Corpo interativo de malha: está selecionado . Em cada caso, o texto acima do nó informa o comportamento esperado:
Se um script local definir uma variável compartilhada e um segundo script escutar as alterações nessa variável (usando o gatilho On State Changed ; veja abaixo), o segundo script será executado em todos os clientes.
O Mesh oferece alguns nós de script especiais:
- On Interval é acionado em intervalos regulares de forma síncrona em todos os clientes.
- On State Changed é acionado quando suas entradas são alteradas (por exemplo, propriedades compartilhadas, variáveis compartilhadas, local).
- Mostrar caixa de diálogo exibe uma caixa de diálogo de mensagem com texto personalizado que pode, opcionalmente, fornecer botões como opções de resposta.
O Mesh faz certas compensações em favor da simplicidade:
- Se mais de um cliente tentar alterar os mesmos dados, o último cliente vencerá (em vez de usar um modelo de atualização de dados baseado em transação).
- Para garantir a consistência dos dados, os scripts visuais executados em todos os clientes não devem ler e gravar propriedades ou variáveis compartilhadas. Se isso ocorrer, ele disparará um erro de runtime e anulará a execução do fluxo de script.
Práticas recomendadas
Os scripts visuais são significativamente mais lentos do que o código C# nativo. Além disso, a malha aumenta os scripts visuais com recursos de rede e outros recursos de integração, e ações de script visual aparentemente de baixa sobrecarga podem resultar em tráfego de rede. Para saber mais sobre como obter o melhor desempenho de seus scripts visuais, recomendamos que você leia os seguintes artigos:
Visão geral das práticas recomendadas de Visual Scripting
Práticas recomendadas de Visual Scripting para desempenho
Práticas recomendadas de Visual Scripting para rede
Práticas recomendadas de Visual Scripting para depuração
Segurança
O Mesh protege os usuários de cenários de ameaças como estes:
- Conteúdo de cena comprometido, por exemplo, tentativas maliciosas de acessar dados locais confidenciais.
- Cliente ou canal de transporte comprometido, por exemplo, tentativas maliciosas de ler ou gravar dados remotos inacessíveis em outros clientes.
Para conseguir isso, o Mesh executa scripts visuais em uma sandbox (como JavaScript em um navegador da web).
Na inicialização da cena, o Mesh usa uma lista de permissões selecionada para validar scripts visuais para limitar o acesso a determinados tipos de componentes do Unity e um subconjunto seguro de suas propriedades.
No tempo de execução da cena, a malha limita o acesso a determinadas partes da cena:
- Localmente: impedindo o acesso aos internos do Mesh e outros dados confidenciais.
- Remotamente: verificando se o autor da cena pretende que essa parte da cena seja modificada. Isso é feito analisando estaticamente os scripts visuais do lado do receptor para suas possíveis gravações de cena.
Exemplos:
- Um script visual local malicioso quer dar a todos os avatares bobble heads. Para esse fim, ele tenta verificar toda a cena em busca de GameObjects que representam cabeças de avatar. A malha filtra automaticamente os resultados da verificação para excluir o sistema de avatar.
- Um cliente remoto mal-intencionado deseja desfigurar a cena virando todos os GameObjects de cabeça para baixo. Para conseguir isso, ele envia uma atualização de propriedade que define a escala vertical de cada GameObject na cena. No entanto, como nenhum script visual no cliente receptor foi projetado para fazer algo assim, o cliente local ignora a entrada remota.
Integração de malha
Limitação atual: esta seção descreve uma visualização dos recursos que ainda estão em andamento.
Geralmente, a integração com outros componentes geralmente é feita alterando e ouvindo as alterações de propriedade do componente. Por exemplo:
Interacionáveis: observe as propriedades "Está focado" e "Está selecionado".
Interações físicas: observe corpos em volume de disparo ou em contato com o colisor.
Avatares: leia a posição do avatar, a rotação da visualização e a placa de identificação. (Ainda não disponível.)
Estado da sessão: liste os participantes e leia as informações dos participantes. (Ainda não disponível.)
Cloud Scripting: opere em conjunto com scripts de nuvem que podem ler e gravar variáveis e propriedades de componentes. (Ainda não disponível.)
Alguns componentes fornecem ações locais:
- Gerenciador de áudio
- Linha do tempo
- Animadores
- Renderização: leitura e gravação de material e propriedades do sombreador
A física é tratada especialmente porque a simulação de qualquer objeto físico é sempre feita com autoridade por apenas um cliente: seu proprietário. Para fazer isso funcionar, a configuração de propriedades físicas aciona uma transferência automática de propriedade para o cliente que aplica a alteração.