Estou planejando o desenvolvimento de um jogo no Unity3D e tentando chegar a um acordo com o que o mecanismo já forneceu e com o que devo me codificar.
O jogo em si será um jogo de ritmo, o que significa sincronizar eventos gráficos e de áudio para que eles sempre joguem quando deveriam. O que estou procurando evitar é um cenário potencial de atraso, em que o áudio ou os gráficos começam a progredir mais rapidamente que o outro.
Quando discutimos esse tipo de sistema de coordenação em minha aula de design de jogos na universidade, meu professor chamou esse tipo de design de classe "Linha do tempo". A ideia é que você pode instanciar um ou mais deles para progredir em taxas diferentes, agendar coisas para acontecer no futuro e sincronizar eventos periódicos. No entanto, chamar isso de classe "Linha do tempo" parece ter sido limitado ao meu professor, como pesquisar se uma determinada API apresenta a funcionalidade "Linha do tempo" foi um esforço infrutífero.
Existe algum nome mais comum para esse tipo de funcionalidade? O Unity possui algum método preexistente para coordenar o agendamento de eventos como esse ou esse é o tipo de coisa que precisa ser incorporada ao mecanismo? E se assim for, eu gostaria de ser apontado para alguns tutoriais!
fonte
Respostas:
Embora essa funcionalidade não esteja disponível no Unity, uma implementação básica dessa linha do tempo não deve ser muito difícil de fazer.
Aqui está como eu faria isso:
timeline.AddEvent(0.25f, MyCallback)
.A cada
Update
classe, a classe da linha do tempo:float
) pelo tempo decorridoSe você precisar de algum tipo de retrocesso ou reprodução funcionalidade , seria óbvio remover todos os eventos da fila (o que significa que você precisaria adicioná-los novamente quando rebobinar). Em vez disso, você também pode usar uma matriz que armazena seus eventos . Um evento consistiria em um
Time
eCallback
. Você precisaria manter sua matriz classificada porTime
.Em vez de remover os itens da matriz, você acompanharia o índice de matriz atual e, a cada atualização, buscasse com antecedência esse índice e executaria todos os retornos de chamada
Playhead >= Time
enquanto aumentava o índice de acordo.A implementação de uma velocidade de reprodução mais rápida funciona com ambas as implementações e seria tão simples quanto:
fonte
Não, o Unity3D não possui essa API pronta para uso.
No entanto, ele suporta corotinas e eu sugiro que você as examine. As corotinas geralmente facilitam a programação e a sincronização de eventos.
fonte
Não tenho certeza se isso é novo desde as respostas em 2012, mas o Unity realmente tem suporte para o controle da linha do tempo por meio do Editor de animação (legado) .
Embora esse recurso seja destinado principalmente à animação de parâmetros de objetos com curvas, ele inclui a capacidade de disparar scripts nos Eventos de Animação . Esses scripts podem direcionar seus gráficos e áudio.
fonte