Você pode estar familiarizado com jogos de ritmo como Dancing Line , Geometry Dash ou até Guitar Hero . Eles têm algo em comum: cada ação do jogo é sincronizada com a música. Meu objetivo é criar um jogo como o Geometry Dash, em que o jogador deve executar algumas ações no ritmo, enquanto o personagem rola automaticamente no nível. Eu tenho algumas perguntas sobre esse tipo de jogo:
- Preciso manter meu FPS constante, pois ele deve estar sempre sincronizado com a música?
- Como posso criar meus níveis com uma música em mente para garantir que ela seja sincronizada?
Estou trabalhando no Unity usando C #.
fonte
Como alternativa, se você estiver bem em não trabalhar do zero.
Já existem recursos prontos (em Extensões / Áudio do editor, como https://www.assetstore.unity3d.com/en/#!/content/54639 (pago) ou https://www.assetstore.unity3d.com/en / #! / content / 39835 (gratuito)) onde você pode sincronizar faixas de música para o evento. Nesse exemplo, a arma está disparando na batida da música.
Se você quiser aprender como eles funcionam, tente 1-2 dos gratuitos e consulte a fonte.
fonte
O Unity já dissocia a jogabilidade da taxa de quadros. Se você se lembrar de sempre usar
Time.deltaTime
as funções de atualização, a taxa de quadros real dos gráficos não deve afetar a velocidade do jogo. Portanto, quando você inicia o jogo e a faixa de áudio ao mesmo tempo, eles devem permanecer sincronizados.Em relação ao design de níveis em torno da música, há duas abordagens:
A abordagem processual. Use algoritmos de análise de áudio para gerar automaticamente níveis em torno das trilhas de áudio. O mais simples é procurar picos de volume. Isso já deve permitir que você identifique batidas de bateria em muitas músicas e crie obstáculos de acordo. Um passo adiante é detectar mudanças de volume separadamente em diferentes espectros de frequência. Isso torna a detecção de batidas mais confiável e permite gerar diferentes obstáculos para diferentes arremessos. Mas isso ainda está arranhando a superfície. A análise de áudio é um campo muito amplo e interessante. As pessoas escreveram muita literatura científica sobre isso.
A profundidade em que você precisa mergulhar nesse campo depende de sua ambição. Alguns jogos estão satisfeitos em apenas detectar as batidas e gerar aleatoriamente todo o restante do design de níveis ( Crypt of the Necrodancer ). Outros tentam colocar tantos aspectos do design de níveis sob o controle do áudio quanto possível ( Audiosurf ).
Muitos jogos de ritmo usam uma abordagem híbrida. Você gera um primeiro rascunho do nível usando um gerador e o ajusta manualmente para torná-lo mais jogável.
fonte
Time.time
.Muito comum é a abordagem para ter um "mapa de batidas". Qualquer tipo de dado que represente as batidas da música. Pode ser uma textura, arquivo de dados ou qualquer outra coisa que contenha essas informações. Na maioria das vezes, é criado manualmente para criar batidas e combinações diferentes, versões de velocidades para um mapa de áudio.
Porém, ele pode ser gerado procedimentalmente a partir de dados de arquivos de áudio.
Como obter velocidade para combinar com o "ponto de batida"? Quando gerar um objeto?
Speed = Distance / Time
.Distance =
Distância entre os pontos de criação do GameObject e do "beat point".Time =
A duração do áudio e o mapa de batida construído devem ser suficientes. Com essas informações, você pode analisar os dados do áudio / mapa para prever quando um objeto deve ser gerado para atingir o ponto exato. Agora tudo depende de quando você deseja gerar esse objeto, se você quer que seja muito rápido após a geração, então você gera mais tarde com grande velocidade. Se você deseja que ele esteja a uma velocidade normal - será necessário tempo para alcançar o player e o áudio precisa de tempo para tocar no momento certo.Você pode até gerar um novo mapa com carimbos de data / hora para gerar objetos de batida para determinado mapa de áudio. Você tem que fazer algumas previsões em algum momento para poder corresponder à batida, para o estilo mais popular, eu diria, prever
when
gerar o objeto para que ele se mova com certezaspeed
. Esses podem ser feitos em tempo de execução, ou lidos em alguns arquivos calculados anteriormente ou salvos na RAM ...Eu suponho que jogos como
Osu
esse não têm issoDistance
, eles apenas têm o tempo de círculos encolhendo, bpm ... Os mapas geralmente são feitos sob medida. Portanto, a abordagem para calcular recursos visuais depende do estilo do jogo que você está criando também.Então, para resumir tudo, os valores são interdependentes. Depende de quantas batidas você tem, da distância entre o ponto de reprodução e o jogador, e algumas vezes depende dos dados fornecidos [alguns jogos têm a velocidade de cada batida e sua aparência codificada em algum arquivo de dados que é criado manualmente]. Se você estiver fazendo isso de maneira processual, poderá calcular tudo basicamente usando dados de áudio.
fonte