Criando minha própria câmera de morte

15

Eu pretendo criar meu próprio sistema de kill cam para um conjunto de ferramentas de sandbox. Depois de pensar na mecânica da câmera de matar, no entanto, estou bastante perdido. Estou tentando recriar os comumente vistos em jogos de deveres que mostram, do ponto de vista do assassino, a cena real do assassinato.

Meus pensamentos:

-Eu não consigo ficar na memória quando as pessoas matam outras porque eu não sabia quando começar o 'processo de gravação'. Existe uma maneira de eu determinar com precisão quando alguém está prestes a matar alguém.

-A minha única idéia real até agora é ter uma duplicata completa de tudo carregado para o lado, copiando todo o movimento do mundo original, mas com um atraso de 10 segundos. Dessa forma, todas as câmeras matariam 10 segundos e a câmera das pessoas seria movida para o segundo mundo do assassino.

Minhas perguntas:

Já existe uma maneira aceita de fazer isso? Alguém tem boas idéias para algo assim? Obrigado se puder!

Freesnöw
fonte

Respostas:

10

Armazene os últimos segundos de dados de movimento de objetos dinâmicos relevantes .

Esses dados devem estar completos o suficiente para que possam ser usados ​​para reconstruir uma cena de killcam, se necessário, mas incompletos o suficiente para permitir a recuperação e o armazenamento em intervalos suficientemente curtos.

Exemplos de coisas que você pode querer acompanhar:

  • Para que lado um jogador visível está se movendo / olhando
  • Se o assassino é ampliado no alcance da arma

Coisas que você provavelmente deseja otimizar:

  • Dados sobre jogadores que o assassino não pode ver
  • Saída de tela real de qualquer pessoa
Anko
fonte
Há um grande problema em sua resposta, normalmente você não pode prever a morte de ninguém e também não pode prever quem será o próximo assassino. portanto, com a otimização dos dados de alguns jogadores, você pode acabar perdendo a capacidade de reproduzir algumas mortes.
Ali1S232
2
@ Gajet Eu acho que, neste caso, ele pretende selecionar todos os objetos relevantes e apenas armazenar dados para eles posteriormente. Em outras palavras, você já gostaria de ter algum tipo de mecanismo de armazenamento / atualização para acompanhar as posições de tudo e de suas entidades, mas por um tempo limitado. Digamos, você só quer os últimos 10 segundos para uma câmera de matar. Você só precisa de uma estrutura de dados grande o suficiente para armazenar os últimos 10 segundos e qualquer coisa mais antiga que isso seja substituída no final, como em uma fila dupla.
27411 ChrisC
Apenas confirmando que a resposta do Ricer é o que eu quis dizer. De fato: quando não puder prever o futuro, prepare-se para isso. :)
Anko
11
É importante mencionar que os jogos online em tempo real nunca mostram aos jogadores o que realmente aconteceu; o jogo está sempre dando palpites sobre qual pode ser a verdade, mas devido a latências e outros problemas de rede, os jogos não descobrirão qual era a "verdade objetiva" até muito mais tarde - se é que isso aconteceria. Portanto, se você não tiver dados "kill cam" disponíveis para poder recriar o ponto de vista de outra pessoa, não se sinta totalmente mal por inventar dados plausíveis de kill cam nas situações em que você precisar.
Trevor Powell
0

Não faço ideia de como isso normalmente é implementado, mas você pode fazer com que cada marcador salve um clipe desde o momento em que é disparado até quando atinge um alvo. Se a filmagem for feita apenas com um hitcan, você poderá calcular se deseja ou não gerar a filmagem de kill cam no mesmo ciclo ao executar o hitscan.

RavensKrag
fonte
0

Você pode salvar a transformação de um objeto a cada par de segundos. Faça isso para todos os objetos dinâmicos aplicáveis. Escalonar o salvamento, de modo que cada quadro você esteja salvando apenas algumas matrizes. salve o tempo que quiser.

Durante a reprodução, você realmente usa essas transformações em um mecanismo de renderização para animar uma cena, interpolando entre transformações por tempo para cada quadro, conforme necessário.

Não é uma cópia exata, mas muito muito próxima e permite que você dê ao jogador a opção de controle da câmera durante a reprodução, para que ele possa escolher de onde visualizar a cena.

Steve H
fonte
há um problema em armazenar apenas matrizes de transformação, e não salvar mais nada! por exemplo, se você salvar apenas matrizes de transformação para jogadores, as animações podem dar errado. Você não poderá ver quanto dano o inimigo levou antes de matá-lo e quando ele disparou sua arma. há uma longa lista de detalhes que você sente falta ao usar seu método e pode pensar facilmente sobre eles.
Ali1S232
Releia, você salva transformações para todos os objetos dinâmicos apropriados, não apenas matrizes para jogadores. Também é fácil o suficiente para salvar dados de saúde ou de ponto de vida e outros itens também. A questão é que economizar muitos dados consome recursos de tempo do jogo (ruins). Você economiza o mínimo possível e deixa seu mecanismo de renderização fazer o máximo possível de trabalho pesado por interpolação durante a reprodução. É um compromisso, mas o que não é?
Steve H
0

você pode implementar algum recurso de repetição no seu jogo. Usando a função de repetição, killcam é apenas uma repetição sendo reproduzida a partir de um horário específico do jogo e do ponto de vista de algum jogador. depois, você pode salvar replays e permitir que outras pessoas analisem os jogos depois que terminarem.

Também sua idéia de executar um mesmo jogo com entradas com atraso de 10 segundos é uma boa abordagem se o seu jogo não consumir alto poder computacional.

Ali1S232
fonte
0

Que tal agora...

Registre apenas quando houver a possibilidade de matar.

Pense nisso da perspectiva de um AIM-BOT. Ele só mirará / disparará quando matar for uma possibilidade. Portanto, você só deve registrar quando um inimigo estiver dentro do alcance visível / destrutível.

waterwizard11
fonte
E em situações que envolvem fotografar através de um objeto? O lançamento de raios com tanta certeza será mais intensivo em CPU do que algumas das outras idéias declaradas. Boa ideia, porém, eu poderia considerar isso como parte de uma solução.
Freesnöw 28/11
0

Defina um raio ao redor do player e, se outro jogador entrar no raio, ele iniciará a gravação de tela para as duas pessoas. Você então espera para ver se alguém é morto. Nesse caso, você encontra o assassino, pega a gravação e retrocede a quantidade de tempo decorrido desde o assassinato, mais a duração que você deseja que o vídeo seja, retroceda e reproduza-o para quem foi morto. Se ninguém morrer e mais ninguém estiver no raio ao redor do personagem, apague ou pare a gravação. Se o assassino for ampliado em uma mira, faça um raio para onde ele está mirando e crie outro raio de disparo. Se alguém estiver nele, ele registra a tela de quem estiver no raio em que o personagem que está mirando está mirando e do personagem que está mirando. Se alguém morrer de acordo com o objetivo do personagem, você gasta o tempo decorrido desde a matança, mais o comprimento que você deseja que a câmera de matança seja, e você retrocede e joga isso para quem foi morto. Se diminuir o zoom, pare a gravação. Este é um conceito, por isso não tentei.

Ethan Smith
fonte