Estou curioso para saber como controlar carros em um jogo de corrida.
Meu agente de IA deveria controlar seu carro com comandos como "acelerador em 0,35, volante em 0,5 à direita, freio em 0,0"? Ou devo pré-calcular uma curva que o carro adere, e visuais como as rodas dianteiras girando são apenas para fazer tudo parecer consistente? Ou existe alguma outra maneira?
game-design
ai
dargemir
fonte
fonte
Respostas:
Podemos dizer que em algum nível o jogo está seguindo um caminho pré-calculado. Já que as pistas do jogo de corrida são (geralmente) um caminho pré-calculado de qualquer maneira.
Mesmo se estivermos falando sobre gerar as faixas aleatoriamente, o jogo deve ter calculado a parte atual das faixas para o momento em que o carro chega lá.
Bem, isso foi fácil. Mais alguma coisa sobre isso?
Ambos, seguindo um caminho pré-calculado e controlando o carro sistematicamente, têm usos na indústria de jogos. A resposta é usar os dois, mais ou menos.
Primeiro, quero mencionar que "calcular uma curva" pode significar duas coisas:
Criando funções que produzirão a posição na curva, tendo como parâmetro a que distância você deseja consultar.
Criando um caminho, entendido como lista de pontos (ou instruções e outras informações de controle) a seguir.
O primeiro pode ser útil para previsão ou em algumas simulações físicas. No entanto, quando falamos em controlar um objeto, este último é a abordagem recomendada.
Nota: Para jogos mais antigos (década de 1980), os outros carros parecem mais obstáculos em movimento. Eles estavam lá para você evitá-los e superá-los. Nós não estamos falando sobre isso.
Seguindo um caminho pré-calculado: Isso é útil para cenas cinematográficas ou repetíveis. Por exemplo, no GTA San Andreas, as missões de perseguição, o alvo de perseguição e todos os carros seguem um caminho predefinido (isso garante que o alvo de perseguição possa evitar o tráfego ※). No entanto, assim que você os perturba, eles voltam ao controle da IA, nesse caso, a AI terá que encontrar o caminho para chegar onde deveria estar seguindo seu caminho regular.
※: De fato, foi pré-gravado. Gravar e reproduzir foi um dos novos recursos do mecanismo de jogo GTA SA.
Controlado pela AI:
A IA, na sua forma mais simples, é uma máquina de estado. Ele verifica em que estado está e executa alguma ação, dependendo disso. Vou me referir a essas combinações de estado e ação como comportamentos. As ações não precisam corresponder ao gamepad do jogador. Nem os comportamentos.
Para um jogo simples, você provavelmente precisará apenas de dois comportamentos notáveis: 1) se estiver nas pistas, siga a pista, evitando outros carros e obstáculos; e 2) se não estiver nas pistas, volte para as pistas.
Nesta fase, não está longe de seguir um caminho (as trilhas). No entanto, como as pistas não são realmente uma linha, não estamos falando sobre seguir um caminho, mas permanecer perto dele (evitando outros carros e quaisquer obstáculos). Isso significa que a IA precisa resolver "direção, frenagem e aceleração".
Para um jogo moderno, o carro também estará sujeito a simulação de física (para resolver colisões e manter o realismo). Por isso, a cada iteração do loop do jogo o carro será atualizado com base em sua velocidade e aceleração, e também serão aplicadas "direção, frenagem e aceleração" (ajustes na velocidade) para seguir o comportamento atual.
Também quero mencionar que os jogos modernos podem ter comportamentos mais complexos, por exemplo, a IA pode optar por bater em outro carro ou bloquear seu caminho. De fato, a IA pode até escolher qual aplicar com base em alguma forma de aprendizado de máquina, mas discordo.
Por fim, considere que também pode ser útil ter um controle mais simples para carros de IA fora da vista do jogador. Seja por desempenho ou por Rubber Banding (que, neste caso, mantém os carros da IA próximos ao jogador para manter a corrida interessante, pode ser considerado como a trapaça da IA quando você realmente não pode deixar para trás nenhum adversário).
Sobre a animação, geralmente não é uma boa ideia simular a física das rodas de forma independente. Se você fizer isso, isso adicionaria realismo ao jogo, mas custará desempenho. Normalmente, o jogo animará as rodas com base no comportamento, em vez de expressar o comportamento em termos de movimento das rodas e simular as consequências.
Obviamente, talvez seja necessário considerar mais o que quer que as rodas estejam ou não em contato com o solo. E talvez animando a suspensão.
fonte
Eu recomendo fortemente separar o modelo de estado / física do carro do controlador do carro e fazer com que o agente de IA e o controlador do jogador sejam dois tipos de controlador intercambiáveis, com comandos de alto nível, como os que você sugeriu na sua pergunta.
Isso tem vários efeitos interessantes:
Este é um caso particular de separação MVC , a propósito.
fonte