Qual é a melhor prática para ter inimigos NPC se escondendo em um jogo de FPS?

8

Minha pergunta é sobre a estrutura de dados (e a maneira lógica de usar essa estrutura) por trás desse tipo de comportamento do inimigo NPC: Como ele calcula o local onde pode se esconder quando o jogador está atirando nele?

Pode ser em um modo de exibição do tipo FPS ou "jogo de tabuleiro" ...

Pierre Watelet
fonte

Respostas:

9

Você tem três opções principais:

Opção 1: (Mais robusta, mas mais intensiva da CPU)

Em tempo real, calcule as áreas dos cantos amplas o suficiente para o NPC se esconder e que não sejam expostas ao jogador. Escolha o mais próximo para o jogador se esconder.

Isso funcionará em qualquer nível agradável e em níveis com geometria que muda durante o jogo. Mas levará mais tempo para trabalhar de forma consistente e usará a maioria dos recursos da CPU durante o jogo.

Opção 2: (Economize tempo do designer de nível, acerto mínimo em tempo real)

Crie uma ferramenta offline que faça o teste de canto e coloque nós no seu nível para todas as possíveis áreas de cobertura. Os LDs podem então ajustar esses nós ou remover aqueles que não são apropriados.

Durante o jogo, encontre o nó válido mais próximo.

Isso é bom, pois o seu roteamento de localização de esquina não precisa ser 100% preciso, pois os LDs podem detectar alguns nós ruins aqui e ali. Não é possível responder às alterações na geometria, a menos que você comece a ficar esperto ao anexá-las a objetos ou ativá-las / desativá-las.

Opção 3: (Força Bruta, acerto mínimo em tempo real)

Faça com que os LDs coloquem manualmente todos os nós de cobertura e escolha o nó válido mais próximo durante o jogo.

Se você tiver muitos níveis ou grandes níveis, espere que os LDs se queixem.

wkerslake
fonte
3

Eu acho que a melhor maneira de fazer isso seria configurar caixas manualmente nas áreas em que você deseja que os NPCs se protejam.

Tenha uma variável para "medo" ou alguma outra métrica que você desejar, quando um limite for atingido, o NPC deve se mover para a caixa mais próxima que estiver fora da linha de visão dos jogadores.

Você pode imaginar uma maneira dinâmica de fazer os inimigos se esconderem atrás de qualquer objeto, mas mais vezes do que não podem gerar algumas posições estranhas e ilógicas de cobertura.

AttackingHobo
fonte
1

Há uma descrição de como a IA do killzone pesquisou o espaço de posição para obter uma boa posição aqui (PDF). Você pode alterar a função de avaliação para aumentar o valor de uma posição de cobertura se a AI for atingida ou danificada fortemente. Assim, a IA que não é disparada correria um pouco mais de risco para atingir o alvo.

Você também pode adicionar a solução da AttackingHobbo, aumentando o interesse da capa dependendo do fator de medo (ou seja, 0: sou invencível / 1: cuido / 5, por favor, pare)

Saudações

PATRY Guillaume
fonte
1

Depende do estilo do jogo. É bastante comum permitir que os projetistas de nível coloquem objetos de capa, que podem ser um volume, uma forma representando um objeto de cobertura ou um nó. Isso é mais trabalhoso para os LDs, mas oferece muito mais controle, o que geralmente é desejado em um jogo com scripts rigorosos.

Para jogos em mundo aberto, você precisa de um sistema automático de detecção de capa. Usamos um que detectou cobertura em tempo de execução no Battlefield: Bad Company (1 e 2) para poder invalidar e re-detectar na destruição ambiental.

fatia de limão
fonte