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
fonte
Respostas:
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
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.
fonte
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.
fonte
Calcule a distância da linha reta até o destino.
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.
fonte
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 :
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.
fonte
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.
fonte
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.
fonte