Objetos mais inteligentes, heróis mais burros e com fome

Nessas últimas semanas fiz algumas revoluções no meu código, muita coisa foi descartada, outras adicionadas e algumas foram apenas refeitas. Uma das novidades foi dar status aos heróis, com fome, sono, diversão, sujeira e medo. Para implementar cada um desses status utilizei exatamente o método deste blog (Sério, vão ver esse blog quando tiverem um tempinho que ele responde duas perguntas que todo programador já fez sobre The Sims e Spore). É bem simples de implementar e combina bem com o que estava pensando sobre os status e resolve a implementação da tomada de decisão "Qual ação um herói deveria fazer?". Já que pra isso é só verificar a que tem maior impacto positivo na soma final dos status.

Junto com essa implementação dos status veio uma grande alteração, originalmente planejava utilizar máquinas de estado pra definir qual seria a próxima ação assim como a sequência de ações. O problema que essa máquina de estados cresce muito rapidamente, dificultando a manutenção e pequenas alterações, assim como tem obriga a verificar a todo instante se a ação é válida. Para solucionar esse problema emprestei outra solução utilizada em The Sims: Smart Objects. A arquitetura de Smart Objects coloca toda a inteligência nos objectos e deixa os agentes "burros". A idéia é que toda a sequência de ações seja conhecida pelo objeto e o agente só execute as animações corretas. Nestes links [1], [2] e [3] temos os principais sites que utilizei de referência para a implementação. Mas o melhor é este aqui que contém o código feito pelo mestre Will Wright, está em C e isso pode ser uma barreira para quem não conhece a linguagem, mas vale a pena dar uma lida, nem que seja por cima. Outra referência legal que encontrei pelo caminho é essa palestra da GDC que detalha como são feitas ações concorrentes no The Sims 4. Essa palestra é muito legal e mostra como essa área de IA ainda não está totalmente "resolvida" e tem ainda muita coisa que pode ser feito, pesquisado ou ainda criado.



Mudando totalmente de assunto, estou tendo alguns problemas com o desempenho do jogo. Em uma rápida busca dentro do código, utilizando o profiler da Unity, descobri que o problema está sendo o path finding. Usar Smart Objects melhorou bastante o desempenho, mas vou ter que voltar para estudar algoritmos de path finding. Espero cobrir um novo algoritmo de path finding nas próximas postagens.
Compartilhar no Google Plus

Autor: Pâmela de Assis Beltrani

É Bacharel em Ciência da Computação pela PUCPR e Mestre pela UFPR. Também é especialista em Desenvolvimento de Jogos Digitais pela PUCPR.
    Blogger Comment
    Facebook Comment

0 comentários:

Postar um comentário