Como garantir que objetos giratórios atinjam um alvo com a extremidade certa?


25

Estou trabalhando em uma arma do tipo faca de arremesso, onde um jogador livre mira e depois joga uma faca. A faca gira no ar e, em colisão, para de girar e se aproxima do objeto com o qual colidiu. A fiação é realizada através de animação, enquanto o caminho da faca é tratado pela física.

Um problema que estou enfrentando é como garantir que, quando a faca colidir com um inimigo, ela esteja voltada para eles. No momento, o que está acontecendo às vezes é que a faca é incorporada primeiro a uma manivela inimiga. O que é obviamente irrealista. Ao mesmo tempo, acho que seria bastante irracional para a faca "acertar" o inimigo apenas se colidisse primeiro com a lâmina, já que a taxa na qual a faca gira está fora do controle do jogador.

Eu tenho assistido muitas filmagens lentas de câmera de morte de armas semelhantes e cada vez que a arma é lançada, ela gira no ar e sempre magicamente termina com a lâmina apontando para o alvo. Para um jogo em que a distância de arremesso será consistente, isso é bastante simples de fazer. Mas não sei bem como prever isso, pois há muitos fatores imprevisíveis envolvidos, por exemplo. direção da faca, rotação da faca, posição do inimigo, distância do inimigo etc. Se possível, eu preferiria não ter que usar lógica de previsão complexa, pois o jogo será para dispositivos finais bastante baixos. Existe uma maneira de "fumaça e espelhos" para resolver isso?

Exemplo: https://youtu.be/0fav8lFpBko?t=42s


15
A faca sempre atingindo a lâmina de um alvo primeiro também não é realista, principalmente quando falamos de um alvo em movimento.
Theraot

11
Dependendo do sabor do jogo, há vários estilos de atirar facas que não giram a lâmina. Geralmente eles estão usando facas projetadas especificamente para voar de maneira estável.
Perkins

se o centro de massa da faca estiver significativamente mais próximo da extremidade da alça, em vez da extremidade da lâmina, e a velocidade de rotação da faca for muito maior do que a velocidade de deslocamento, ela poderá realmente atingir o alvo com a lâmina sempre. que seria uma faca muito estranho, porém, e uma criatura muito estranha que pode jogá-lo assim
Sarge Borsch

2
Esta questão é bastante proeminente que há um artigo TVTropes nisso: The Blade sempre cai Pointy End In
Mason Wheeler

Eu também gosto da distinção feita na pergunta. Se você mudou a rotação para também ser manipulada pelo mecanismo de física, pode ter informações suficientes para fazer um cálculo no momento da colisão para ver se a ponta da faca estava bem ou não voltada para o alvo. Ou então, ou mantenha a animação, e apenas faça um pré-cozimento dos valores em que as animações da faca estão apontando para a frente e compare o quadro de animação atual para ver se está dentro desse intervalo ou não.
Pysis

Respostas:


35

Falsificá-lo

Olhe o vídeo que você vinculou, assista em câmera lenta ... eh, o que é isso? A câmera pula no final e a faca já está no capacete do alvo.

Basta fingir. Quando a distância da faca ao alvo for pequena, pule o corte magicamente para a faca no alvo.

Editar: você pode verificar se ele atingirá um alvo usando a previsão complicada e depois fingir que atingiu a lâmina primeiro, depois mostrar uma animação em que o alvo não se move e a faca o mata.


A previsão complicada

já que a taxa em que a faca gira está fora do controle do jogador.

Isso está certo. Está além do controle do jogador. No entanto, não está além do seu controle ...

Se você puder calcular a distância que a faca deve percorrer, poderá fazer a taxa de rotação de modo que a faca atinja a lâmina primeiro.

Agora, não faz sentido fazer essa previsão no meio do voo, porque a faca precisaria se ajustar se um obstáculo se interpusesse. Portanto, você faria isso quando jogasse.

O fato de você ter que seguir um caminho parabólico para realizar o teste torna mais complicado do que um simples lançamento de raios. Eu sugeriria obter a equação para o movimento parabólico que corresponde ao arremesso da faca e avaliar em intervalos determinados.

Também é possível encontrar a distância dos obstáculos até a parábola, localizando o ponto mais próximo da parábola até a posição do obstáculo e, em seguida, faça uma verificação de colisão com esse ponto.

Depois de saber quanto a faca precisa percorrer, é possível dividi-la em um número inteiro de rotações, para que ela atinja a lâmina primeiro. Editar: ou um número inteiro 0,5, dependendo de como você joga.

Obviamente, os obstáculos teriam se movido no momento em que a faca chegasse lá…


Seja realista

Você não fará a faca acertar a lâmina primeiro 100% das vezes, principalmente com alvos em movimento. Apenas aceite isso, uma faca de arremesso não é uma arma confiável. Portanto, tenha a alternativa de fazê-lo saltar quando atingir o punho primeiro. Você pode verificar se ele atingiu a alça primeiro, verificando sua orientação e comparando-a com a direção do ponto de colisão.


11
Ah, eu não vi o salto, como inteligente, mas tão simples. É muito óbvio quando eu assisti quadro a quadro, como você sugeriu.
FrontEnd

14

Se você sabe com antecedência onde a faca vai pousar - como nas filmagens de kill cam, que são definitivamente produzidas depois do fato - apenas calcule a velocidade de rotação correta com base na distância do vôo e no número de rotações desejadas. As facas de arremesso deixam o arremessador primeiro, então ele precisa girar N + 0,5 rotações completas 1 , onde N é geralmente pelo menos 1, mas pode ser mais baseado no nível de habilidade do arremessador ou em quão legal você quer que ele pareça: mais giros = mais legal.

Caso contrário, não há problema em trapacear, corrigindo a rotação ao acertar, e talvez oculte-a com um respingo de sangue. Como um mágico, se você fizer isso rápido o suficiente, o jogador não perceberá.

Obviamente, nada disso é realista. Na vida real, o arremesso de facas é realmente difícil e requer muita prática se você deseja que a faca caia primeiro na lâmina. O arremessador precisa estar totalmente ciente da distância e alterar seu arremesso de acordo, caso contrário, a faca atingirá o punho primeiro.

1 : Existem alguns estilos em que a faca também penetra primeiro.


4
+1: respingos de sangue. Bom, truques de mágica. Edit: ou uma nuvem de poeira para a edição não gore.
Theraot

2
@ Theraot e / ou faça a taxa de giro rápido o suficiente para que o espectador não consiga acompanhar de que maneira está apontado.
Perkins

14
  1. Calcule a distância da linha reta até o destino.

  2. Cada quadro define o ângulo da faca como 2PI * (restanteStraightLineDistance) / (originalStraightLineDistance) * DesiredNumRotations.

A taxa de rotação varia ligeiramente se você não mover a faca em linha reta, mas ninguém nunca notará.

Se você não pré-determinar o alvo (ou seja, você está jogando e usando a física para ver o que ele acerta), precisará falsificar isso, mas pode usar o mesmo princípio de olhar para qual alvo ele provavelmente atingirá e ajustando a rotação para estar correta para esse alvo.


4

Facas de arremesso reais são projetadas para ter uma chance muito alta de atingir a lâmina primeiro. Projete suas facas de acordo.

Coleção de facas de arremesso da Wikipedia : Coleção de facas de arremesso da wikipedia

Você quer o centro de massa e, portanto, o centro de rotação, o mais longe possível da ponta da lâmina . Isso aumentará as chances de a lâmina girar para a posição de bater antes que o final da manopla chegue lá.

A lâmina é tipicamente longa e fina, projetando-se o mais longe possível do centro de massa e adicionando o mínimo de massa possível. Além disso, há um contrapeso esférico ou em forma de disco no final da alça, que curiosamente não vejo em nenhuma das facas da imagem da Wikipedia.

A faca é lançada segurando a ponta da lâmina e arqueando a alça na direção do arremesso.


2

Para uma maneira de "fumaça e espelhos", você pode ter o centro de rotação da faca (ou seja, o centro de massa) próximo ao cabo (ou seja, parte não pontiaguda). Dessa forma, se a velocidade de rotação for alta o suficiente em comparação com a velocidade da faca, pode-se garantir que a ponta da lâmina colidirá com o alvo e não com qualquer outra parte.

Há algum cálculo para obter qual é a velocidade mínima de rotação, considerando o centro de massa e as dimensões, mas deve ser direta. Observe também que isso não implica nada sobre o ângulo do acerto.


1

Atirador de facas perfeito?

No momento, você diz que está girando a faca através da animação. Qual parâmetro você está usando para controlar o ângulo? Número do quadro? Hora do jogo? Escalado por uma taxa de rotação arbitrária?

Se você usasse o parâmetro (distância movida) / (distância total ao alvo), com a escala apropriada de pi e (número de voltas + 0,5), a faca sempre chegaria magicamente primeiro ao ponto.


A primeira parte desta pergunta parece pedir esclarecimentos. Provavelmente deve ser feito como comentários sobre a questão. Você poderia elaborar seu método proposto para chegar magicamente ao ponto primeiro? Por exemplo, você diz "com o dimensionamento apropriado por pi"; qual escala? É justo supor que, se o usuário precisar perguntar, ele pode não entender qual seria o dimensionamento apropriado.
Gnemlock

O @TimB fez um trabalho melhor ao explicá-lo, mas a solução proposta por Neil é uma boa abordagem. Modifique a velocidade da animação da sua faca giratória para que, quando atingir o alvo, a faca esteja na posição "a ponta pontiaguda vai para o outro homem". Isso é muito mais fácil (programar, AND computacionalmente) do que calcular trajetórias parabólicas envolvendo alvos em movimento, etc. Quanto ao "dimensionamento apropriado pelo PI" que provavelmente seria apenas 2, dado que number_of_revolutions é outra variável na pseudoequação de Neil. Se for animação de quadro-chave, basta redimensionar seu índice e esquecer o pi.
AC
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.