Variáveis, tipos de dados e estruturas de controle em Blueprints

Capítulo 5

Tempo estimado de leitura: 8 minutos

+ Exercício

O que são variáveis em Blueprints

Variáveis são “caixas” onde você guarda dados para usar na lógica do Blueprint. Em gameplay, elas servem para parametrizar comportamento (valores que mudam por instância, por item, por personagem) sem precisar copiar e colar nós ou criar Blueprints diferentes para cada variação.

Em Blueprints, uma variável sempre tem um tipo (por exemplo, Bool, Int, Float). O tipo define que tipo de valor pode ser armazenado e quais operações fazem sentido (somar, comparar, concatenar texto, etc.).

Tipos fundamentais e quando usar

Bool

Bool armazena true ou false. Use para estados e condições: “está ativo?”, “já foi coletado?”, “pode interagir?”.

  • Exemplos: bIsCollected, bIsUnlocked, bCanRespawn
  • Comum em Branch (if/else) e Gates.

Int

Int é um número inteiro (sem casas decimais). Use para contagens, índices e quantidades discretas.

  • Exemplos: Ammo, ScoreToGive, CurrentWave
  • Bom para loops (ForLoop) e acesso a Arrays por índice.

Float

Float é um número com casas decimais. Use para tempo, velocidade, multiplicadores e valores contínuos.

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

  • Exemplos: RespawnDelay, DamageMultiplier, PickupRadius
  • Ideal para interpolação (Lerp), timers e cálculos de física.

String

String é texto livre. Use para mensagens, logs e conteúdo que precisa ser exibido como texto “humano”.

  • Exemplos: ItemDescription, DebugMessage
  • Cuidado: Strings são mais “pesadas” para comparar e manipular; evite usar como identificador interno.

Name

Name é um identificador otimizado (comparação mais eficiente que String). Use para tags, chaves, IDs e nomes de sockets/anim notifies quando você precisa comparar valores frequentemente.

  • Exemplos: ItemID, SocketName, PickupType
  • Boa prática: use Name como “chave” em Maps e para checagens rápidas.

Vector

Vector representa uma posição ou direção em 3D (X, Y, Z). Use para localização, deslocamento, direção de tiro, força.

  • Exemplos: TargetLocation, KnockbackDirection
  • Operações comuns: soma/subtração, normalização, distância.

Rotator

Rotator representa rotação (Pitch, Yaw, Roll). Use para orientar atores, mirar, alinhar objetos.

  • Exemplos: DesiredRotation, LookAtRotation
  • Operações comuns: combinar rotações, interpolar rotação.

Transform

Transform agrupa Location (Vector), Rotation (Rotator) e Scale (Vector). Use quando você precisa transportar/armazenar “pose completa” de um objeto.

  • Exemplos: SpawnTransform, SavedTransform
  • Útil para spawnar itens no mundo e salvar/restaurar posição.

Estruturas de controle ligadas a tipos (condições e seleção)

Branch (if/else) com Bool

O nó Branch recebe um Bool e decide qual caminho executar. É a base para “se isso, faça aquilo”.

  • Exemplo: se bIsCollected for true, não permitir coletar novamente.

Switch (seleção por valor)

Quando você tem múltiplos casos, use Switch em vez de vários Branch encadeados.

  • Switch on Int: útil para estados numerados (0,1,2...).
  • Switch on Name: útil para tipos/IDs (ex.: PickupType = Health, Ammo, Score).
  • Switch on String: possível, mas prefira Name para identificadores internos.

Loops com Int e Arrays

Loops como ForLoop e ForEachLoop são comuns ao trabalhar com listas (Arrays). Use ForEach quando você quer percorrer todos os elementos sem se preocupar com índice manual.

Arrays e Maps: coleções básicas

Array (lista ordenada)

Array é uma lista de elementos do mesmo tipo, acessados por índice (0, 1, 2...). Use quando a ordem importa ou quando você precisa percorrer todos os itens.

  • Quando usar: inventário simples, lista de pontos de patrulha, lista de sons possíveis.
  • Operações comuns: Add, Remove, Contains, Get (por índice), Length.
  • Armadilha comum: acessar índice inválido. Use IsValidIndex antes de Get quando houver risco.

Map (dicionário chave → valor)

Map armazena pares Key e Value. Use quando você quer buscar rapidamente um valor a partir de uma chave (por exemplo, um Name).

  • Quando usar: tabela simples de recompensas por tipo, custo por item, configuração por ID.
  • Exemplo: Map<Name, Int> onde a chave é ItemID e o valor é ScoreToGive.
  • Operações comuns: Add, Remove, Find, Contains, Keys, Values.

Como escolher: Array vs Map

Você precisa...UsePor quê
Manter ordem e percorrer tudoArrayÍndices e iteração simples
Buscar por uma chave (ID, Name)MapConsulta direta por chave
Selecionar aleatório de uma listaArrayEscolha por índice aleatório
Configuração por tipo sem vários BranchMapChave → valor evita encadeamento

Criação de variáveis: valores padrão, instância e escopo

Valores padrão (Defaults)

Ao criar uma variável em um Blueprint, você pode definir um Default Value. Esse valor é usado como base para todas as instâncias, a menos que seja sobrescrito no nível (quando permitido) ou passado no spawn (quando exposto).

  • Exemplo: ScoreToGive default = 100.
  • Exemplo: bDestroyOnPickup default = true.

Instância (Instance Editable)

Quando você marca uma variável como Instance Editable, cada instância do ator colocada no nível pode ter seu próprio valor no painel de detalhes.

  • Use quando: você quer reutilizar o mesmo Blueprint para vários itens com valores diferentes (pontos, som, cor, raio).
  • Exemplo: três pickups no mapa, todos do mesmo Blueprint, mas com ScoreToGive diferente.

Expose on Spawn

Quando você marca uma variável como Expose on Spawn, ela aparece como pino no nó SpawnActor, permitindo configurar o valor no momento da criação.

  • Use quando: o ator é criado dinamicamente e você quer parametrizar sem precisar setar depois.
  • Exemplo: spawner cria um pickup e define ScoreToGive e PickupVFX no spawn.

Público/privado (acesso e organização)

Em Blueprints, o “escopo” costuma ser tratado como editável/publicamente acessível versus interno. Regra prática:

  • Variáveis de configuração (tuning): geralmente Instance Editable e organizadas por categoria.
  • Variáveis de estado interno: não editáveis, usadas apenas pela lógica (ex.: bWasPickedUp, LastInteractor).

Isso reduz erros: designers ajustam apenas o que faz sentido ajustar, e o restante fica protegido de mudanças acidentais.

Categorias

Use Category para agrupar variáveis no painel de detalhes. Isso melhora muito a usabilidade quando o Blueprint cresce.

  • Exemplos de categorias: Pickup|Config, Pickup|FX, Pickup|Audio, Debug.

Exercício guiado: parametrizando um item coletável sem duplicar lógica

Objetivo: criar um único Blueprint de item que pode dar pontos diferentes e tocar efeitos diferentes (som e partícula) apenas mudando variáveis, sem criar Blueprints duplicados.

1) Criar as variáveis do item

No Blueprint do item (por exemplo, um ator de pickup), crie as variáveis abaixo:

  • ScoreToGive (Int) — categoria Pickup|ConfigInstance Editable e (opcional) Expose on Spawn — default: 100
  • PickupSFX (SoundBase / SoundCue) — categoria Pickup|AudioInstance Editable e (opcional) Expose on Spawn — default: vazio (None) ou um som padrão
  • PickupVFX (ParticleSystem ou NiagaraSystem, conforme seu projeto) — categoria Pickup|FXInstance Editable e (opcional) Expose on Spawn — default: vazio (None) ou um efeito padrão
  • bDestroyOnPickup (Bool) — categoria Pickup|ConfigInstance Editable — default: true
  • bWasPickedUp (Bool) — categoria Pickup|Statenão editável — default: false

Dica de nomenclatura: prefixe Bool com b para ficar claro em nós e detalhes.

2) Usar as variáveis para controlar o comportamento

Na lógica de coleta (por exemplo, quando o jogador interage/encosta), use as variáveis para executar ações parametrizadas:

  • Evitar coleta dupla: faça um Branch com bWasPickedUp. Se true, não faz nada. Se false, continua e seta bWasPickedUp = true.
  • Dar pontos: use ScoreToGive como entrada do seu nó/função que adiciona pontuação (por exemplo, chamar uma função no jogador ou em um componente de score). O importante é: o valor vem da variável, não de um literal fixo.
  • Tocar som (opcional): antes de tocar, cheque se PickupSFX não é None. Em seguida, use um nó de tocar som em localização (a localização pode ser a do ator).
  • Spawn de VFX (opcional): cheque se PickupVFX não é None e então spawn o efeito na localização do item.
  • Destruir ou desativar: se bDestroyOnPickup for true, destrua o ator; caso contrário, você pode ocultar e desabilitar colisão (mantendo o ator para respawn futuro).

3) Configurar instâncias no nível (sem duplicar Blueprint)

Coloque 3 instâncias do mesmo item no nível e ajuste apenas as variáveis no painel de detalhes:

  • Item A: ScoreToGive = 50, PickupSFX = SFX_Coin, PickupVFX = VFX_SparkleSmall
  • Item B: ScoreToGive = 200, PickupSFX = SFX_Gem, PickupVFX = VFX_SparkleBig
  • Item C: ScoreToGive = 500, PickupSFX = SFX_Rare, PickupVFX = VFX_Burst

Resultado esperado: todos usam a mesma lógica, mas cada instância se comporta de acordo com seus valores configurados.

4) Variante: configurar via SpawnActor (Expose on Spawn)

Se o item for criado por um spawner, marque ScoreToGive, PickupSFX e PickupVFX como Expose on Spawn. No Blueprint do spawner:

  • Use SpawnActor do item.
  • Preencha os pinos expostos com valores diferentes dependendo do contexto (por exemplo, dificuldade, wave, tipo de baú).

Isso evita a necessidade de “Set ScoreToGive” depois do spawn e reduz risco de o item existir por um frame com valores incorretos.

Mini-desafio: usando Array e Map para variações

Array de sons para variedade

Crie PickupSFXList (Array de SoundBase). Ao coletar, se o Array tiver elementos, escolha um índice aleatório e toque o som escolhido. Use isso quando você quer variedade sem criar múltiplas variáveis.

Map de pontuação por tipo

Crie ScoreByType (Map<Name, Int>) e PickupType (Name). Ao coletar, faça Find no Map usando PickupType e use o valor retornado como pontuação. Use isso quando você quer centralizar configuração por tipo e evitar Switch/Branch em cadeia.

Exemplo de chaves (Name): Coin, Gem, Relic  |  Valores (Int): 50, 200, 500

Agora responda o exercício sobre o conteúdo:

Em um Blueprint de pickup, você quer configurar a pontuação, som e VFX no momento em que o ator é criado por um spawner, evitando precisar definir esses valores depois do spawn. Qual configuração de variáveis atende melhor a esse objetivo?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Expose on Spawn adiciona pinos no SpawnActor, permitindo definir valores no instante em que o ator é criado, evitando a necessidade de setar depois e reduzindo risco de valores incorretos por um frame.

Próximo capitúlo

Funções, Macros e reutilização de lógica em Blueprints na Unreal Engine

Arrow Right Icon
Capa do Ebook gratuito Unreal Engine para Iniciantes: Fundamentos de Blueprints e Lógica de Gameplay
29%

Unreal Engine para Iniciantes: Fundamentos de Blueprints e Lógica de Gameplay

Novo curso

17 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.