O script de geometria fornece funções de Blueprint e Python para criar fluxos de trabalho e ferramentas de modelagem personalizadas. Este guia aborda os fundamentos do uso do script de geometria em Blueprints. As etapas a seguir abordam a geração de uma ferramenta de malha procedural para design de nível, semelhante às ferramentas de geometria criadas para o Projeto de amostra do Lyra.
Este guia mostra como:
- Gerar geometria procedural para bloqueio rápido de nível.
- Usar operações booleanas para recortar uma malha dinamicamente.
- Criar uma função de incorporação de malha estática.
A ferramenta que você desenvolverá é um pequeno exemplo da geração procedural de malha e das ferramentas que podem ser criadas com o script de geometria. Um exemplo avançado é o Procedural Content Generation Framework, que usa o script de geometria como base. Para saber mais sobre esse conjunto de ferramentas, consulte Visão geral da geração procedural de conteúdo.
Outros fluxos de trabalho que você pode criar além da geração procedural incluem:
- Como atribuir vários materiais a ativos.
- Como aplicar booleanos de malha com Python.
- Como gerar volumes de bloqueio com base em cascos convexos.
Conhecimento de pré-requisito
Para entender e usar o conteúdo desta página, você deve:
- Ter uma compreensão fundamental de Blueprints.
- Ter familiaridade com o tópico introdutório de script de geometria, em especial os novos tipos de objetos introduzidos.
Este guia usa o modelo em terceira pessoa. No entanto, você pode usar qualquer projeto para acompanhar.
Como habilitar o plugin
Para usar o script de geometria, o plugin associado deve estar habilitado.
Para habilitar o plugin ou verificar se ele já está habilitado:
-
Na barra de menus, selecione Edit > Plugins.
-
Na barra de pesquisa, digite "script de geometria".
- Habilite o plugin Geometry Scripting e selecione Yes na janela pop-up da caixa de diálogo.
- Reinicie a engine.
Como criar uma classe de Blueprint
Para começar, certifique-se de ter a classe de Blueprint correta. Como o objetivo é criar uma malha procedural para design de nível, você precisa usar a classe GeneratedDynamicMeshActor.
Para selecionar uma classe de Blueprint:
- No Navegador de Conteúdo, clique com o botão direito e selecione Blueprint Class.
-
Procure e selecione GeneratedDynamicMeshActor.
- Dê o nome BP_ProceduralGen para o Blueprint.
Se a opção GeneratedDynamicMeshActor não estiver aparecendo, isso significa que o plugin de script de geometria não está habilitado.
Configuração do evento
Após criar a classe, você deve configurar o evento específico para preencher a malha dinâmica que usará para criar a ferramenta.
Para criar o evento:
- No Navegador de Conteúdo, clique duas vezes na classe de Blueprint.
- Abra o Gráfico de Eventos.
-
Clique com o botão direito no gráfico e digite "generated mesh" (malha gerada) para filtrar os nós disponíveis. Em seguida, selecione Event on Rebuild Generated Mesh. Esse evento é acionado sempre que você atualiza os parâmetros da malha dinâmica, causando a reconstrução da malha.
-
Promova a saída da malha de destino a uma variável local clicando com o botão direito no pin e selecionando Promote to Variable.
- Nomeie a variável como DynamicMesh, defina o tipo como Dynamic Mesh e mantenha-a privada. Essa variável representa a malha dinâmica que você edita.
Como compilar a geometria
Com a classe e o evento de Blueprint criados, você pode começar a adicionar funções de script de geometria. O objetivo deste guia é gerar formas de bloqueio que você possa transformar e recortar. Para isso, crie a malha que deseja editar.
Para criar uma malha:
- Arraste o pin de execução da variável DynamicMesh, pesquise e selecione o nó Append Box. Isso adiciona uma primitiva de caixa à malha dinâmica.
-
Conecte o pin de saída da variável DynamicMesh ao pin de entrada de Target Mesh.
Com esses primeiros nós, você criou uma malha procedural. Você pode testar compilando e arrastando o Blueprint para o nível. Para saber quais outras formas você pode criar instantaneamente, confira a seção Geração de primitivas do documento "Referência a script de geometria".
Como adicionar widget de transformação
Para poder ajustar dinamicamente a transformação da malha, você pode adicionar controles interativos.
Para adicionar controles interativos:
-
Crie uma variável global chamada BoxSize e defina o tipo como "Vector".
-
No painel Details dessa variável, habilite Instance Editable e Show 3D widget. Defina Default Value para 200, 200 e 200. A ativação do widget 3D cria um manipulador para controlar interativamente as transformações X, Y e Z.
- Arraste a variável e selecione Get BoxSize.
- Clique com o botão direito na variável e selecione Split Struct Pin. Os valores X, Y e Z da variável definirão as dimensões da caixa.
-
Conecte os valores X, Y e Z correspondentes aos valores de dimensão de Append Box.
- Compile (Ctrl + Alt) e Salve (Ctrl + S).
Agora você pode gerar uma malha cúbica e ajustar as dimensões dinamicamente. Cada ajuste feito com o widget gera uma malha dinâmica com o tamanho definido em vez do dimensionamento da malha.

Para que o widget apareça, você deve estar no Modo de Seleção.
Como editar com booleanos
As operações booleanas subtraem ou adicionam pares de malhas. São úteis para adicionar rapidamente efeitos de detalhe e deslocamento à malha. Para criar a segunda malha para a função booleana, aloque uma malha temporária de um conjunto de malhas. A malha temporária evita geometria desnecessária no editor, o que coloca menos pressão no processamento do computador.
Para criar uma operação booleana:
- Clique com o botão direito no gráfico e pesquise e selecione Get Compute Mesh Pool. Isso aloca uma malha temporária para realizar uma operação booleana.
- Fixe o pin de execução de Append Box em Get Compute Mesh Pool.
-
Arraste o pin Return Value e pesquise e selecione Request Mesh. Conecte os pins de execução.
- Arraste o pin Return Value e pesquise e selecione Append Cylinder. Esse nó adiciona uma malha de cilindro que você usará para subtrair da malha da caixa.
-
Promova a Target Mesh de saída a uma variável chamada BoolMesh. Defina o tipo como Dynamic Mesh e mantenha-o como privado.
- Arraste o pin de execução de BoolMesh, pesquise e selecione Apply Mesh Boolean**. Você usará esse nó para aplicar a operação booleana à malha.
- Arraste e conecte a variável DynamicMesh à entrada Target Mesh de Apply Mesh Boolean.
-
Conecte BoolMesh ao pin Tool Mesh de Apply Mesh Boolean. Tool Mesh representa a malha com a qual você deseja fazer o booleano. Esse parâmetro é o motivo pelo qual você adicionou o nó Append Cylinder.
- Defina tipo de operação no nó Apply Mesh Boolean para Subtract.
- Depois de aplicar as operações necessárias, devolva a malha temporária ao pool para que a memória possa ser reutilizada. Conecte o pin de execução de Apply Mesh Boolean a Release All Compute Meshes. Quando o evento for acionado, todas as malhas de computação alocadas no pool serão liberadas.
- Compile (Ctrl + Alt) e Salve (Ctrl + S).
Ao compilar e visualizar o Blueprint no editor de níveis, talvez você não veja o efeito booleano porque ele é muito pequeno. Para ver o efeito, você pode definir o tamanho da malha booleana de forma manual ou ajustá-la dinamicamente usando widgets.
Como adicionar widgets
Assim como você criou um widget para a primitiva de caixa, você pode fazer o mesmo para a malha booleana e a posição.
Para criar um widget:
-
No painel Variables, crie uma variável global para a posição da malha booleana, nomeie como BoolLocation e defina o tipo como Vector.
-
No painel Details, habilite Instance Editable e Show 3D widget.
-
Clique com o botão direito no pin Transform do nó Append Cylinder, selecione Split Struct Pin e conecte a variável BoolLocation a Transform Location.
- Crie outra variável global, nomeie-a BoolSize e defina o tipo como "Vector". Você pode usar isso para ajustar o tamanho da malha booleana.
- No painel Details, habilite Instance Editable e Show 3D widget. Depois, defina Default Value para 1, 1 e 5.
- Arraste a variável para o gráfico e selecione Get Bool Size.
- Clique com o botão direito no pin e selecione Split Struct Pin.
-
Conecte os pins Bool Size aos pins Transform Scale correspondentes do nó Append Cylinder.
- Compile (Ctrl + Alt) e Salve (Ctrl + S).
Agora você tem uma malha que pode se transformar dinamicamente em diferentes formas.

Função de incorporação de malha estática
Agora que você tem a malha gerada dinamicamente, pode aplicá-la a malhas estáticas existentes para um design de nível rápido. Para isso, crie uma função e a exponha ao painel Details do editor de nível.
Para controlar quando as malhas estáticas são atualizadas:
-
Crie uma função chamada Bake Static Mesh.
-
No painel Details da função, habilite Call in Editor para ativar o evento a partir do editor de níveis.
- Arraste o pin de execução da função, pesquise e selecione Get Dynamic Mesh. A função obtém a malha dinâmica em uso no momento.
-
Arraste o pin de execução de Get Dynamic Mesh, pesquise e selecione Copy Mesh to Static Mesh. Além disso, conecte o Return Value a From Dynamic Mesh. Quando a função é executada, a malha dinâmica é incorporada à malha estática selecionada.
- Para selecionar a malha estática que você deseja incorporar, exponha o parâmetro ao editor. Crie uma variável global chamada TargetMesh e defina o tipo como Static Mesh.
- Arraste a variável para o gráfico e selecione Get TargetMesh.
- Clique com o botão direito no pin da variável e selecione Convert to Validated Get. Essa conversão configura a função para executar o código somente se você tiver uma malha selecionada.
-
Conecte o pin Target Mesh a To Static Mesh Asset.
Incorpore o script final.
- Compile e Salve.
-
Um botão Bake to Static Mesh aparece no painelDetails do editor de níveis. Antes de usar o botão, atualize a malha de destino para a malha estática que deseja incorporar.
Como revisar os resultados finais
Com a função Bake Static Mesh e o código de malha procedural, você pode usar a malha dinâmica para atualizar as malhas estáticas no nível de forma contínua.
script de malha procedural final. Clique para expandir.
Agora é com você
Usando o que aprendeu, tente fazer os seguintes ajustes:
- Mudar a malha da caixa para uma esfera.
- Adicionar uma segunda malha booleana para maior controle da modelagem.
- Usar Create New Static Mesh Asset From Mesh para incorporar a malha dinâmica em uma nova malha estática em vez de usar uma existente.