NPCs em videogames · quatro mundos jogáveis

NPCs em Videogames: Como Funcionam os Personagens Não Jogáveis (Com Demos Jogáveis)

Crie seu próprio jogo de NPC

O que é um NPC em um videogame? Veja como os NPCs são criados, como se comportam e jogue quatro jogos 3D reais de navegador nos quais personagens não jogáveis se movem, falam e reagem.

✦Jogo
Criar: jogo de NPC

Um NPC em um videogame é um personagem não jogável: uma entidade que não é controlada diretamente pelo jogador, mas que ocupa espaço, mantém estado e responde a condições do mundo. O termo é deliberadamente amplo, e essa amplitude causa a maior parte da confusão. Um comerciante com uma rotina, um companheiro de esquadrão que segue você por um corredor e um mercador errante que repete uma única frase são todos NPCs, mas não são construídos da mesma forma nem custam o mesmo para rodar.

Esta página explica o que um NPC realmente é, como ele é construído e como diferenciá-lo de um gatilho programado que apenas parece vivo. Quatro mundos jogáveis deste site são usados como exemplos práticos — Agent Sprite Forge, The Cyclops' Island, Mini World e o próprio construtor de jogos 3D — para que você possa se aproximar de um NPC e observar seu comportamento em vez de apenas ler sobre ele.

Resposta rápida: o que conta como NPC em um videogame

Um NPC é qualquer personagem do mundo do jogo que não está sob controle direto do jogador. Ele tem uma posição, um estado e pelo menos um comportamento que dispara sem o jogador apertar um botão. Se você remover o jogador da cena e o personagem continuar fazendo algo — percorrer uma rota, abrir uma porta, reagir a um evento próximo —, ele é um NPC.

A linha que separa um personagem de um mecanismo é a posse de estado. Um personagem possui variáveis que persistem entre quadros: vida atual, alvo atual, índice de patrulha atual, nó de diálogo atual. Um mecanismo é, na prática, sem estado — ele dispara uma vez quando uma condição é satisfeita e depois acaba. Uma placa de pressão que abre um portão é um mecanismo. Um guarda que reage à abertura do portão, lembra que você estava ali e muda sua rota é um NPC. A diferença não está na fidelidade visual. Está em saber se algo sobrevive ao quadro em que o evento aconteceu.

Uma breve história do NPC nos videogames

As aventuras de texto do fim dos anos 1970 e dos anos 1980 tratavam os NPCs como alvos do analisador de comandos. Um personagem existia apenas como um substantivo nomeado que o analisador reconhecia, mais um pequeno bloco de sinalizadores. O ladrão das primeiras aventuras de texto roubava um item se você estivesse na mesma sala e ele ainda não o tivesse feito — isso é um NPC de duas variáveis: presença e um sinalizador de já-roubou. Sem busca de caminho, sem animação, sem agendamento. O comportamento estava no sinalizador, não no personagem.

Os NPCs da era dos sprites adicionaram animação e colisão, mas mantiveram o comportamento enxuto. Um morador percorria um circuito fixo de dois pontos, tocava uma animação de espera quando o jogador estava dentro de um raio e abria uma caixa de diálogo ao contato. A mudança técnica importante foi que o NPC passou a ter uma posição no mundo da física, então precisava ser barato. Com dezenas deles na tela ao mesmo tempo em hardware de 8 e 16 bits, cada NPC recebia alguns bytes de estado e executava, por quadro, uma verificação não mais complexa que uma comparação de distância.

Os NPCs guiados por rotina chegaram quando os orçamentos de memória e de CPU permitiram que um personagem existisse independentemente da localização do jogador. Um comerciante com um horário de funcionamento, um ponto de referência de casa e uma rota de caminhada pode estar em outro lugar quando você chega, e essa ausência é perceptível ao jogador. A implementação é um relógio mais uma tabela de consulta: na hora 21 do jogo, vá para o ponto de referência de casa; às 08, vá para a loja. O jogador nunca vê a tabela, apenas a consequência.

Os NPCs gerados são a era atual. Em vez de escrever uma frase por estado, você escreve uma descrição de personagem e deixa um modelo produzir diálogos, falas curtas ou comportamento em tempo de execução. O trade-off já não é o armazenamento, mas o determinismo: uma frase gerada não pode ser totalmente pré-visualizada, então você precisa de limites em torno de tom, comprimento e do que o NPC pode referenciar. No construtor de jogos 3D, os prompts de NPC são restritos a uma descrição e a um pequeno conjunto de comportamentos exatamente por esse motivo.

Como os NPCs modernos são construídos

Todo NPC é uma pilha de cinco partes que cooperam: estado, navegação, animação, diálogo e percepção. O estado são os dados que o NPC possui — vida, alvo, índice de patrulha, nó de diálogo, nível de alerta. A navegação é como ele se move entre pontos. A animação é como o movimento e os momentos de espera são exibidos. O diálogo é o texto e a voz produzidos em resposta a condições. A percepção é a entrada que informa ao NPC que algo mudou, normalmente uma verificação de distância, um raio de linha de visão ou a sobreposição de um volume de gatilho.

Em um projeto típico, essas partes ficam em lugares separados. O estado é um script ou componente na entidade do NPC — em termos de Unity, um MonoBehaviour; no Godot, um script de Node; em uma build de navegador com Three.js, um objeto simples anexado à malha. A navegação é dados de pontos de referência ou uma navmesh. A animação é uma máquina de estados com clipes nomeados, como idle, walk e attack. O diálogo é um arquivo de dados, muitas vezes um pequeno grafo de nós ou uma tabela indexada por estado. A percepção costuma ser uma forma de colisão e uma verificação por quadro.

O modo de falha mais comum é o estado e a animação se descolarem. O NPC está em estado de perseguição, mas continua tocando o clipe de espera, então ele desliza na sua direção sem mover as pernas. A correção não é mais animação; é um único lugar no código que grava o estado atual e um único lugar que o lê para selecionar o clipe. Quando esses dois ficam em scripts diferentes, você tem o deslizamento. Quando são a mesma função, não tem.

A segunda falha mais comum é uma navegação que não corresponde ao nível. Uma rota de patrulha criada para um layout antigo vai mandar um NPC contra uma parede ou para fora de uma borda depois que a geometria mudar. Em builds de navegador, a abordagem robusta mais barata é manter os pontos de patrulha como objetos vazios nomeados e resolvê-los novamente ao carregar, para que mover uma parede não deixe a rota órfã.

A percepção é onde os NPCs ficam caros. Um raycast por NPC por quadro é aceitável para alguns personagens e um desperdício para centenas. As otimizações usuais são uma grade espacial compartilhada, um intervalo de verificação e uma rejeição antecipada por distância antes que qualquer raycast seja executado. Se um NPC está a 40 metros de distância e seu raio de percepção é 8, o raycast nunca deveria acontecer.

Onde cada parte fica em uma cena

Estado: na própria entidade do NPC. Mantenha-o pequeno — um punhado de números e uma string para o nó de diálogo atual. Se você precisar de mais do que isso, divida o NPC em dois personagens.

Navegação: como uma lista de pontos no espaço do mundo armazenada junto com a cena, não embutida no modelo. Animação: como clipes nomeados no rig, selecionados por um único switch de estado. Diálogo: em um arquivo de dados separado, para que os roteiristas possam editá-lo sem mexer no código. Percepção: como um volume de gatilho mais uma verificação de distância, com o raycast como último passo, não o primeiro.

1

01

Coloque o modelo do NPC na cena e anexe um componente de estado com campos para estado atual, alvo e índice de patrulha.

2

02

Adicione três ou quatro objetos de ponto de referência e dê nomes a eles para que a rota sobreviva a edições no nível.

3

03

Monte uma máquina de estados de animação com pelo menos idle e walk, e conduza-a apenas a partir do valor do estado atual.

4

04

Adicione um volume de gatilho de percepção dimensionado pelo raio de percepção do NPC.

5

05

Escreva o diálogo como uma pequena tabela indexada por estado, com uma frase padrão para estados sem correspondência.

6

06

Resolva novamente os pontos de referência e as chaves de diálogo ao carregar, depois teste movendo uma parede e confirmando que a patrulha ainda funciona.

Quatro mundos jogáveis, quatro tipos de NPC

A maneira mais clara de entender o comportamento de um NPC é ficar ao lado de um e mudar o que ele consegue ver. Estes quatro mundos no Neta Studio demonstram, cada um, um padrão de comportamento diferente. Abra-os, entre no alcance de percepção do NPC, depois saia e observe o que muda.

O Agent Sprite Forge executa NPCs definidos por uma breve descrição de personagem mais um pequeno conjunto de estados. Aproxime-se de um e sua resposta é gerada a partir dessa descrição, restrita aos estados que o mundo expõe. O teste interessante é a repetição: aproxime-se do mesmo NPC duas vezes e compare o quanto a segunda resposta varia. Essa variação é do modelo, não do mundo — a máquina de estados é fixa.

The Cyclops' Island usa um NPC grande com um padrão de perseguir e procurar. Quando o jogador está dentro do raio de percepção, o ciclope persegue; quando o jogador quebra a linha de visão, ele procura a última posição conhecida e depois volta a uma rota de patrulha. O passo de procura é o que faz com que ele seja lido como um personagem, e não como um míssil teleguiado — ele age com base em informação desatualizada.

Mini World coloca vários NPCs pequenos em circuitos curtos com avisos de interação. O comportamento deles é deliberadamente enxuto: andar, pausar, responder quando o jogador está a menos de um metro. O valor aqui é a quantidade. Você pode observar cinco ou seis ao mesmo tempo e ver como um circuito de NPC convincente é, na verdade, barato.

O construtor de jogos 3D é onde você posiciona e configura NPCs diretamente. Cada NPC recebe uma descrição, uma rota de patrulha e um conjunto de estados. Construa algo pequeno — uma sala, um NPC, uma rota — e teste os limites: diminua o raio de percepção até o NPC nunca notar você, depois aumente-o até ele nunca parar de notar você. A largura da faixa útil entre esses dois extremos é o problema de ajuste, e ele existe em toda engine.

Uma observação sobre desempenho. Em uma build de navegador, o custo dos NPCs é dominado por verificações de percepção e animação, não pela geometria. Dez NPCs com raycasts por quadro custarão mais do que dez NPCs com verificações de intervalo compartilhadas, mesmo que os modelos de alto detalhe estejam nos que usam verificação por intervalo. Se uma cena engasga quando os NPCs estão ativos, olhe primeiro para o laço de percepção.

  • Agent Sprite ForgeNPCs guiados por descrição, com respostas geradas e restritas. Use para ver como um pequeno conjunto de estados mais um prompt de personagem produz diálogos que se mantêm no tema.
  • The Cyclops' IslandUm único NPC grande com estados de perseguição, procura e retorno à patrulha. Use para estudar como agir com base em informação desatualizada é lido como inteligência.
  • Mini WorldVários NPCs leves em circuitos curtos com avisos de proximidade. Use para ver quão pouco comportamento é necessário para que um personagem seja percebido como presente.
  • 3D game builderPosicione NPCs, defina descrições, desenhe rotas de patrulha e ajuste os raios de percepção. Use para encontrar a faixa de funcionamento entre um NPC que nunca nota você e outro que nunca para.
Little Ritual — NPCs de missão em um pequeno planeta.

Por que o comportamento, e não os gráficos, vende um NPC

Um personagem de baixo detalhe que percorre uma rota, para em uma porta e está em outro lugar quando você volta é lido como vivo. Um personagem de alto detalhe que fica parado em um ponto e repete uma frase é lido como mobília. O jogador não está avaliando polígonos. O jogador está construindo um modelo do que o personagem quer, e esse modelo vem do tempo e da posição, não da malha.

O mecanismo são as expectativas. Se um personagem está no mercado de manhã e em casa à noite, o jogador forma uma hipótese — este personagem tem uma rotina — e a hipótese se confirma na segunda visita. Essa confirmação é todo o efeito. Custa um relógio e uma tabela de consulta. Não pode ser substituída por adicionar detalhe a uma estátua, porque a estátua nunca contradiz nem confirma nada.

É por isso que NPCs guiados por rotina de jogos muito mais antigos ainda são comentados, enquanto NPCs estáticos visualmente superiores são esquecidos. O comportamento é o conteúdo. O modelo é a embalagem. Se você está construindo em um editor de navegador e tem tempo limitado, invista-o em transições de estado e rotas de patrulha antes de investi-lo em texturas.

Como diferenciar um NPC de um gatilho programado

Tanto os NPCs quanto os gatilhos respondem ao jogador, e é por isso que eles se confundem em revisões de design. A distinção está em saber se algo persiste após o evento. Use os sinais abaixo como uma lista de verificação quando estiver decidindo qual dos dois você está observando.

A tabela não é um teste de pureza. Muitos jogos usam um gatilho para iniciar o comportamento de um NPC — um volume de gatilho que muda um guarda de patrulha para alerta. Isso é normal e correto. O problema é quando um gatilho é apresentado ao jogador como um personagem: ele dispara uma vez, o personagem nunca mais reconhece nada, e a ilusão desmorona no segundo encontro.

SinalÉ um NPCÉ um gatilho programado
RepeteO mesmo personagem ainda responde no segundo encontroDispara uma vez e nunca mais
EstadoPossui variáveis que sobrevivem ao quadro — nível de alerta, índice de patrulhaNão tem estado além de um sinalizador de disparado/não disparado
PosiçãoMove-se pelo mundo entre encontrosFica onde foi colocado
Escopo de reaçãoReage de forma diferente conforme o contexto (dia, vida, distância)Mesma resposta independentemente do contexto
FalhaPode ficar preso, perder um alvo ou traçar uma rota ruimNão pode falhar — ou disparou, ou não disparou
CustoOrçamento de percepção e animação por quadroDesprezível após o evento
DiálogoSeleciona uma frase de um conjunto indexado por estadoToca uma única frase fixa
The Cyclops' Island — um NPC inimigo com colisão.
Ashenmere — uma IA adversária que você consegue ler enquanto duela.
Mini World — percorra um mundo e conheça os personagens colocados nele.

Entre no mundo ao qual ele pertence

Um sprite é um personagem sem um lugar para ficar. O último passo é o que ninguém mais oferece: pegue a folha que você acabou de criar e coloque-a em um mundo pelo qual alguém possa caminhar — uma pequena ilha, um planeta, uma esquina chuvosa. Todo mundo deste site foi feito a partir de uma única descrição escrita e publicado como uma página que você pode jogar.

Voltar ao Construtor de Jogos 3D

Todos os 31 mundos, jogos e cenas 3D finalizados ficam em uma única página — todos jogáveis.

Plataforma: Neta StudioPágina: NPCs em Videogames: Como Funcionam os Personagens Não Jogáveis (Com Demos Jogáveis)Leia a seguir: /explore/guide/what-is-a-non-player-character · /explore/guide/what-are-npcs · /explore/guide/npc-behavior
×