FMOD Studio Unity Integration: Criação de eventos de Áudio no Unity utilizando o FMOD Studio

May 21, 2017 | Autor: Vicente Reis | Categoria: Video Game Audio and Music
Share Embed


Descrição do Produto

FMOD Studio Unity Integration: Criação de eventos de Áudio no Unity utilizando o FMOD Studio. João Vitor dos Santos Honorato1, Vicente Reis de Souza Farias2 12

Universidade Federal da Bahia (UFBA)

{[email protected], [email protected]} Abstract. In this tutorial you'll see how the middleware FMOD Studio relates to the Unity game engine in the audio implementation process. Through the build of a demonstration project, all the process from creating the audio events logic structure to the integration through code in the engine will be object to this lesson, explaining every element of the middleware and its integration API. Resumo. Este tutorial demonstra como se dá a relação entre o middleware FMOD Studio e o motor de jogo Unity no processo de implementação de áudio. Através da contrução de um projeto demonstrativo, todo o processo desde a criação da estrutura lógica dos eventos de áudio até a sua integração via código no motor será abordado, esclarecendo diversos elementos do middleware e sua API de integração 1. FMOD Studio O FMOD Studio é uma ferramenta que permite que o sound designer crie eventos de áudio complexos para um jogo eletrônico sem a necessidade de utilizar linguagens de programação, tendo total controle da mixagem e da forma como os eventos de áudio irão acontecer. O uso dessa ferramenta facilita o trabalho de programação na implementação de áudio e torna a relação entre programador e sound designer mais eficaz. A interface é semelhante à de um DAW (Digital Audio Workstation. Ex: Pro Tools, Cubase, Live Ableton), com uma timeline e pistas que tornam o processo um pouco mais intuitivo para aqueles que já estão habituados com essas ferramentas de áudio. Link para os arquivos do tutorial: https://goo.gl/nL8NFM 2. Download e instalação Vá até a página http://www.fmod.org/download e escolha a opção condizente com seu sistema operacional e realize a instalação seguindo os passos necessários. 3. FMOD - Conhecendo a interface Para que este tutorial seja bem aproveitado, precisamos conhecer a interface do programa e nomear regiões dessa interface, o que torna o fluxo de trabalho dentro do software mais eficiente, uma vez que será rápido localizar cada região tomando como base os nomes que adotamos aqui. Usaremos aqui nomenclaturas em inglês, conforme se apresentam no manual do FMOD Studio. Nossa intenção nesta etapa é determinar de forma geral quais são as áreas principais dentro da interface do programa, focando naquelas que serão mais relevantes para a execução desse tutorial. A leitura do manual do software dará uma visão mais detalhada de cada elemento dentro do programa, e nós a recomendamos como forma de aprofundamento no conteúdo estudado.

3.1. Menu Bar Nessa região temos os itens de menu que dão acesso às ferramentas e configurações do software. É a partir do Menu Bar que se torna possível o salvamento do projeto e onde é gerada a build (entraremos em detalhes mais adiante). 3.2. Event Browser Aqui serão criados e listados os eventos de áudio, pastas e subpastas para organização dos mesmos. É a partir daqui que podemos associar um evento a um banco de áudio. 3.3. Editor Essa região é onde iremos criar a estrutura dos eventos, a lógica e seus parâmetros. Aqui é onde serão criadas as pistas de áudio necessárias para a elaboração dos eventos, onde serão inseridos os módulos de som, automações e a criação da estrutura lógica dos eventos. Além de oferecer ferramentas de escuta como os botões de play e stop. 3.4. 3D Preview É uma ferramenta de audição onde é possível simular a posição e orientação do listener (O objeto que “escuta” os áudios dentro do jogo). O centro do círculo representa o listener e o círculo em volta o espaço ao redor. O círculo com a seta no centro determina a posição do emitter (objeto que emite o evento dentro do jogo). Clicando e arrastando, é possível mudar a posição do emitter, usando o scroll do mouse é possível mudar a sua direção e ao segurar control é possível mudar a posição de altura do emitter. Um duplo clique retorna todas as configurações aos padrões iniciais.

3.5. Properties Possui três sessões: 1) Tags - servem para ajudar a encontrar eventos, criando marcações para eles; 2) User Properties - São variáveis customizáveis que podem ser usadas dentro do código do jogo; 3) Notes Servem para criar anotações sobre o evento, isso é extremamente útil na comunicação entre os sound designer e o programador, que acessarão o mesmo projeto. 3.6. Deck Exibe propriedades da pista de áudio ou dos módulos de som a depender do que esteja selecionado, caso não haja nada selecionado ele exibira as propriedades gerais do evento. 4. Eventos Um evento no FMOD Studio está diretamente associado a um evento dentro do jogo. O evento não é apenas um som, mas um conjunto de sons, com uma estrutura lógica e condicional, nos casos em que se aplicam. Por exemplo: Em nossa demonstração, quando o jogador entra na área verde do mapa, a música de fundo muda. Então, nós criaremos um evento para controlar a música de acordo com essas situações dentro do jogo. Logo, o evento “música” irá controlar tudo que deve acontecer com a música do jogo. 4.1. Evento Música - Montagem de música adaptativa O conceito de áudio dinâmico se baseia na interferência do jogador ou do ambiente na estrutura do áudio, ou seja, este não é linear, se modifica a depender das situações do jogo, por mudanças ambientais ou ações do jogador. No nosso exemplo temos uma área neutra que chamaremos de Neutra e duas área que são as áreas de Gelo e Fogo. A música irá variar a depender do local no qual o jogador se encontre, ou seja, teremos três trilhas, uma para cada ambiente. No FMOD Studio nós podemos criar toda a lógica dessas transições, criar fades, atrasos e outras ações que convenham, sem que o programador interfira nesse processo. 4.1.1. Importando arquivos Vamos seguir os passos para importar os arquivos que vamos usar: 1 - Crie um evento chamado musica clicando com o botão direito no Event Browser e em seguida New Event. 2 - Abra a pasta de áudio do FMOD Studio clicando no Menu Bar em Window e em seguida Audio Bin (Ou utilize o atalho ctrl+3) e crie uma pasta chamada arquivosMusica clicando com o botão direito dentro da janela e selecionando New Folder. 3 - Importe os áudios referentes à música que se encontram na pasta Música do tutorial (neutra.wav, gelo.wav, fogo.wav) clicando em File na janela Audio Bin e em seguida em Import Audio Files (ctrl+shift+i), e arreste os arquivos importados para dentro da pasta criada. Uma vez que tenhamos nossos arquivos importados, vamos começar a estruturar nosso evento. É importante que tenhamos definido o que queremos fazer, como dito acima, vamos ter uma música para cada área, logo, precisamos controlar essas transições em nosso evento. Vamos criar uma transição com crossfade entre a Neutra e as demais. Ou seja, quando o jogador entrar na área de Gelo ou Fogo, a música da Neutra irá diminuir de volume e as das respectivas áreas, aumentar e o inverso acontecerá quando o jogador sair dessa área e voltar para a principal. Caso o jogador saia da área de Gelo para a de Fogo e vice-versa, a transição será feita usando quantização e, nesse caso, não haverá o efeito de crossfade, vamos definir que a música irá mudar de uma região para outra dentro do tempo da música, ou seja, não interromperemos a música em qualquer ponto, mas sim no início de um intervalo de tempo definido. Então, precisaremos em nosso evento de: 1 - Criar as pistas de áudio necessárias; 2 - Indicação do tempo da música em BPM (Batidas por minuto) e métrica da música (em nosso exemplo, 120BPM, 4/4); 3 - Sound Modules; 4 - Marcações que definam cada região do evento;

5 - Definição de regiões de loop; 6 - Indicadores de transição; 7 - Um parâmetro que controle as transições; 8 - Automações de volume para as transições que usam crossfade e quantização das demais transições. 4.1.2. Criando pistas A primeira coisa que vamos fazer é criar as pistas de áudio do evento. Vamos criar 3 pistas, uma para cada música, Neutra, Gelo e Fogo. Vamos criar pistas separadas pois vamos fazê-lo por automação de volume, o que nos dá mais controle sobre o evento e simplifica a nossa estrutura.

Crie as pistas clicando com o botão direito sobre qualquer uma das pistas existentes (Audio 1 ou Master) e selecione a opção Add Audio Track. Repita o processo. Ao final teremos 3 pistas, além da pista Master. Ao final, dê um duplo clique sobre o nome das pistas e renomeie, sendo a primeira Neutra, a segunda Gelo e a terceira Fogo. 4.1.3. Tempo mark Vamos criar a indicação do andamento e métrica da música criando um Tempo Mark na região Logic Tracks. Quando criamos uma dessas marcações de tempo, nossa timeline passa a ser medida por número de compassos ao invés de segundos, e o tempo que o cursor levará para percorrer um compasso é definido pelo BPM. A lógica de um evento de música inicia no momento da composição, a música deve ser criada tendo em vista como ela irá funcionar no jogo, o que será de grande importância na estrutura do evento. Crie um Tempo Mark clicando com o botão direito em Logic Tracks e selecione a opção Add Tempo Mark. Clique sobre a marcação e arraste para o início da timeline.

4.1.4. Sound Modules Os módulos de som são a forma como o arquivo de áudio é executado dentro do evento; cada um deles funcionará de maneira diferente. Eles são representados por dois componentes, o Sound Module no Deck, e a sua Trigger Region, na timeline. O FMOD Studio possui diversos tipos de módulos de som, descreveremos aqueles que serão utilizados neste tutorial na medida em que o utilizemos. O nosso evento musica utilizará o Single Module. Esse Sound Module comporta um único arquivo de som que pode ser tocado em modo normal ou em loop. Quando no modo normal, o som é tocado de acordo com a posição do cursor sobre a waveform, quando em loop, o módulo se torna independente da timeline, uma vez que, independente do tamanho do Trigger Region, o som será tocado em loop enquanto o cursor passar pela região do módulo. 1 - Clique com o botão direito dentro da pista de áudio Neutra, na região da timeline, e selecione a opção Add Single Sound, dê um duplo clique sobre o nome do módulo para renomeá-lo. Repita esse processo para as outras pistas. 2 - Adicione o arquivo de som correspondente a cada módulo abrindo a janela Audio Bin (ctrl+3), e arrastando os arquivo da pasta arquivosMusica para o Sound Module no Deck, onde está escrito “Drop audio file here”.

3 - Ainda no Deck, clique na opção de loop do módulo.

4 - Dê um duplo clique sobre o nome Sound em cada Trigger Region e renomeie de acordo com os nomes das partes da música. 5 - Clique com o botão direito sobre cada Trigger Region e selecione a opção Set Color e dê para cada cores diferentes. 6 - Posicione o Trigger Region da Pista Neutra no início da timeline, no caso, no início do compasso 1, clicando e arrastando. Em seguida, passe o mouse por cima do final da região até que o cursor se torne uma seta dupla horizontal, clique e arraste até o compasso 11.

7 - Para as demais Trigger Regions: clique em na região de Gelo com o botão direito e selecione a opção Move To, desmarque a opção do cadeado e determine Start: 7 e End: 13. Para a região de Fogo repita a operação utilizando os valores para Start: 12 e End: 20.

4.1.5 Marcações Vamos criar agora marcações na nossa timeline que definam o começo de cada região, e onde acontecerão os fades. Para criar uma marcação, clique com o botão direito em Logic Tracks e escolha a opção Add Marker. Crie os seguintes Markers (Para renomeá-los basta dar um duplo clique sobre a marcação uma vez que for criada) e os posicione usando Move To: 1 - Neutra. Start: 0. 2 - Neutra to Gelo. Start: 7. 3 - Gelo. Start: 8. 4 - Gelo to Neutra. Start: 12 5 - Neutra to Fogo. Start: 14. 6 - Fogo. Start: 15. 7 - Fogo to Neutra. Start: 19; 4.1.6. Loop Regions Para que o cursor da timeline de nosso evento não siga adiante de forma linear, precisamos criar regiões de loop, onde o cursor ficará “preso” ate que haja algo que o mande para outra região.

Clique com o botão direito em Logic Track e selecione a opção Add Loop Region para criar uma região de loop. Crie três delas e as posicione da seguinte forma, usando a ferramenta Move To (lembre-se de desmarcar o cadeado na janela que se abrirá). 1 - Primeiro: Start: 0, End: 4; 2 - Segundo: Start: 8, End: 12; 3 - Terceiro: Start: 15, End: 19; Agora que estamos começando a ter mais elementos em Logic Tracks, nós podemos mover verticalmente os elementos criados para criar uma hierarquia visual e evitar que eles se sobreponham, dificultando o trabalho. Mova-os segurando a tecla shift para que não saiam de sua posição vertical.

4.1.7. Transition Regions To e Transition To Para que nosso cursor possa se “libertar” do loop e ir para uma outra região determinada pela nossas marcações, é necessário criar direcionamentos que indiquem para onde ele deve ir. Por exemplo, quando nosso evento começa ele ficará em loop na música inicial, para que ele mude para a região de Gelo ou Fogo, precisamos criar um elemento que o mande para essas marcações, para isso, podemos usar: Transition Regions To, que tem uma duração variável permitindo que em qualquer local que o cursor toque esse elemento ele será direcionado para o local indicado; E podemos usar Transition To que não possuem duração, ainda assim marcam um local específico na timeline e somente quando o cursor atinge esse local, ele é enviado para onde foi indicado. Para criar esses elementos clique com o botão direito em Logic Tracks e escolha Add Transition Region To ou Add Transition To, e escolha no menu que se abrirá a marcação para onde quer realizar a transição. Vamos criar e posicionar essas transições da seguinte forma: 1 - Transition Region to Neutra to Gelo - Start: 0, End: 4; 2 - Transition Region to Neutra to Fogo - Start: 0, End: 4; 3 - Transition Region to Gelo to Neutra - Start: 8, End: 12; 4 - Transition Region to Fogo - Start: 8, End: 12; 5 - Transition to Neutra - Start: 13; 6 - Transition Region to Fogo to Neutra - Start: 15, End: 19; 7 - Transition Region to Gelo - Start: 15, End: 19; 8 - Transition To Neutra - Start: 20; Lembre-se de organizar verticalmente os elementos para não dificultar seu trabalho. Organização é importante. A criação dessas transições agora indicam para onde nosso cursor deve ir, porém, isto não atende nenhuma regra. Note, que ao dar play em nosso evento, o cursor irá, praticamente, apenas ficar pulando de uma transição para outra, e não é o que queremos. E é para isso que iremos usar um parâmetro que defina quais as condições necessárias para que o cursor se movimente. Ou seja, iremos criar um gatilho para que a transição só aconteça quando este for disparado. 4.1.8. Game Parameter Esse gatilho que criaremos é o Game Parameter, que funciona para nós como uma variável em que cada valor atende a uma condição que determinamos. Também podemos inserir módulos de som dentro do editor do parâmetro, o que acontece nesse caso é que quando o parâmetro atingir o valor que corresponde à posição do módulo, esse irá ser disparado, e ouviremos seu som. No nosso exemplo, usaremos o gatilho apenas como variável, não iremos inserir nada no editor do parâmetro. Vamos à criação de nosso parâmetro e então vamos aplicar condições às nossas transições baseadas nesses parâmetros.

Ao lado da aba Timeline no topo do nosso Event Editor, há um sinal de mais. Clique nele e escolha a opção Add Parameter. Name: area

Minimum: 0

Maximum: 4

Agora que criamos o parâmetro clique em cada Transition Region e no Deck clique no botão com um sinal de mais, em seguida Add Parameter Condition e escolha area. Conforme a imagem:

Agora altere os valores de início e fim da condição, dando um duplo clique sobre os números abaixo da barra verde. Siga as determinações: To Neutra to Gelo - 2.00 - 2.00 To Neutra to Fogo - 3.00 - 3.00 To Gelo to Neutra - 1.00 - 1.00 To Fogo - 3.00 - 3.00 To Neutra - Não aplique condição To Fogo to Neutra - 1.00 - 1.00 To Gelo - 2.00 - 2.00 To Neutra - Não aplique condições. Note que temos no topo do Event Editor um knob com o nome área. Se dermos play e alterarmos seu valor conforme as condições que criamos, veremos nosso evento funcionando. Falta apenas criar as automações de volume e quantizações para concluirmos o evento musica.

4.1.9. Automações e Quantização Para criarmos uma automação de volume, basta que cliquemos com o botão direito sobre o knob de volume da pista e escolhermos a opção Add Automation. Precisaremos criar automações nas três pistas de áudio. Note que ao criar uma automação, aparece uma pista auxiliar abaixo da pista principal, com uma linha rosa, que indica nosso nível de volume, clicando sobre ela podemos criar pontos, e gerar nossas variações de volume. Precisamos atribuir os seguintes valores em relação às marcações e transições para cada pista: NEUTRA: Neutra to Gelo e Neutra to Fogo: 0dB; De Gelo até Gelo to Neutra e de Fogo até Fogo to Neutra: -infinito (menor valor possível); Nas transições To Neutra : 0dB. GELO: Neutra to Gelo:-infinito; De Gelo até Gelo to Neutra: 0dB; Na transição To Neutra : -infinito. FOGO: Neutra to Fogo: -infinito; Fogo até Fogo to Neutra: 0dB; Na transição To Neutra : -infinito. Isso garantirá que as transições acontecerão suavemente entre a música inicial e das áreas de Fogo e Gelo. As automações devem estar conforme a imagem.

Para as transições entre as regiões de Fogo e Gelo nós iremos quantizar os Transition Regions To Fogo e To Gelo. Clique nessas transições e no Deck, e marque na região onde está escrito Quantization Interval a figura de uma semínima, isso fará com que a transição nunca aconteça imediatamente, ela acontecerá a cada dois tempos da música, ou seja, a cada dois beats, assim não teremos notas interrompidas, e como o material das músicas é semelhante à transição ocorre naturalmente.

4.1.10. Som 2D Para finalizar, selecione a pista Master do evento e no Deck clique sobre o 3D Panner e delete, conforme a imagem abaixo. Isso irá tornar o nosso evento um evento 2D, que não sofre atenuações por conta de sua posição no espaço. Queremos que nossa música soe da mesma forma em todo momento.

4.2. Evento Passos Para a criação desse e dos demais eventos, utilizaremos muitos dos conceitos acima. O evento passos é um evento simples, não envolve parâmetros, será disparado quando o personagem começar a se mover e irá parar quando o personagem parar. Para termos maior dinamismo, vamos usar um Scatterer Sound, que nos permite reproduzir uma lista de sons em ordem aleatória, com intervalos entre os sons definidos pelos usuário, bem como posição do som para espacialização em um ambiente 3D. Que é exatamente o que precisamos. 1 - Crie uma nova pasta no Audio Bin, nomeei-a como arquivosPassos e importe os arquivos de áudio referentes a passos na pasta de nosso tutorial. 2 - Crie um novo evento chamado passos. 3 - Renomeie a pista para passos. 4 - Crie um novo evento escolhendo a opção Add Scatterer Sound, na timeline posicione-o no começo e coloque no Deck, onde está indicado “Drop sounds here”. 5 - Na timeline, clique com o botão direito sobre o Trigger Region do módulo e escolha a opção New Loop Region. Agora que criamos o módulo, basta dar play para vê-lo funcionando. Iremos ajustar agora o intervalo entre sons e sua posição no espaço. 1 - Selecione o módulo no Deck, altere os valores em Interval Between Sounds para 300ms e 400ms. Assim, os sons irão ser reproduzidos com um intervalo entre esses valores, o FMOD Studio irá escolher aleatoriamente valores entre esses dois, o que nos dará uma reprodução natural, afinal, quando caminhamos ou corremos não damos um passo depois do outro como um relógio, com intervalos fixos. 2 - Onde está indicado Min & Max Scatter Distance determine o valor mínimo 2 e o máximo 4. Isso permite que os sons sejam reproduzidos a partir de uma distância de 2 até 4 unidades determinadas no projeto do jogo, no Unity. Ou seja, ouviremos os sons um pouco distante do listener, uma vez que os pés ficam mais distantes da cabeça, e a variação de distância nos permite ter uma percepção espacial desses sons um pouco mais natural.

4.3. Evento Tiro

Vamos usar no evento tiro um Multi Sound Module que permite que tenhamos vários sons que serão executados aleatoriamente, não temos configurações de intervalo entre sons nem posição espacial, em resumo, cada vez que o evento disparar, um dos sons de tiro será tocado aleatoriamente, tendo sempre uma variação, que é natural. E usaremos um Scatterer Sound Module para os cartuchos. O tiro será ouvido e em seguida ouviremos as cápsulas caindo no chão. 1 - Importe os arquivos referentes ao evento para uma nova pasta no Audio Bin chama arquivosTiro. 2 - Crie um novo evento chamado tiro. Adicione uma nova pista no Event Editor. Renomeie a primeira como tiro e a segunda como cartuchos. 3 - Crie um Multi Sound Module na pista tiro, adicione a ele os arquivos referentes ao tiro. Posicione o Trigger Region no começo da pista. 4 - Crie um Scatterer Sound Module na pista cartuchos e adicione a ele todos os arquivos referentes a cartuchos. Posicione o Trigger Region em 0.2. 5 - No Deck do módulo dos cartuchos, mude o Interval Between Sounds para 125 e 300. O Min & Max Scatter Distance para 2 e 15.

6 - Como a arma do jogo é uma shotgun de cano duplo, então teremos apenas 2 cápsulas caindo por vez. Então, altere o valor de Polyphony, no Deck do módulo de cartuchos, para 2, isso fará com que apenas 2 sons possam ser executados ao mesmo tempo, e altere o Total Sounds para 2, também, assim o módulo tocará apenas dois sons e irá parar de tocar. Isso faz com que, independente do comprimento de nosso Trigger Region, iremos ter apenas 2 sons. 4.4. Evento Sons e Morte do Inimigo Para esses eventos, vamos configurar o 3D Panner do evento. 1 - Crie uma nova pasta no Event Browser e a nomeie como inimigo, clicando com o botão direito e selecionando a opção New Folder, clique com o botão direito sobre ela e crie um novo evento e nomeie-o como sons. 2 - Crie uma pasta no Audio Bin chamada arquivoInimigo e importe todos os sons referentes ao inimigo dentro dela, tanto os sons emitidos pelo inimigo quanto os sons do evento de morte do inimigo. 3 - Renomeie a pista para sons. E crie um Multi Sound Module. Insira nele todos os sons referentes aos sons do inimigo (Ex: inimigoSom_01.wav). 4 – Clique com o botão direito sobre o Trigger Region e escolha a opção New Loop Region. 5 - Clique na pista de Master e no Deck configure da seguinte forma:

-

Min & Max Distance: 4 e 20.

-

Na região Envelopement marque a opção User e determine o valor de Sound Size em 2.

Quando nós determinamos o valor mínimo de atenuação em 4, isso significa que a partir da fonte sonora (o inimigo, emissor do som), o som irá viajar no espaço 4 unidades antes de começar a ter uma atenuação de volume, esse volume irá se atenuar até que seja inaudível em uma distância de 20 unidades, que definimos como distância máxima. A opção Sound Size funciona como a área ocupada pela fonte sonora, ou seja, se o personagem estiver dentro dessa região, ele está “dentro” do som. Nesse caso, ele estaria ocupando o mesmo lugar que o inimigo. Definimos seu tamanho em 2, menor que a distância mínima, pois queremos indicar que o inimigo ocupa 2 unidades, e que pode emitir sem atenuação de volume um som numa área de 2 unidades em volta dele. Para o evento de morte do inimigo: 1 - Crie um evento chamado morte dentro da pasta inimigo. 2 - Renomeie a pista de áudio para morte. E crie um Multi Sound Module. Insira nele todos os sons referentes aos sons de morte do inimigo 3 - Configure o 3D Panner da mesma maneira que no evento anterior.

5. Audio Banks Agora que criamos todos os nossos eventos, selecione todos eles no Event Browser clicando no primeiro e no último segurando a tecla shift, em seguida, clique com o botão direito e escolha a opção Assign to Master Bank, que é o banco de áudio padrão do FMOD Studio. É necessário sempre atribuir os eventos criados para um banco de áudio, pois é através desses bancos que os sons serão gerados no motor do jogo, no nosso caso, o Unity. 6. Gerando Build e GUI text Por fim, basta criar a build que será importada no Unity. O processo de build irá exportar todos os eventos e arquivos vinculados ao projeto do FMOD Studio, em novos arquivos para a importação no motor do jogo. Esse é um processo simples que pode durar poucos segundos, no caso de um projeto pequeno, ou horas, no caso de um projeto maior e mais complexo. Basta clicar no Menu Bar em File e escolher a opção Build… ou o atalho ctrl+shift+b. O restante de nosso processo a partir de agora se dá na implementação de áudio dentro do Unity.

7. Integração com o Unity Prosseguimos então com a integração da build gerada no FMOD para trabalhar no Unity. Caso você não tenha nenhum conhecimento em Unity não precisa se preocupar, os passos de integração são simples. Será necessário que você tenha instalado o Unity5 (link para download http://unity3d.com/pt/get-unity) em seu computador e tenha seguido os passos do tutorial listados acima. O projeto de teste do jogo esta disponível no link www.teamzeroth.com/fmodtutorial. 8. Instalação do FMOD Studio Unity Integration package no Unity 1. Acesse o site http://www.fmod.org e procure no menu superior o link ‘DOWNLOAD’ (link direto http://www.fmod.org/download/)

2. Procure na pagina o título FMOD Studio Unity Integration e clique no botão ‘Download’ da primeira opção (Unity Integration for Windows/Mac/Linux/iOS/Android/WinPhone) (link direto para a versão 1.06.08 http://bit.ly/fmod10608) a. A versão do plug-in FMOD Studio Unity Integration deve possuir a mesma versão que o FMOD Studio. Caso não seja, você pode baixar uma versão antiga no ultimo link dessa sessão ou atualizar o seu FMOD para a mesma versão do package. 3. Abra o Unity5. Caso seja a sua primeira vez a utilizar o Unity5 na sua maquina uma janela pedindo login será mostrada. Caso não tenha login basta se cadastrar, o cadastro é gratuito. Na janela de seleção de projetos selecione a opção ‘’OPEN OTHER’ na parte superior da janela e em seguida selecione a pasta onde está o projeto do tutorial descomprimido. Após isso clique em abrir. 4. Com o projeto aberto acesse Menu>Assets>Import Package>Custom Package. Uma janela de importação de assets irá aparecer. Selecione o FMOD Studio Unity Integration baixado anteriormente (arquivo .unitypackage). 5. Na janela de Importing package selecione todas as opções de arquivos e click no botão ‘Import’ 6. Será adicionado uma serie de arquivos ao projeto. Esses arquivos são os responsáveis pela integração entre o FMOD Studio e o Unity. Isso finaliza a instalação do FMOD Studio Unity Integration package. 9. Importando banco Após a instalação do Package está na hora de importar o banco de áudios gerados no FMOD Studio para dentro do Unity. Caso você ainda não tenha gerado a build veja a seção Gerando Build e GUI text. 9.1. Pela primeira vez 1.

Na janela de projeto do Unity acesse Menu>FMOD>Import Banks.

2.

Será aberta uma janela para selecionar a pasta da build. Vá ate o local onde esta localizado o seu projeto do FMOD Studio, selecione a pasta ‘Build’ e clique no botão ‘Select Folder’.

3.

Uma janela de confirmação será mostrada com algumas informações da build selecionada. Para prosseguir aperte “Continue”.

4.

A seguir outra janela será aberta com detalhes de todas as modificações feitas no projeto do Unity. Para finalizar aperte “Continue”.

9.2. Atualizando o banco Caso já tenha feito todos os passos descritos na seção Pela primeira vez pelo menos uma vez você pode simplificar esse processo selecionando a opção Menu>FMOD>Refresh Event List. Esta opção verifica a pasta da build selecionada anteriormente. Em seguida siga os passos do Pela primeira vez a partir do 3º. 10. Chamadas de som em jogo O Unity FMOD Studio Unity Integration package já vem com alguns scripts e métodos preparados para agilizar a integração do Unity com o FMOD. 10.1. FMOD_Listener O FMOD_Listener assume o mesmo papel que o Audio Listener padrão do Unity. Ele é responsável por identificar o ponto onde está o receptor de áudio do jogo (o jogador, ou até mesmo a câmera). É extremamente importante que você tenha um, e apenas um, objeto no Cenário com o Componente FMOD_Listener. No nosso exemplo queremos que o ponto onde o áudio seja capturado, o ponto onde será escutado o som do jogo, seja o jogador. No nosso projeto abra a cena ‘LevelTutorial’, localizada na pasta ‘Scenes’. Na aba Hierarchy do Unity selecione o Game Object chamado ‘Player’. Após isso, na aba Inspector clique no botão ‘Add Component’ e selecione a opção Scripts>FMOD_Listener, ou procure FMOD_Listener na caixa de busca.

O script FMOD_Listener não necessita de nenhuma configuração. Agora toda a orientação dos áudios tocados no jogo será levada em consideração a posição do jogador. 10.2. FMOD_StudioEventEmitter Outro componente muito importante que já vem disponível no pacote é o FMOD_StudioEventEmitter. Com ele você conseguirá tocar áudios do FMOD de uma forma simples. Selecione o objeto ‘Main Camera’ na cena ‘LevelTutorial’, em seguida na aba Inspector do Unity clique no botão ‘Add Component’ e selecione o script FMOD_Studio Event Emitter ou pesquise na caixa de busca.

O componente FMOD_Studio Event Emitter será adicionado à câmera principal do jogo. Como você pode ver ele possui 3 propriedades: • Asset: Nessa propriedade você deve especificar o asset do áudio para o script. Normalmente todos os assets de áudio do FMOD são importados na pasta FMODAssets do projeto. Para determinar qual asset você deseja para o script basta arrastar e soltar o asset na área da propriedade ou clicar na bolinha ao lado direito da propriedade e selecionar um asset da lista que será mostrada. • Path: Outro meio de especificar qual é o asset a ser tocado pelo script, porém em vez de selecionar o objeto asset direto podemos colocar o seu path. O path de um asset normalmente segue a estrutura event:/. Outra maneira de obter o path é selecionar o asset que deseja especificar, em seu Inspector haverá uma descrição do seu path.

• Start Event On Awake: Essa propriedade especifica se o áudio será tocado assim que o Game Object é instanciado na cena. Caso essa propriedade não esteja selecionada, para que o áudio seja tocado precisará ocorrer uma chamada por algum outro script. Prosseguimos com o nosso tutorial. Vincule o asset de áudio ‘musica’ ao componente FMOD_Studio Event Emitter da câmera principal. Deixe o Start Event On Awake selecionado. Ao clicar no botão Play no centro superior da janela do Unity percebemos que o áudio do jogo toca normalmente. Pare a execução do projeto e vamos para o próximo passo. 10.3. FMOD_StudioSystem.PlayOneShot O método estático PlayOneShot também é capaz de tocar os assets de áudio do jogo, só que com uma particularidade: O PlayOneShot “toca e esquece” o áudio. Ele funciona bem com áudios de pequena duração como sons de passo ou sons de tiro. Para o nosso tutorial selecione o Game Object ‘Player’ na cena ‘LevelTutorial’ e depois localize o Componente Player Controller no Inspector. Clique duas vezes na área da propriedade script. A janela do MonoDeveloper deverá aparecer com o script ‘PlayerController.cs’ aberto. Encontre a função “Atirar()” e adicione no final dela (antes da marcação '}') a seguinte linha de código:

FMOD_StudioSystem.instance.PlayOneShot( “event:/tiro”, transform.position); A chamada do PlayOneShot consiste em dois parâmetros. 1.

Asset ou Path: Podendo ser uma String indicando o path do asset, como o nosso exemplo, ou uma referência para o objeto FMODAsset.

2.

Position: Vector3 da posição 3D onde o áudio se localizará.

a.

Caso você tenha passado o path dos assets você ainda pode especificar um 3º parâmetro para o volume do asset, um número de 0 a 1.

11. Avançando no FMOD Com tudo ensinado até agora você consegue ter uma boa interação entre a dinâmica de áudio do FMOD e o Unity, porém para avançar e melhorar essas dinâmicas devemos aprender a usar os parâmetros do FMOD. 11.1. FMOD_StudioSystem.getEvent Para termos um controle, mas sofisticado sobre um determinado asset do FMOD no Unity devemos criar o nosso próprio script para coletar esse asset e controlar uma instância de eventos. Para tanto podemos usar o método ‘FMOD_StudioSystem.getEvent’, responsável por nos devolver um EventInstance do asset de áudio, que por sua vez é responsável pelos eventos no áudio (Tocar, Pausar e Parar), bem como mudança de parâmetros e atributos do áudio, como volume, pitch, etc.… No nosso projeto clique com o botão direito do mouse na pasta ‘Scripts’ na aba Project. No menu que aparecerá selecione a opção Create>C# Script. Um novo script será criado dentro da pasta ‘Scripts’, renomeio para ‘SoundTrackController’ e depois clique duas vezes nele. Uma janela do MonoDeveloper será aberta. Insira o seguinte código na aba ‘SoundTrackController.cs’ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

using UnityEngine; using System.Collections; public class SoundTrackController : MonoBehaviour { FMOD.Studio.EventInstance musica; void Start() { musica = FMOD_StudioSystem.instance.getEvent("event:/musica"); musica.start(); } void OnDisable() { musica.stop(); musica.release(); } }

Salve o script (Ctrl+S) e volte para o projeto. Desative o componente FMOD_Studio Event Emmiter que havíamos adicionado à câmera anteriormente clicando na caixa de seleção que tem ao lado do nome do componente. Isso é importante para que o nosso script não gere um conflito tocando o mesmo áudio que o FMOD_Studio Event Emmiter. Adicione o nosso novo script à câmera principal clicando no botão ‘Add Component’ e buscando o nome SoundTrackController. Apos isso execute o jogo. Perceba que não há diferença nenhuma na execução de áudio do jogo. Porém a chamada de áudio agora esta sendo feita pelo nosso script, não mais pelo FMOD_Studio Event Emitter. Pare a execução do projeto.

Vamos entender o nosso código: 1. Primeiro criamos o atributo ‘musica’, na linha 6, que ficará responsável por guardar uma referência para o nosso asset. 2. No evento Start do Unity, que ocorre logo após quando o Unity instancia o Game Object na cena, criamos na linha 9 uma chamada ao ‘getEvent’ indicando o path para

o asset de áudio. O ‘getEvent’ nos devolverá uma EventInstance que será guardado no atributo ‘musica’. 3. Depois de coletar o nosso EventInstance utilizamos o método ‘start’, na linha 10, para ocorrer à reprodução dele. 4. O Método ‘OnDisable’, na linha 13, fica responsável por parar o áudio assim que o componente é desativado. 11.2. Mudando parâmetros Agora que possuímos o controle do evento do asset de áudio podemos mudar parâmetros e realizar toda a dinâmica que foi pensada para a musica no jogo. Primeiramente vamos ‘SoundTrackController.cs’

6 7 8 9 10 11 12 13

adicionar

o

seguintes

linha

ao

código

do

nosso

script

... FMOD.Studio.EventInstance musica; FMOD.Studio.ParameterInstance area; void Start() { musica = FMOD_StudioSystem.instance.GetEvent("event:/Music"); musica.getParameter("area", out area); musica.start(); } ... Com essas modificações temos: 1. Na linha 7 adicionamos o atributo ‘area’ que fica responsável de guardar a referência ao parâmetro do evento. 2. Na linha 11 executamos o método ‘getParameter’ passando dois parâmetros, o primeiro sendo o nome do parâmetro que você deseja retornar e o segundo a variável aonde você deseja guardar a referência desse parâmetro. Usamos o identificador ‘out’ significa que a variável passada (‘area’) será modificada dentro da função.

Com o parâmetro recolhido podemos modificá-lo a partir do atributo ‘area’. Adicione as próximas linhas no final da classe, antes do último fecha chaves ‘}’

... 19 20 21 22 23 24 25 26 27 28 29 30

public void Neutra(){ area.setValue(1f); } public void Gelo(){ area.setValue(2f); } public void Fogo(){ area.setValue(3f); } }

Com essas chamadas o componente Player Controller no Player mandará mensagens para a Câmera conforme ele acessa uma das áreas vermelhas (Fogo), azuis (Gelo) ou quando ele acessa a área neutra, mudando assim o parâmetro do evento de ‘musica’. Para verificar como as chamadas para esse métodos ocorrem você pode verificar o script ‘PlayerControlle.cs’. Ao executar o jogo você verá que conforme você se move entre as áreas do jogo a música muda a depender da área. 11.3. Tocando, Parando e Pausando áudios Outro recurso bastante importante a se aprender para trabalhar com o FMOD no Unity é Parar, Pausar e Tocar o áudio a depender da necessidade do seu projeto. No nosso projeto iremos configurar para que os sons de passos ocorram somente quando o jogador esta se movendo, de forma que quando ele estiver parado os sons de passos vão parar junto com ele e quando ele se mover os passos voltam a ser reproduzidos. Continuamos a selecionar o Game Object ‘Player’ na aba Hierarchy e na aba Inspector selecione o Componente Player Controller e clique duas vezes na área do script. O MonoDeveloper será aberto com o script ‘PlayerController.cs’. Primeiramente precisamos recolher o evento de passos da build do FMOD a partir do seu asset. Dessa vez vamos fazer diferente do “SoundTrackController”, vamos fazer uma referência pública no script do PlayerController para recolher o asset. Coloque as seguintes linhas de código uma linha antes da função “Start()”. public FMOD.Studio.FMODAsset passosAsset; private FMOD.Studio.EventInstance passos; Com isso temos: 1. Com a 1ª linha desse código criamos um atributo para guardar a referência pública ao asset que queremos usar para o ‘passos’ 2. Com a 2ª linha desse código criamos um atributo para guardar a referência para o evento recolhido a partir do asset. Volte para o Unity e veja que o componente Player Controller do Game Object ‘Player’ possui uma nova propriedade chamada ‘passosAsset’. Selecione a pasta ‘FMODAssets’ e araste e solte o arquivo ‘passos’ para a área da propriedade ‘passosAsset’ do componente Player Controller. Agora o atributo do script ‘PlayerController.cs’ já vai ter a referência do ‘passosAsset’ configurado logo no começo da execução da cena. Prosseguindo, precisamos agora recolher o evento do ‘passosAsset’. Adicione as próximas linhas de código no final do método “Start()” do “PlayerController.cs”. ... passos = FMOD_StudioSystem.instance.GetEvent(passosAsset);

} ... Como já aprendemos, instanciamos o evento ‘passos’ com o método ‘GetEvent()’. Só que dessa vez passamos o FMODAsset como parâmetro. Isso simplifica a configuramos do asset para os passos do jogo, bastando apenas trocar a propriedade no Inspector do Unity. Ainda temos que fazer o som parar e tocar conforme o jogador ande ou não. Coloque o seguinte código dentro do método ‘PlayPassos()’ ... bool tocandoPassos = false; public void PlayPassos(){ if(emMovimento){ if(!tocandoPassos){ passos.start(); tocandoPassos = true; } }else{ passos.stop(STOP_MODE.IMMEDIATE); tocandoPassos = false; } } ... Bem simples! Ele verifica se o atributo ‘emMovimento’ está definido como verdadeiro. Se ele for verdadeiro verifica se o atributo ‘tocandoPassos’ é falso, caso seja , chama o método ‘start()’ de ‘passos’ e configura o ‘tocandoPassos’ para verdadeiro. Verificar o ‘tocandoPassos’ é necessário pois devemos chamar o método ‘start()’ apenas uma vez. Caso o ‘emMovimento’ seja falso então ele chama o método ‘stop()’ passando a parâmetro ‘STOP_MODE.IMMEDIATE’ que indica como o áudio deve parar. Depois disso volte de novo para o Unity e execute o projeto. Perceba que conforme você move pelo cenário os sons de passos tocam junto com você, e se você parar de se mover o sons de passos também param. Para saber como o parâmetro ‘emMovimento’ é atualizado você pode ir para o método ‘Update()’ do script ‘PlayerController.cs’.

12. FMOD Live Update O Live Update é um novo recurso do FMOD Studio Unity Integration que trouxe varias melhorias para as interações entre o Unity e o FMOD Studio. Com ele você consegue acompanhar em jogo, em tempo real, todas as modificações feitas nos assets de áudio no FMOD Studio. Porem, por padrão, essa opção vem desativada, vamos aprender a usa-la. 1. Na aba Project, ‘FMOD_StudioSytem’.

no

diretório

Plugins/FMOD,

abra

o

script

2. Na primeira linha do script adicione essa linha de código. #define FMOD_LIVEUPDATE

3. Você pode adicionar essa linha em outros scripts se assim achar melhor. 4. Salve. 5. Execute o projeto no Unity.

6. Agora no FMOD Studio e selecione a opção Menu>File>Connect To Game… (F5). Uma janela irá aparecer pedindo o endereço IP de acesso ao jogo. Coloque o valor “127.0.0.1:9265” e click no botão “Connect”. Depois de seguir esses passos o FMOD Studio estará conectado ao Jogo e as modificações feitas no Studio serão aplicadas diretamente no jogo. Podemos modificar o volume do asset ou aumentar o pitch aplicado nele e ter a resposta do áudio direto no Unity. Muito importante lembrar que as modificações feitas durante o Live Update serão perdidas no Unity, sendo necessário no final gerar a build dos assets e atualizar o banco de builds no Unity como já foi ensinado.

Referências Collins, Karen. Game Sound: An Introduction to the History, Theory, and Practice of Video Game Music and Sound Design. The MIT Press; 1 edition (August 8, 2008). Harvey, Joseph. FMOD Studio User Manual. FMOD Studio V1.05.14. Horowitz, Steve & Looney, Scott R. The Essential Guide to Game Audio: The Theory and Practice of Sound for Games. Focal Press; 1 edition (March 17, 2014) “FMOD Studio Unity Integration”, http://fmod.com/download/fmodstudio/integrations/Unity/Doc/UnityDocumentation.pdf

Lihat lebih banyak...

Comentários

Copyright © 2017 DADOSPDF Inc.