Guia do programador do Mesh Visual Scripting
Ir para o artigo de visão geral do Visual Scripting
Limitações
- Apenas um subconjunto da funcionalidade Unity é exposto a scripts visuais.
- Variáveis e propriedades com tipos não simples (incluindo referências de objetos) não são compartilhadas automaticamente. Consulte Compartilhamento e rede 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 em Mesh:
Testando seus scripts
Antes de carregar sua cena para o 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 Mesh.
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 Diagnóstico de script visual de malha na parte inferior do painel Inspetor:
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.
Upload para Mesh
Use o Mesh Uploader para carregar cenas que contenham scripts visuais. Para abrir o Uploader, no menu Mesh Toolkit , selecione Environments.
Nota: O Mesh Uploader valida scripts visuais antes do upload e se recusa a carregar quando há erros de validação em quaisquer scripts visuais. Diagnósticos detalhados são enviados para o Console.
Partilha e ligação em rede
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 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 muda 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 relação a cada cliente (em outras palavras, local).
As alterações locais têm precedência temporária sobre as alterações recebidas pelos clientes. Exemplo: Se você continuar animando um objeto localmente, sua animação local não será comprometida por alterações vindas de outros clientes.
Há algum limite automático de taxa de atualização. Um cliente não envia atualizações adicionais enquanto um ainda está em voo; Há uma atualização enviada por ida e volta através do servidor. Isto 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 melhor prática é fazer animações suaves localmente, idealmente não através de scripts visuais, mas através do sistema de animação Unity normal.
A eventual consistência do estado compartilhado é garantida (mesmo que os estados dos clientes possam ser temporariamente diferentes).
Estado local:
- Estado local natural – sons, UI, renderização.
- Estado local controlado pelo usuário – subcenas marcadas com o componente Escopo de Script Local .
- Estado local técnico – objetos que não fazem parte da hierarquia de 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 vírgula flutuante, booleanos, strings,
Color
, ,Quaternion
/Vector2
3
4
/,Matrix4x4
, e .Rect
Qualquer alteração ao estado partilhado é enviada através da rede. Isso aumenta o tráfego de rede e, se usado descuidadamente, pode consumir largura de banda significativa.
Gatilhos de script locais e compartilhados
Todos os fluxos de script visual começam em resposta a um evento.
- Se o evento for originado 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 gatilho, corpo de física toca colisor).
Ao adicionar um nó para detetar se um objeto está selecionado, é importante escolher o correto. Você tem duas opções: Corpo interacionável de malha: é selecionado localmente e Corpo interacionável de 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 somente eles mesmos, use o nó Corpo interacionável de malha: é selecionado localmente .
Para que o participante clique no botão e teletransporte todos na experiência, use o nó Mesh Interactable Body: Is Selected . 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 ouvir 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 aciona em intervalos regulares de forma síncrona em todos os clientes.
- Em Estado Alterado aciona quando suas entradas mudam (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 dispara um erro de tempo de execução e aborta a execução do fluxo de script.
Melhores práticas
Os scripts visuais são significativamente mais lentos do que o código C# nativo. Além disso, o Mesh 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 como obter o melhor desempenho de seus scripts visuais, recomendamos que você veja os seguintes artigos:
Visão geral das práticas recomendadas do Visual Scripting
Práticas recomendadas de Visual Scripting para desempenho
Práticas recomendadas de Visual Scripting para rede
Práticas recomendadas de script visual para depuração
Segurança
O Mesh protege os usuários contra cenários de ameaça 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 área restrita (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 certos tipos de componentes Unity e um subconjunto seguro de suas propriedades.
No tempo de execução da cena, o Mesh limita o acesso a determinadas partes da cena:
- Localmente: impedindo o acesso a internos do Mesh e outros dados confidenciais.
- Remotamente: verificando se o autor da cena pretende que essa parte da cena seja modificada. Isso é feito através da análise estática de scripts visuais do lado do recetor para suas possíveis gravações de cena.
Exemplos:
- Um script visual local malicioso quer dar cabeças de bobble a todos os avatares. Para esse fim, ele tenta escanear toda a cena em busca de GameObjects que representam cabeças de avatar. O Mesh filtra automaticamente os resultados da verificação para excluir o sistema de avatar.
- Um cliente remoto mal-intencionado quer 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 recetor é projetado para fazer algo assim, o cliente local ignora a entrada remota.
Integração com 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:
Interactables: observe as propriedades "Is Hovered" e "Is Selected".
Interações físicas: observar corpos em volume de gatilho ou em contacto com 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: opera em conjunto com scripts na nuvem que podem ler e escrever variáveis e propriedades de componentes. (Ainda não disponível.)
Alguns componentes fornecem ações locais:
- Gestor de Áudio
- Linha Cronológica
- Animadores
- Renderização: material de leitura e gravação e propriedades do sombreador
A física é tratada especialmente porque a simulação para qualquer objeto de física é sempre autoritariamente feita por um único cliente: seu proprietário. Para fazer isso funcionar, a definição de propriedades físicas aciona uma transferência automática de propriedade para o cliente que aplica a alteração.