Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
4 participantes
Página 1 de 1
Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Bom dia amigos!
Estou desenvolvendo um protótipo de IA para um jogo de futebol inspirado nos vídeos da RoboCup. As coisas funcionam dentro do esperado, mas me deparei com um problema:
Eu quero ter uma "previsão", não precisa ser perfeita, de onde a bola vai cair quando adiciono uma força ao seu corpo rígido. Isso vai ser necessário para passes em profundidade onde o jogador que recebe o passe, deverá correr em direção ao destino da bola e não para a bola em si.
Vi que a Unity utiliza physx para física e os cálculos envolvem matemática pesada pra isso.
A pergunta é: Alguém conhece uma maneira simplificada/alternativa pra esse problema?
Abraços!
Estou desenvolvendo um protótipo de IA para um jogo de futebol inspirado nos vídeos da RoboCup. As coisas funcionam dentro do esperado, mas me deparei com um problema:
Eu quero ter uma "previsão", não precisa ser perfeita, de onde a bola vai cair quando adiciono uma força ao seu corpo rígido. Isso vai ser necessário para passes em profundidade onde o jogador que recebe o passe, deverá correr em direção ao destino da bola e não para a bola em si.
Vi que a Unity utiliza physx para física e os cálculos envolvem matemática pesada pra isso.
A pergunta é: Alguém conhece uma maneira simplificada/alternativa pra esse problema?
Abraços!
Última edição por artplayer em Seg Jan 30, 2017 8:54 am, editado 1 vez(es)
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Bem, a melhor forma que eu encontrei foi adicionar uma força na direção do destino:
Então eu devo fazer com que o jogador que vai receber o passe, perceba pra onde o jogador que possui a bola está olhando e correr nesta direção antes de o passe ser efetuado e informar ao jogador que está com a posse de bola que está indo pra lá.
Pra facilitar as coisas, eu dividi o campo em quadrantes e utilizo o conceito de Flocking ( Isso daria um ótimo tutorial! Acho que não tem material em português sobre o assunto. )
Sucesso!
- Código:
Bola.GetComponent<Rigidbody> ().AddForce ((Destino.transform.position - Bola.transform.position).normalized * Forca * Time.smoothDeltaTime, ForceMode.Impulse);
Então eu devo fazer com que o jogador que vai receber o passe, perceba pra onde o jogador que possui a bola está olhando e correr nesta direção antes de o passe ser efetuado e informar ao jogador que está com a posse de bola que está indo pra lá.
Pra facilitar as coisas, eu dividi o campo em quadrantes e utilizo o conceito de Flocking ( Isso daria um ótimo tutorial! Acho que não tem material em português sobre o assunto. )
Sucesso!
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Caramba Amigo...to Bem Curioso pra ver Como esta Ficando!
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Cara, para fazer uma previsão eh complicado... você pode utilizar de física básica para gerar uma equação, baseado nos -9.8 unidades/segundo que a Unity trabalha.
você pega o vetor de direção*a força aplicada e adiciona a cada segundo a aceleração de -9.8. mas vai ser um cálculo ferrado.
para 2D eu faria de boa(eu acho), mas para 3D eh chatinho. Mas com a lógica de física básica, da para gerar vetores e interligá-los com LineRenderer
você pega o vetor de direção*a força aplicada e adiciona a cada segundo a aceleração de -9.8. mas vai ser um cálculo ferrado.
para 2D eu faria de boa(eu acho), mas para 3D eh chatinho. Mas com a lógica de física básica, da para gerar vetores e interligá-los com LineRenderer
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Eu desisti de fazer a previsão. Pra oque eu preciso é mais fácil eu dizer ao jogador que vai receber o passe pra onde ele deve correr ou o jogador que vai receber a bola pedir um passe para uma determinada posição e correr pra lá.MarcosSchultz escreveu:Cara, para fazer uma previsão eh complicado... você pode utilizar de física básica para gerar uma equação, baseado nos -9.8 unidades/segundo que a Unity trabalha.
você pega o vetor de direção*a força aplicada e adiciona a cada segundo a aceleração de -9.8. mas vai ser um cálculo ferrado.
para 2D eu faria de boa(eu acho), mas para 3D eh chatinho. Mas com a lógica de física básica, da para gerar vetores e interligá-los com LineRenderer
Meu problema agora é manter a bola em posse do jogador enquanto ele corre. Não estou achando uma maneira "realista" disso acontecer somente aplicando força na bola. Ela acaba saindo da direção do jogador. Até consegui usando vector3.lerp e força, mas não ficou muito bom.
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Sim. Infelizmente o mesmo problema. Tenho certeza que a minha lógica está uma bosta.MarcosSchultz escreveu:Já tentou o AddForceAtPosition?
eu tenho um GameObject vazio um pouco a frente do personagem (Objetivo da Bola) e um BoxCollider(trigger) largo a frente dos pés do personagem ( perímetro onde a bola deverá se manter enquanto com a posse ). Em OnTriggerStay eu uso um addforce para a direção do objetivo da bola. Até funciona, mas não é muito realista.
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Não da pra fazer uma Animação da Bola no Pé dele..e quando For Chutar ou alguem tirar das um Instantiate?
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
E se você der um comando que irá parentear a bola com o jogador assim que ele tocar nela? e utilizar o comando de AddForceAtPosition para fazer o efeito dele kicando a bola pra frente enquanto corre.
lantreco63- Iniciante
- PONTOS : 2973
REPUTAÇÃO : 6
Idade : 33
Áreas de atuação : Modelagem, Programação, Design.
Respeito as regras :
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
artplayer escreveu:Sim. Infelizmente o mesmo problema. Tenho certeza que a minha lógica está uma bosta.MarcosSchultz escreveu:Já tentou o AddForceAtPosition?
eu tenho um GameObject vazio um pouco a frente do personagem (Objetivo da Bola) e um BoxCollider(trigger) largo a frente dos pés do personagem ( perímetro onde a bola deverá se manter enquanto com a posse ). Em OnTriggerStay eu uso um addforce para a direção do objetivo da bola. Até funciona, mas não é muito realista.
Pra deixar "realista", a bola tem que se manter livre... do contrário, vai ser realmente ruim..
Até pensei em ter um pivot filiado ao jogador, que fica na frente dos pés dele, e a bola fica seguindo este pivot com Vector3.Lerp... mas também vai ficar bem surrealista.
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Vou gravar um vídeo mostrando como a coisa deve se parecer.
Dá pra ver bem como deve ser o movimento de posse de bola na arena de treino do Fifa, mas pelo que eu vi, a coisa é um pouco mais complicada.
Talvez tenha que ter que ter diversas animações e usar IK.
Em situações em que o jogador está indo em uma direção e vira pra direção contrária bruscamente por exemplo, a bola continua no lugar e o jogador se move pro lado oposto de forma que fique de frente para a bola mas na direção oposta. Vou gravar o vídeo e edito a mensagem.
Edit: O movimento deve se parecer mais ou menos com o do vídeo abaixo:
Dá pra ver bem como deve ser o movimento de posse de bola na arena de treino do Fifa, mas pelo que eu vi, a coisa é um pouco mais complicada.
Talvez tenha que ter que ter diversas animações e usar IK.
Em situações em que o jogador está indo em uma direção e vira pra direção contrária bruscamente por exemplo, a bola continua no lugar e o jogador se move pro lado oposto de forma que fique de frente para a bola mas na direção oposta. Vou gravar o vídeo e edito a mensagem.
Edit: O movimento deve se parecer mais ou menos com o do vídeo abaixo:
Última edição por artplayer em Sex Fev 03, 2017 10:03 am, editado 1 vez(es) (Motivo da edição : Inserção do vídeo)
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Sim, creio então que terá que usar IK para ficar realista e funcionar da maneira que deseja.
lantreco63- Iniciante
- PONTOS : 2973
REPUTAÇÃO : 6
Idade : 33
Áreas de atuação : Modelagem, Programação, Design.
Respeito as regras :
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
O IK eu usaria só quando a bola chegasse bem perto do pé. Eu ainda não consegui perceber no vídeo se a força é adicionada somente quando o pé bate na bola ou se é adicionada uma força via script mesmo. E fazer o jogador girar daquela forma ali... Fiquei confuso kkklantreco63 escreveu:Sim, creio então que terá que usar IK para ficar realista e funcionar da maneira que deseja.
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
O movimento e direção só são adicionados a bola depois do input
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Revivendo o Tópico...nao sei se ainda esta precisando desse Sistema de previsão mas Achei um e Testei acho que é Exatamente oque vc Procura
https://www.assetstore.unity3d.com/en/#!/content/84341
da uma Olhada vale a Pena é Free
https://www.assetstore.unity3d.com/en/#!/content/84341
da uma Olhada vale a Pena é Free
Re: Previsão de destino com Rigidbody.AddForce (Jogo de Futebol)
Baixando pra dar uma estudada no script de cálculo, valeu mesmo!
Tópicos semelhantes
» Com AddForce o RigidBody não Gira?
» Jogo de futebol em 2D
» Jogo de futebol em 2D
» [DUVIDA] Jogo de futebol
» (Duvida) Jogo de futebol
» Jogo de futebol em 2D
» Jogo de futebol em 2D
» [DUVIDA] Jogo de futebol
» (Duvida) Jogo de futebol
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos