As características da implementação de um jogo Survivor Horror
INTERATIVIDADE CINEMATOGRÁFICA NO JOGO TOUR INTERACTION - IESB: Unity3D, microfone e interação do...
-
Upload
independent -
Category
Documents
-
view
4 -
download
0
Transcript of INTERATIVIDADE CINEMATOGRÁFICA NO JOGO TOUR INTERACTION - IESB: Unity3D, microfone e interação do...
DANIEL CARDOSO TAVARES
INTERATIVIDADE CINEMATOGRÁFICA NO JOGO TOUR INTERACTION - IESB:
Unity3D, microfone e interação do público.
BRASÍLIA - DF
2013
DANIEL CARDOSO TAVARES
INTERATIVIDADE CINEMATROGRÁFICA NO JOGO TOUR INTERACTION - IESB:
Unity3D, microfone e interação do público.
Artigo apresentado ao curso de Tecnologia em Jogos
Digitais do IESB, como parte dos requisitos
necessários para obtenção de menção na matéria
Produção de Cenas de Corte, do 5º semestre.
BRASÍLIA – DF
2013
RESUMO
TAVARES, Daniel Cardoso. INTERATIVIDADE CINEMATROGRÁFICA NO JOGO
TOUR INTERACTION - IESB: Unity3D, microfone e interação do público. Brasília:
IESB, 2013.
O artigo “Interatividade cinematográfica no jogo Tour Interaction - IESB: Unity3D,
microfone e interação do público” tem por finalidade mostrar o trabalho de desenvolvimento
de jogo que procure criar experiência cinematográfica interativa. Nele, os espectadores
interagem, por meio do uso de microfone, com o ritmo de reprodução do filme, assim como
com sua tonalidade. O objetivo é demonstrar que a plataforma Unity3D é capaz de dar
interatividade às experiências cinematográficas.
Palavras-chave: Cinema. Jogos Digitais. Filme. Microfone. Programação de Jogos. Público.
ABSTRACT
TAVARES, Daniel Cardoso. Cinematographic interactivity in the game Tour Interaction
- IESB: Unity3D, microphone and audience interaction. Brasília: IESB, 2013.
The article “Cinematographic interactivity in the game Tour Interaction - IESB: Unity3D,
microphone and audience interaction” has the objective of showing the development work of
a game that creates an interactive cinematographic experience. By this game, an audience is
capable of interacting with scenes, using a microphone, modifying the reproduction rhythm of
the movie and its tonality. The main objective is to show that the game engine Unity3D is
capable of creating interactivity in cinematographic experiences.
Palavras-chave: Cinema. Games. Movie. Microphone. Game Programming. Audience.
LISTA DE FIGURAS
Figura 1. Tela de opções ........................................................................................................... 14
Figura 2. Planejamento de filmagem e programação ............................................................... 15
LISTA DE ABREVIATURAS
IESB Instituto de Educação Superior de Brasília
RGB Sistema de cores Red, Green e Blue.
SUMÁRIO
SUMÁRIO ................................................................................................................................. 7
1. INTRODUÇÃO .................................................................................................................... 8
2. A INTERATIVIDADE DOS JOGOS E A CINENATOGRAFIA ................................... 9
3. UM FILME INTERATIVO ................................................................................................. 9
4. A TECNOLOGIA QUE LEVA À INTERATIVIDADE ................................................ 11
5. A PRÁTICA DO DESENVOLVIMENTO DO JOGO ................................................... 13
6. CONCLUSÃO ..................................................................................................................... 16
7. BIBLIOGRAFIA ................................................................................................................ 17
APÊNDICE 1 – CÓDIGOS DE PROGRAMAÇÃO EM C#
(LIGHTCONTROLLER.CS) ................................................................................................ 19
APÊNDICE 2 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MICROFONE.CS)........... 19
APÊNDICE 3 – CÓDIGOS DE PROGRAMAÇÃO EM C#
(SPAWNBYLOUDNESS.CS) ................................................................................................ 20
APÊNDICE 4 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MOVIEPERFORM2.CS) 21
APÊNDICE 5 – ROTEIRO ................................................................................................... 30
8
1. INTRODUÇÃO
Este trabalho tem como inquietação inicial a aparente ausência de interação público-
filme nos cinemas modernos. Mesmo cercadas por tecnologia cada vez mais moderna, que na
prática coloca a cada dia computadores mais potentes (e mais completos) nas mãos de
milhões de milhões de pessoas em todo o mundo, o nível de interatividade nas salas de
cinema é praticamente zero. Os esforços de avanços tecnológicos prometidos para o futuro
focam-se sempre em qualidade de imagens e sons, assim como em riqueza de estímulos,
como a provável inserção de cheiros em salas de cinema, mas nada é falado a respeito de
permitir que o espectador participe ativamente dos filmes apresentados na tela grande.
Tendo esta visão como ponto de partida, surge o questionamento sobre se a indústria
de jogos, com seus recursos tradicionais, pode trazer maior interatividade às salas de cinema,
em especial com o uso da engine de jogos Unity3D. O presente estudo buscará entender, de
maneira prática, por meio da produção de jogo protótipo, o embrião dos recursos e formas que
permitam ao telespectador influenciar o desenrolar das tramas cinematográficas.
Ao longo de todo o desenvolvimento, optou-se por denominar o protótipo como
“jogo”, tendo em vista que ele é desenvolvido com os recursos tradicionais da indústria de
jogos. Contudo, acredita-se que a presença massiva de características cinematográficas,
apenas pontuadas por momentos decisivos onde a interação terá peso crucial (ao menos a
princípio), e a aplicação em salas de cinema fará com que o jogo seja naturalmente entendido
como cinema interativo (ou interatividade cinematográfica).
Os desafios financeiros da produção de filmes de grande porte são conhecidos, por
isso optou-se por aproximação simplista, que gere número limitado de opções.
No capitulo dois, serão exploradas as visões que ligam e separam a interatividade dos
jogos e a experiência cinematográfica. No capítulo três, será feita avaliação de quais
perspectivas do capítulo anterior, somadas às que focam especialmente sobre interatividade
em filmes, serão aplicadas. No capítulo quatro, serão explanados os recursos tecnológicos
utilizados no desenvolvimento do protótipo, com um detalhamento dos desafios encontrados.
Na quinta parte, será feita explanação sobre a forma de aplicação prática dos conceitos na
produção do jogo.
9
2. A INTERATIVIDADE DOS JOGOS E A CINENATOGRAFIA
De acordo com Brandão1, os jogos cinematográficos são aqueles jogos eletrônicos
que trazem em seu ceio aspectos cinematográficos, que foram crescentemente inseridos
conforme a evolução do meio, especialmente a partir de sua quinta geração, com a inserção da
“câmera nos games”2. Os filmes diferenciam-se dos jogos no sentido de exigirem uma postura
lean back, onde o principal fator é a recepção de estímulos por parte do espectador, enquanto
os jogos exigem postura lean forward, que gera capacidade de agência, ou seja: de interação e
controle, que permite a realização de ações que geram resultados significativos.
Tais interações, contudo, na perspectiva de Williams3, são meramente reativos, no
sentido de estarem limitados às opções preestabelecidas determinadas pelos códigos de
programação anteriormente desenvolvidos. Tal característica encaixa-se com a perspectiva de
Oliver Grau4 que afirma que a interatividade é razoavelmente previsível nos jogos.
Deve ser lembrado, porém, que o avanço das técnicas de programação de inteligência
artificial leva a um novo nível de entendimento e prática, que supera a mera reatividade. Este
é o caso da “programação genética”5 [Tradução livre], por exemplo, que leva os
computadores a um nível de inteligência capaz de automaticamente resolverem problemas
(programas que geram programas).6 Aqui, contudo, não serão empreendidos esforços de
programação de qualquer tipo de interação mais elaborada que as reativas.
3. UM FILME INTERATIVO
Neste trabalho, o jogo desenvolvido, denominado “Tour Interaction – IESB”, recorrerá
às duas abordagens (lean forward e lean back) simultaneamente. Nos pontos de decisão, que
são sempre precedidos por trechos de filme, é permitido ao jogador interagir de forma
limitada, escolhendo uma dentre duas opções de direções a serem seguidas. Neste momento, o
jogador está atuando em postura lean forward, interagindo e decidindo o caminho futuro.
1 BRANDÃO, Rodrigo Gomes. Jogos Cinematográficos ou Filmes Interativos? A semiótica e a
interatividade da linguagem cinematográfica nos jogos eletrônicos. SBC – Proceedins of SBGames 2012. Disponível em: < http://sbgames.org/sbgames2012/proceedings/papers/artedesign/AD_Full21.pdf>. Acesso em 02 nov. 2013. 2 Ibidem. p. 1.
3 WILLIAMS. apud ibidem.
4 OLIVER GRAU. apud ibidem.
5 KOZA, John R. et al. Genetic Programming IV: Routine Human-Competitive Machine Intelligence. Estados
Unidos : Kluwer Academic Publishers, 2003. p. 1. 6 Ibidem.
10
Contudo, tendo em mente a predominância do fator cinematográfico, ressalta-se que
não há controle direto da câmera pelo jogador e o movimento, uma vez superado o ponto de
decisão onde se realiza a interação, é sempre adiante em caminho pré-determinado. Sendo
assim, é possível afirmar que se trata de uma experiência também fortemente influenciada
pela postura lean back.
O argumento que sustenta a simultaneidade das duas condições é a possibilidade (não
necessariamente obrigatoriedade, já que não há pausa compulsória no caso de inação) de
alteração do ritmo7 de reprodução do filme (assim como alteração da tonalidade
8) por meio de
dispositivo de recebimento de dados, instalado em computador e recebendo informações
diretamente do jogador. A partir de tal dispositivo interativo, é possível que o jogador
influencie a velocidade de reprodução do filme nos momentos não classificados como pontos
de interação, ou seja: na parte mais duradoura da experiência.
Em termos teóricos, o uso de filmes interativos já foi pensado é delineado por
Nakatsu9 como sendo dividido em três partes:
“(1) Uma história interativa que se desenvolve de forma diferente dependendo da
interação do público.
“(2) Um público que torna-se o principal personagem e experimenta o mundo criado
por uma história interativa.
“(3) Personagens que interagem com o principal personagem (público) na
história.”10
[Tradução livre]
Assim como tendo as seguintes funções:
1 – O uso de computação gráfica para a criação de um mundo de realidade virtual,
percebido pelo público como sendo seu ambiente no momento;
2 – A interação do público, por meio de gestos e fala, com os personagens no espaço
virtual.
Ao observar o presente trabalho de desenvolvimento de jogo, nota-se que há todos os
três pré-requisitos de um filme interativo, a saber: 1 – o personagem principal movimenta-se
de acordo com a interação do público (ou jogador(es)); 2 – o público torna-se o personagem
7 EISENSTEIN, Sergei. A Forma do Filme. Rio de Janeiro:Jorge Zahar Ed., 2002.
8 Ibidem.
9 NAKATSU, Ryohei. TOSA, Naoko. OCHI, Takeshi. Interactive Movie System with Multi-person Participation
and Anytime Interaction Capabilities. Disponível em: <http://www.tosa.media.kyoto-u.ac.jp/en/works2/im/im_thesis1/thesis.html#outline>. Acesso em: 02 nov. 2013. 10
Ibidem.
11
principal por meio da imersão gerada a partir de câmera em primeira pessoa, permitindo que
experimente um diferenciado sentido de realidade; 3 – há pequena interação entres outros
personagens e o personagem principal, apesar de limitado a três momentos onde há pessoas
próximas reagindo, em maior ou menor intensidade, à gravação de suas imagens (vídeos
“Play 4”, “Play 5” e “Play 12”). Este último ponto é tão sutil que deve sustentar-se apenas na
base de não existir indiferença (real, não aparente ou forçada) por parte de quem foi gravado e
tinha consciência disso. Em outros momentos diversos, há pouca profundidade na interação
com os demais personagens filmados (distantes do ponto de gravação ou de costas/sem
perceberem).
Em relação às duas funções reconhecidas pelo autor, contudo, nota-se que os dois
pontos não coincidem de forma plena, mas indireta ou de forma diferenciada, com o jogo
desenvolvido, sendo que não houve a criação de um mundo virtual por meio de computação
gráfica, mas sendo o mundo virtual (no sentido de diferente daquele em que o espectador está)
uma gravação de cenários reais, e havendo pouca opção de desenvolvimento da narrativa por
meio da interação, limitada à escolha de poucas opções de caminhos a serem seguidos e
levando sempre ao mesmo objetivo final, a sala de aula JB8, escolhida por ser o mais novo e
moderno laboratório para o curso de Jogos Digitais (edifício “J”, andar “B”, sala oito no
Campus Edson Machado do (IESB) Instituto de Educação Superior de Brasília - SGAS
Quadra 613/614 – Lotes 97/98 Av. L2 Sul Brasília - DF - CEP: 70.200-730). Tais diferenças
tornam a experiência aqui proposta como uma alternativa inicial ao modelo proposto por
Nakatsu.
4. A TECNOLOGIA QUE LEVA À INTERATIVIDADE
O jogo foi desenvolvido, como é a praxe da área de desenvolvimento de jogos digitais,
por meio de game engine. Game engines são programas desenvolvidos a partir do
entendimento de que não é possível criar jogos do zero a cada novo projeto, devido à
complexidade e aos custos envolvidos. Tais programas criam jogos por meio da separação
entre função e conteúdo. As funções são fixas ou pré-configuradas, enquanto os conteúdos são
flexíveis e dependem dos desenvolvedores e seus recursos. Na definição de Michael Lewis e
Jeffrey Jacobson11
, “as engines de jogo referem-se à coleção de módulos de código de
simulação que não especificam de forma direta o comportamento do jogo (lógica do jogo) ou
11
LEWIS, Michael. JACOBSON, Jeffrey. Games engines: in scientific research. Disponível em: <http://publicvr.info/publications/Lewis2002.pdf>. Acesso em 02 nov. 2013.
12
o ambiente do jogo (informações do nível)”12
[Tradução livre] trazendo, “módulos para lidar
com informações de entrada, saída (renderização 3D, desenho 2D e som) e física/dinâmicas
genéricas para mundos de jogos”13
[Tradução livre]. O processo de desenvolvimento fica,
então na mão dos programadores, game designers e artistas envolvidos na produção14
.
A game engine utilizada para o desenvolvimento do jogo foi a Unity3D, em sua versão
4.2.0f415
edição profissional educativa, disponibilizada pelo IESB em máquina da instituição.
Houve a necessidade de utilização da versão profissional (ou “pro”) já que, devido a
limitações de licença, não é permitida à versão gratuita a inserção de vídeos. Por meio desse
software, foram inseridos os códigos de programação em linguagem C# (vide apêndices) que
permitem que os vídeos rodem no momento certo, que as interações aconteçam e que
dispositivo de microfone receba dados do público a fim de possibilitar a interação com o jogo.
Como dispositivo de entrada de informações, como já referido acima, foi utilizado
microfone genérico. O uso de microfone não foi a escolha inicial do
desenvolvedor/programador, tendo-se em vista que existem dispositivos semelhantes a
controles remotos, conhecidos como “clickers”16
, que trariam resultado mais preciso, mas que
possuem distribuição demorada, por serem importados, e fora dos limites de custo imaginados
para o projeto. Sendo assim, o uso de microfone foi o escolhido pois, diferente de mouses e
teclados, permitem a participação de muitas pessoas ao mesmo tempo.
Existem, contudo, desafios relacionados ao uso de microfones como dispositivos de
entrada de dados: o principal deles é a incerteza a respeito do nível de ruído gerado pelo
público (em quantidade incerta, variando de dois a mais de dez pessoas) em ambientes com
diferente repercussão sonora. Da mesma forma, não existe padrão para ruídos externos
(construções, grupos de pessoas em passagem ou estacionárias etc.), assim como não foi
prevista a reação do captador de som ao ruído gerado por dispositivos de ar condicionado e
projetores de vídeo. Há também possíveis problemas de compatibilidade com o computador
que roda o jogo. Todos esses aspectos devem ser geridos no momento da execução do jogo.
Como forma automática, mas não profundamente pesquisada, de resolução desses
desafios relacionados aos ruídos e volume de captação, foi inserido código de programação
12
Ibidem. 13
Ibidem. 14
Ibidem. 15
Unity – What´s new in Unity 4.2. Disponível em: <http://unity3d.com/unity/whats-new/unity-4.2>. Acesso em: 02 nov. 2013. 16
Audience response – Wikipedia, the free encyclopedia. Disponível em: <http://en.wikipedia.org/wiki/Audience_response>. Acesso em: 02 nov. 2013.
13
que permite um ajuste automático da sensibilidade do captador de som caso sejam
extrapolados os limites mínimos e máximos preestabelecidos. Desta forma, a sensibilidade
aumentará caso os sons sejam pouco presentes e diminuirá com a recorrência de sons
demasiadamente altos.
5. A PRÁTICA DO DESENVOLVIMENTO DO JOGO
Como afirmado anteriormente, alguns momentos do jogo serão de interação no sentido
de modificar a velocidade de reprodução de vídeo e outros a fim de que seja escolhido o
caminho a ser seguido pela câmera. Durante os momentos de reprodução contínua de vídeo,
foi inserido código de programação que altera, de acordo com o nível de som gerado pelo
público (alto, médio ou baixo) os seguintes parâmetros da experiência visual:
Velocidade de reprodução: sons altos levem a reprodução em velocidade três
vezes maior que a original; sons moderados têm reprodução duas vezes o
normal; sons moderados baixos levam a reprodução ao nível normal de
gravação; e sons baixos tocam o vídeo em velocidade três vezes menor que a
original;
A coloração da iluminação ambiente (visualizada como filtro colorido
modificando os parâmetros RGB17
– sistema de cores vermelho, verde e azul -
do vídeo): vermelho com sons altos; branco (ou normal) com sons medianos; e
preto com sons baixos.
17
RGB. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2013. Disponível em: <http://pt.wikipedia.org/w/index.php?title=RGB&oldid=36034422>. Acesso em: 02 nov. 2013.
14
Figura 1. Tela de opções
Nos momentos de decisão, onde é requisitado ao público decidir que direção tomar, os
modificadores de velocidade e coloração são desligados e aparecem na tela setas indicando as
possíveis direções. A seta posicionada acima indica o requisito por maior nível de som para
sua escolha, ficando a opção de baixo com o menor nível de ruído e escolha automática em
caso de silêncio da plateia.
A imagem a seguir (deslocada para a próxima página por precisar ser grande)
representa mostra a relação entre os vídeos produzidos, os pontos de decisão e o espaço do
IESB a ser percorrido no jogo.
15
Figura 2. Planejamento de filmagem e programação
Legenda:
Círculo com borda clara:
início (entrada do IESB).
Círculo com borda
escura: fim (sala JB8).
Triângulos: pontos de
decisão.
Setas azuis: direções do
movimento.
Losangos verdes: nome
do vídeo a ser tocado.
Losangos azuis: vídeo em
loop nos pontos de
decisão.
Losangos laranja:
indicativo de existência
de GUI (graphic user
Interface) com opções de
escolha na forma de setas
vermelhas.
Círculos vermelhos:
indicam se é preciso mais
(+) ou menos (-) ruído
para ir em determinada
direção.
Caixas de borda azul:
comentários.
16
6. CONCLUSÃO
O artigo buscou compreender se era possível o desenvolvimento de experiência
cinematográfica interativa a partir de um jogo digital utilizando como engine a plataforma de
desenvolvimento de jogos Unity 3D.
A primeira etapa do estudo disse respeito ao entendimento das noções de
interatividade proporcionada pelos jogos e a cinematografia. Ali foram estudados os
pensadores que influenciam os parâmetros de estudo que foram utilizados no decorrer do
estudo. Foi constatado que o jogo aqui desenvolvido utiliza uma interatividade que integra os
aspectos de lean forward e lean back. Foi também discutida a questão dos jogos serem
limitados em sua disponibilidade de opções de interação e como isso pode vir a ser superado.
Em seguida, foram levantados os aspectos relacionados à interatividade do filme, a
serem trazidas pelo jogo. Foi mostrada a forma como o jogo oferece possibilidades ao público
de interagir, criando uma experiência cinematográfica nova. Foi mostrado que já existem
estudos sobre o tema, mas que eles têm como foco principal a criação de ambientes virtuais,
diferente do que foi tentado aqui, com o uso exclusivo de imagens reais, na forma de vídeos
alinhados de forma a criar a sensação de continuidade.
Nas duas partes finais, foram mostrados os desafios tecnológicos envolvidos na
produção do jogo. A princípio foi mostrada a engine de jogo utilizada para o
desenvolvimento. Em seguida, foi explanado o motivo pelo qual utilizou-se o microfone
como meio de recepção de dados do público, assim como as limitações envolvidas na escolha.
Por fim, na parte cinco, foram demonstradas as formas escolhidas de interação entre os
usuários (público) e o jogo que, juntas, formam a experiência cinematográfica interativa.
Ao final, compreende-se que a plataforma Unity3D, aliada ao uso de dispositivo de
microfone pode produzir uma experiência cinematográfica interativa, capaz de unir atividade
do público e opções de modificar o curso do filme em exibição, criando interatividade em
experiência cinematográfica. Este estudo, aliado a outros, reforça a possibilidade de um
cinema mais rico em experiências interativas no futuro, com processos que permitam aos
espectadores uma postura lean forward em relação aos filmes, mesmo que apenas em
momentos-chave.
17
7. BIBLIOGRAFIA
Livros
EISENSTEIN, Sergei. A Forma do Filme. Rio de Janeiro : Jorge Zahar Ed., 2002.
KOZA, John R. et al. Genetic Programming IV: Routine Human-Competitive Machine
Intelligence. Estados Unidos : Kluwer Academic Publishers, 2003.
Material online
Audience response – Wikipedia, the free encyclopedia. Disponível em:
<http://en.wikipedia.org/wiki/Audience_response>. Acesso em: 02 nov. 2013.
BRANDÃO, Rodrigo Gomes. Jogos Cinematográficos ou Filmes Interativos? A semiótica
e a interatividade da linguagem cinematográfica nos jogos eletrônicos. SBC –
Proceedings of SBGames 2012. Disponível em: <
http://sbgames.org/sbgames2012/proceedings/papers/artedesign/AD_Full21.pdf>. Acesso em
02 nov. 2013.
LEWIS, Michael. JACOBSON, Jeffrey. Games engines: in scientific research. Disponível
em: <http://publicvr.info/publications/Lewis2002.pdf>. Acesso em 02 nov. 2013.
NAKATSU, Ryohei. TOSA, Naoko. OCHI, Takeshi. Interactive Movie System with Multi-
person Participation and Anytime Interaction Capabilities. Disponível em:
<http://www.tosa.media.kyoto-u.ac.jp/en/works2/im/im_thesis1/thesis.html#outline>. Acesso
em: 02 nov. 2013.
RGB. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2013.
Disponível em: <http://pt.wikipedia.org/w/index.php?title=RGB&oldid=36034422>. Acesso
em: 02 nov. 2013.
18
Unity – What´s new in Unity 4.2. Disponível em: <http://unity3d.com/unity/whats-
new/unity-4.2>. Acesso em: 02 nov. 2013.
19
APÊNDICE 1 – CÓDIGOS DE PROGRAMAÇÃO EM C# (LIGHTCONTROLLER.CS)
using UnityEngine;
using System.Collections;
public class LightController : MonoBehaviour
{
public GameObject audioInputObject;
void Start ()
{ }
void Update ()
{
if(MoviePerform2.iteration != 13 && MoviePerform2.iteration != 14 && MoviePerform2.iteration != 15 && MoviePerform2.iteration != 16 && MoviePerform2.iteration != 17)
{
if(SpawnByLoudness.checkedLoudness > 8) {
light.color = Color.red;
} if(SpawnByLoudness.checkedLoudness <= 8 && SpawnByLoudness.checkedLoudness > 0.3f)
{
light.color = Color.white; }
if(SpawnByLoudness.checkedLoudness <= 0.3f)
{ light.color = Color.black;
}
} else
{
light.color = Color.white; }
}
}
APÊNDICE 2 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MICROFONE.CS)
using UnityEngine; using System.Collections;
[RequireComponent(typeof(AudioSource))] public class Microfone : MonoBehaviour {
public float sensitivity = 100;
public float loudness = 0; public float timeBeforeNewSensitivity = 0.5f;
void Start() {
audio.clip = Microphone.Start(null, true, 10, 44100);
audio.loop = true; // Set the AudioClip to loop audio.mute = true; // Mute the sound, we don't want the player to hear it
while (!(Microphone.GetPosition(null) > 0)){} // Wait until the recording has started
audio.Play(); // Play the audio source! }
void Update() {
loudness = GetAveragedVolume() * sensitivity;
StartCoroutine(CoroutineLoudnessAdapter()); }
IEnumerator CoroutineLoudnessAdapter()
{
if(loudness >= 10f) {
sensitivity -= 1f;
yield return new WaitForSeconds(timeBeforeNewSensitivity);
20
} if(loudness <= 0.2f)
{
sensitivity += 1f; yield return new WaitForSeconds(timeBeforeNewSensitivity);
}
if(sensitivity <= 99f)
{
sensitivity = 100f; }
if(sensitivity >= 200f)
{ sensitivity = 200f;
}
}
float GetAveragedVolume()
{ float[] data = new float[1024];
float a = 0;
audio.GetOutputData(data,0); foreach(float s in data)
{
a += Mathf.Abs(s); }
return a/1024;
} }
APÊNDICE 3 – CÓDIGOS DE PROGRAMAÇÃO EM C# (SPAWNBYLOUDNESS.CS)
using UnityEngine;
using System.Collections;
public class SpawnByLoudness : MonoBehaviour {
public GameObject audioInputObject;
public float threshold = 1.0f;
public float checkingWait; Microfone micIn;
public GUIStyle guiMeasurement;
float loudness = 0;
public static float checkedLoudness = 0; bool checking = true;
float updatedTimeScale = 0;
public float thresholdMedium = 0.5f;
public float thresholdHigh = 2.0f;
Microfone scriptMicrofone;
void Start() {
micIn = (Microfone) audioInputObject.GetComponent("Microfone");
scriptMicrofone = GetComponent<Microfone>(); }
void Update () {
loudness= micIn.loudness;
// if(checkedLoudness< thresholdMedium)
// {
// Time.timeScale = 0.5f; // }
// if (checkedLoudness >= thresholdMedium && checkedLoudness < thresholdHigh)
// { // Time.timeScale = 1.0f;
// }
21
// if (checkedLoudness >= thresholdHigh) // {
// Time.timeScale = 1.5f;
// } }
IEnumerator checkingLag() {
if(checking)
{ checking = false;
yield return new WaitForSeconds(checkingWait);
checking = true; checkedLoudness = loudness;
if(checkedLoudness > 12)
{ checkedLoudness = 12;
}
updatedTimeScale = Time.timeScale; }
}
void OnGUI()
{
StartCoroutine(checkingLag()); GUI.Box (new Rect(10, Screen.height - 10, 30, -1 * (checkedLoudness * 50)), "", guiMeasurement);
GUI.Label(new Rect(10, Screen.height - 20, 50, 25), checkedLoudness.ToString());
GUI.Label(new Rect(100, Screen.height - 20, 200, 25), "Sensitivity: " + scriptMicrofone.sensitivity.ToString()); }
}
APÊNDICE 4 – CÓDIGOS DE PROGRAMAÇÃO EM C# (MOVIEPERFORM2.CS)
using UnityEngine;
using System.Collections;
public class MoviePerform2 : MonoBehaviour {
public GUIStyle guiInstructions1;
public GUIStyle guiInstructions2; public GUIStyle guiInstructions3;
public GUIStyle guiInstructions4;
public string textToShow = ""; public string textToShow2 = "";
public string textToShow3 = "";
public string textToShow4 = ""; bool showInstructions = true;
public GameObject audioInputObject; public MovieTexture[] play;
public Texture2D textureUp; public Texture2D textureLeft;
public Texture2D textureRight;
public int lowPlace = 0;
public int highPlace = -200;
public int instructionsTime = 10;
public static int iteration = 1; public static float movieLenght = 0f;
public float loudnessThreshold = 5.0f;
public float timeToWait = 2f; int repetitionA = 0;
int repetitionB = 0;
bool waitingA = true; bool waitingB = true;
int round = 0;
int screenshotNumber = 1; bool canTakeShot = true;
22
Microfone scriptMicrofone;
void Start ()
{ scriptMicrofone = GetComponent<Microfone>();
audio.clip = play[1].audioClip;
}
void Update ()
{ LoudnessChecker();
IterationChecker();
if(Input.GetKey(KeyCode.F12))
{
StartCoroutine(CoroutineScreenshot()); }
}
IEnumerator CoroutineScreenshot()
{
if(canTakeShot) {
canTakeShot = false;
Application.CaptureScreenshot("Screenshot" + screenshotNumber + ".jpg"); yield return new WaitForSeconds(2);
screenshotNumber++;
canTakeShot = true; }
}
void LoudnessChecker()
{
if(iteration != 13 && iteration != 14 && iteration != 15 && iteration != 16 && iteration != 17)
{
if(SpawnByLoudness.checkedLoudness > 8)
{ audio.pitch = 3.0f;
} if(SpawnByLoudness.checkedLoudness <= 8f && SpawnByLoudness.checkedLoudness > 5.0f)
{
audio.pitch = 2.0f; }
if(SpawnByLoudness.checkedLoudness <= 5f && SpawnByLoudness.checkedLoudness > 0.3f)
{ audio.pitch = 1.0f;
}
if(SpawnByLoudness.checkedLoudness <= 0.3f) {
audio.pitch = 0.3f;
} }
}
void IterationChecker()
{
switch(iteration) {
case 0:
break; case 1:
if(round == 0)
{ round++;
gameObject.renderer.material.mainTexture = play[iteration];
audio.pitch = 1.0f;
play[iteration].loop = false;
play[iteration].Play ();
audio.Play ();
}
if(!play[iteration].isPlaying)
{
play[iteration].Stop(); audio.Stop();
23
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0;
iteration = 17; }
break;
case 2: if(round == 0)
{
round++; gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = false;
play[iteration].Play (); audio.Play ();
}
if(!play[iteration].isPlaying )
{
play[iteration].Stop(); audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0;
iteration = 16; }
break;
case 3: if(round == 0)
{
round++;
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = false; play[iteration].Play ();
audio.Play ();
}
if(!play[iteration].isPlaying )
{ play[iteration].Stop();
audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0; iteration = 17;
}
break;
case 4:
if(round == 0) {
round++;
gameObject.renderer.material.mainTexture = play[iteration]; audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f; play[iteration].loop = false;
play[iteration].Play ();
audio.Play (); }
if(!play[iteration].isPlaying )
{
play[iteration].Stop();
audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0;
24
iteration = 15; }
break;
case 5: if(round == 0)
{
round++; gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = false;
play[iteration].Play (); audio.Play ();
}
if(!play[iteration].isPlaying )
{
play[iteration].Stop(); audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0;
iteration = 15; }
break;
case 6: if(round == 0)
{
round++;
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = false; play[iteration].Play ();
audio.Play (); }
if(!play[iteration].isPlaying ) {
play[iteration].Stop();
audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0;
iteration = 15;
}
break;
case 7: if(round == 0)
{
round++;
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = false; play[iteration].Play ();
audio.Play ();
}
if(!play[iteration].isPlaying )
{
play[iteration].Stop();
audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0; iteration = 14;
25
}
break;
case 8: if(round == 0)
{
round++;
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = false; play[iteration].Play ();
audio.Play ();
}
if(!play[iteration].isPlaying )
{ play[iteration].Stop();
audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0; iteration = 13;
}
break; case 9:
break;
case 10: if(round == 0)
{
round++;
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f; play[iteration].loop = false;
play[iteration].Play ();
audio.Play (); }
break;
case 11: if(round == 0)
{
round++;
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = false; play[iteration].Play ();
audio.Play ();
}
if(!play[iteration].isPlaying )
{ play[iteration].Stop();
audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0; iteration = 14;
}
break;
case 12:
if(round == 0)
{ round++;
gameObject.renderer.material.mainTexture = play[iteration]; audio.clip = play[iteration].audioClip;
26
audio.pitch = 1.0f;
play[iteration].loop = false;
play[iteration].Play (); audio.Play ();
}
if(!play[iteration].isPlaying )
{
play[iteration].Stop(); audio.Stop();
Debug.Log ("Stoped Playing! " + play[iteration].ToString());
round = 0;
iteration = 13; }
break;
case 13:
if(!play[iteration].isPlaying)
{ gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = true;
play[iteration].Play (); audio.Play ();
}
break; case 14:
if(!play[iteration].isPlaying)
{
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f; play[iteration].loop = true;
play[iteration].Play ();
audio.Play (); }
break;
case 15:
if(!play[iteration].isPlaying)
{ gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = true;
play[iteration].Play (); audio.Play ();
}
break; case 16:
if(!play[iteration].isPlaying) {
gameObject.renderer.material.mainTexture = play[iteration];
audio.clip = play[iteration].audioClip;
audio.pitch = 1.0f;
play[iteration].loop = true; play[iteration].Play ();
audio.Play ();
}
break;
case 17:
if(!play[iteration].isPlaying)
{
gameObject.renderer.material.mainTexture = play[iteration]; audio.clip = play[iteration].audioClip;
27
audio.pitch = 1.0f;
play[iteration].loop = true;
play[iteration].Play (); audio.Play ();
}
break; case 18:
break;
case 19: break;
case 20:
break; case 21:
break;
} }
void CheckPointReached(int number) {
if(number == 1)
{ iteration++;
}
if(number == 0) {
iteration--;
} }
void OnGUI() {
switch(iteration)
{
case 0:
break;
case 1: break;
case 2: break;
case 3:
break; case 4:
break;
case 5: break;
case 6:
break; case 7:
break;
case 8: break;
case 9:
break; case 10:
break;
case 11: break;
case 12:
break; case 13:
GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100),
textureRight, ScaleMode.ScaleToFit, true, 1.0f); GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200),
textureUp, ScaleMode.ScaleToFit, true, 1.0f);
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " +
repetitionA.ToString());
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +
repetitionB.ToString());
if(SpawnByLoudness.checkedLoudness > loudnessThreshold) {
StartCoroutine(CoroutineWaiterA());
if(repetitionA == 4) {
28
play[iteration].Stop(); audio.Stop();
iteration = 11;
repetitionA = 0; repetitionB = 0;
} }
if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)
{ StartCoroutine(CoroutineWaiterB());
if(repetitionB == 4)
{ play[iteration].Stop();
audio.Stop();
iteration = 10; repetitionA = 0;
repetitionB = 0;
} }
break;
case 14: GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100),
textureRight, ScaleMode.ScaleToFit, true, 1.0f);
GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200), textureLeft, ScaleMode.ScaleToFit, true, 1.0f);
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " + repetitionA.ToString());
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +
repetitionB.ToString());
if(SpawnByLoudness.checkedLoudness > loudnessThreshold)
{
StartCoroutine(CoroutineWaiterA());
if(repetitionA == 4)
{ play[iteration].Stop();
audio.Stop(); iteration = 12;
repetitionA = 0;
repetitionB = 0;
}
} if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)
{
StartCoroutine(CoroutineWaiterB()); if(repetitionB == 4)
{
play[iteration].Stop(); audio.Stop();
iteration = 8;
repetitionA = 0; repetitionB = 0;
}
} break;
case 15:
GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100), textureLeft, ScaleMode.ScaleToFit, true, 1.0f);
GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200),
textureUp, ScaleMode.ScaleToFit, true, 1.0f);
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " +
repetitionA.ToString()); GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +
repetitionB.ToString());
if(SpawnByLoudness.checkedLoudness > loudnessThreshold)
{
StartCoroutine(CoroutineWaiterA()); if(repetitionA == 4)
{
play[iteration].Stop(); audio.Stop();
29
iteration = 6; repetitionA = 0;
repetitionB = 0;
}
}
if(SpawnByLoudness.checkedLoudness <= loudnessThreshold) {
StartCoroutine(CoroutineWaiterB());
if(repetitionB == 4) {
play[iteration].Stop();
audio.Stop(); iteration = 7;
repetitionA = 0;
repetitionB = 0; }
}
break; case 16:
GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 100),
textureUp, ScaleMode.ScaleToFit, true, 1.0f); GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 200),
textureRight, ScaleMode.ScaleToFit, true, 1.0f);
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " +
repetitionA.ToString());
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " + repetitionB.ToString());
if(SpawnByLoudness.checkedLoudness > loudnessThreshold) {
StartCoroutine(CoroutineWaiterA());
if(repetitionA == 4)
{
play[iteration].Stop();
audio.Stop(); iteration = 3;
repetitionA = 0; repetitionB = 0;
} }
if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)
{ StartCoroutine(CoroutineWaiterB());
if(repetitionB == 4)
{ play[iteration].Stop();
audio.Stop();
iteration = 5; repetitionA = 0;
repetitionB = 0;
} }
break;
case 17: GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + lowPlace, 100, 100),
textureUp, ScaleMode.ScaleToFit, true, 1.0f);
GUI.DrawTexture(new Rect(Screen.width/2 - 50, Screen.height/2 + highPlace, 100, 200), textureRight, ScaleMode.ScaleToFit, true, 1.0f);
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 + 150, 100 ,25), "Option Hard: " + repetitionA.ToString());
GUI.Box (new Rect(Screen.width/2 - 50, Screen.height/2 +180, 100 ,25), "Option Easy: " +
repetitionB.ToString());
if(SpawnByLoudness.checkedLoudness > loudnessThreshold)
{
StartCoroutine(CoroutineWaiterA());
if(repetitionA == 4)
{ play[iteration].Stop();
audio.Stop();
iteration = 2; repetitionA = 0;
30
repetitionB = 0;
}
} if(SpawnByLoudness.checkedLoudness <= loudnessThreshold)
{
StartCoroutine(CoroutineWaiterB()); if(repetitionB == 4)
{
play[iteration].Stop(); audio.Stop();
iteration = 4;
repetitionA = 0; repetitionB = 0;
}
} break;
default:
break; }
if(Time.time < 10f) {
GUI.Label(new Rect(Screen.width/2 - 25, 0, 50, 300), textToShow, guiInstructions1);
GUI.Label(new Rect(Screen.width/2 - 150, 200, 300, 30), textToShow2, guiInstructions2); GUI.Label(new Rect(Screen.width/2 - 250, 250, 500, 30), textToShow3, guiInstructions3);
GUI.Label(new Rect(Screen.width/2 - 150, 300, 300, 30), textToShow4, guiInstructions4);
} if(iteration == 10 && !play[iteration].isPlaying)
{
GUI.Label(new Rect(Screen.width/2 - 150, 300, 300, 30), textToShow4, guiInstructions2); }
}
IEnumerator CoroutineWaiterA()
{
if(waitingA) {
waitingA = false; repetitionA++;
yield return new WaitForSeconds(timeToWait);
waitingA = true; }
}
IEnumerator CoroutineWaiterB()
{
if(waitingB) {
waitingB = false;
repetitionB++; yield return new WaitForSeconds(timeToWait);
waitingB = true;
} }
}
APÊNDICE 5 – ROTEIRO
EXT. ENTRADA IESB. DIA
Caminhada em velocidade moderada até final da passarela coberta.
Em todos os vídeos: câmera em primeira pessoa.
Virada para frente, com olhar para a direita (obra) no meio do percurso.
31
EXT. FIM DA PASSARELA. DIA
Vídeo de "idle" (termo comum de jogos para "esperando").
Câmera olhando para frente.
EXT. CAMINHADA ATÉ SALA DE MAGIC. DIA
Caminhada até sala de Magic (sala que deveria ser ocupada por loja, mas ociosa e com
presença de cadeiras. Tradicional local de encontro para jogadores de Magic (cartas)).
Câmera olhando para frente, evitando visualização da lanchonete. Foco nas cadeiras e,
ao sentar, evitar visualização do ambiente externo.
INT. SALA DE MAGIC. DIA
Vídeo de "idle".
Câmera olhando para parede.
INT. CAMINHADA DE VOLTA ATé FIM DA PASSARELA
Caminhada de volta até a posição "fim da passarela".
Câmera olha para baixo.
EXT. FIM DA PASSARELA. DIA
Caminhada até entrada do bloco H.
EX. SALA DE MAGIC. DIA
Caminhada até entrada do bloco H.
EXT. BLOCO H. DIA
32
Vídeo de idle.
Câmera olha para lado esquerdo e volta a visão de frente.
INT. BLOCO H. DIA
Caminhada até interior do banheiro dos professores (masculino). Câmera olha para
pia. Retorno pelo mesmo caminho até a entrada do bloco H.
EXT. BLOCO H. DIA
Caminhata até encruzilhada bloco I.
INT. ENCRUZILHADA BLOCO I. DIA
Câmera entra no bloco I. Olha para o corredor à direita e sobe as escadas caminhando
até o ponto em que os blocos I e J são divididos. Visualização do bebedouro.
INT. ENCRUZILHADA BLOCO I. DIA
Câmera caminha até o bloco D. Percorre o corredor até o
final (cruza com mulher no caminho), sobe as escadas e retorna pelo corredor. Sai do
bloco D e caminha pela passarela até o bloco C. Dirigi-se até o bloco I/J e vai para o ponto
onde os dois dividem-se. Foco final no bebedouro.
INT. BLOCO I/J. DIA
Câmera percorre caminho até encruzilhada do bloco I, passando pela passarela entre
os blocos C e D e descendo pela escada do bloco D. Passa pela parte de fora da escada
(próxima ao bloco D) e caminha até ponto final.
INT. BLOCO I/J. DIA