Tutorial:DesenvolvimentodeJogoscomUnity3D
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
1
Apresentao
Essetutorialapresentadocomoumabreveintroduoaodesenvolvimentodejogoscomo
motor Unity3D. Explicaes muito detalhadas, mesmo que cobrindo apenas parte dasfuncionalidades existentes, ocupariambemmais que as trs dezenas de pginas disponveisparaestetutorial.Dessaforma,recomendamosoleitorinteressadoabuscarmaisinformaes
naabrangenteeexcelentedocumentaoda ferramenta,disponvel tanto localmente,aoserealizarasuainstalao,quantoonlineatravsdositehttp://www.unity3d.com/support.
Tambmporquestesdeespao,nofoi includauma introduogeralaodesenvolvimentodejogos.Esperasequeoleitorpossuaalgumafamiliaridadecomosconceitoseferramentas
relacionadosaoassunto taiscomorenderizaoemtemporeal,modelagemeanimao3D,texturas e Shaders. Tambm esperase que o leitor possua noes de programao,preferencialmentecomalgumalinguagemorientadaaobjetos.
O contedo do texto est organizado em forma crescente de complexidade, de forma a
facilitar a leitura. Entretanto, as sees apresentadas tambm podem ser lidas de formaindependente.
AimagemdacapafoicedidadoprojetoFranaAntrtica,decujaequipededesenvolvimentofazempartealgunsdosautores.O jogoFranaAntrticaestsendodesenvolvidoatravsda
Unity3DeumprojetofinanciadopelaSecretariadeCulturadoEstadodoRiodeJaneiro.
Por fim, informase que algumas das figuras e exemplos apresentados foram adaptados domanualdaferramenta,detutoriaisonline(http://www.unity3d.com/resources),bemcomodediscusses disponveis no forum comunitrio de desenvolvedores Unity
(http://forum.unity3d.com). Tambm recomendamos o leitor que explore essas refernciasparaummaioraprofundamento.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
2
Guiadeleitura
1Introduo
BreveapresentaodosmdulosdaUnity3Dedetalhamentodainterfacedoeditordecenas.
2CriaoeManipulaodeGameObjects
ExplicaodomodelodeobjetosdaUnity3Deasformasbsicasdecriao,composioe
alteraodosmesmos.
3MateriaiseShaders
BreveintroduolinguagemdeespecificaodeShadersdaUnity3D:ShaderLab.Sodemonstradosexemplosparapipelinedefunofixa,bemcomoShadersprogramveis.
4SistemadeFsica
IntroduoaoscomponentesrelacionadosaosubsistemaPhysXdesimulaofsica.
5Scripting
Apresentao,atravsdeexemplos,dosprincipaisconceitosparaaprogramaodescriptscomaUnity3D.
6Concluso
Consideraesfinaisdosautores.
Bibliografia
Leiturasrecomendadasparaaquelesinteressadosemummaioraprofundamento.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
3
1Introduo
Odesenvolvimentodejogos3Dumaatividadeaomesmotempogratificanteedesafiadora.
Diversashabilidades,dediferentesreasdoconhecimento,sonecessriasnesseprocesso.Ousodeferramentasparaauxiliarnastarefasrepetitivasfundamentalnessetipodeatividade,eaolongodotempo,umtipoespecialdeferramenta,conhecidocomomotordejogos(game
engine) foi evoluindo de maneira paralela aos prprios jogos, ao ponto que se tornaramprodutosvaliososedecertaformapopulares.
Alguns mdulos e funcionalidades auxiliares so condies necessrias para que umaferramenta seja considerada um motor de jogos completo. Em especial, um sistema de
renderizao 3D com suporte a Shaders programveis e um sistemade simulao fsica sofundamentais. Uma boa arquitetura para a programao de scripts, um editor de cenasintegrado,eacapacidadedeseimportardiretamentemodelos3d,imagenseefeitosdeudio
produzidosemferramentasexternas, soascaractersticasexistentesnosmotoresde jogos.Alm disso, desejvel que os jogos desenvolvidos possam ser distribudos em mltiplasplataformascomoPC,consolesoumesmodispositivosmveis.
AUnity3DabstraidodesenvolvedordejogosanecessidadedeutilizardiretamenteDirectXou
OpenGL (apesar de ainda ser possvel, caso necessrio), suportando a criao de ShaderscomplexoscomalinguagemCgdaNVidia.Internamente,osubsistemadesimulaofsicaopopularPhysX,tambmdaNVidia.Paraaexecuodescripts,aUnityusaumaversodealto
desempenhodabibliotecaMono,umaimplementaodecdigoabertodoframework.NetdaMicrosoft.
Aindaquesejaumaferramentaqueincluioestadodaartenoseusegmento,aUnity3Dtemum preo acessvel, o que apenasmais uma das razes para sua crescente popularidade.
MesmousandoaversomaisbaratadaUnity3d,os jogospodemserdesenvolvidosparaPC,Mac ou mesmo embutidos em uma pginaWeb. Com a aquisio de licenas especficas,podesedesenvolveredistribuirjogosparaiPhone,atravsdalojaonlinedaApple,oumesmo
paraoconsoleWiidaNintendo.
1.1Interface
O motor de jogos Unity3D possui uma interface bastante simples e amigvel que objetivafacilitar o desenvolvimento de jogos de diversos gneros e outros sistemas de visualizao.Sua rea de trabalho composta de vrias janelas chamadas views, cada uma com um
propsitoespecfico.AfiguraabaixoumacapturacontendoumarepresentaoesquemticaeaidentificaodecadaumadessasjanelasnoeditordecenasdaUnity3D.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
4
Figure1InterfacedoeditordecenadaUnity3D(UNITYTECHNOLOGIES2009A)
Projectview
AjanelaProjectainterfaceparamanipulaoeorganizaodosvriosarquivos(Assets)que
compemumprojetotaiscomoscripts,modelos,texturas,efeitosdeudioePrefabs,osquaisserodetalhadosmais adiantena seode scripting.Aestruturaexibidana janelaProject correspondente subpasta Assets dentro da pasta do projeto no sistema de arquivos do
computador. Recomendase que a manipulao de sua estrutura e contedo seja efetuadasomentedentrodaUnity3D,afimdemanteraintegridadedosmetadadosquesoassociadosa estes elementos. Entretanto, certasmudanas, como atualizao de uma textura por um
editordeimagensporexemplo,oumesmoaadiodenovosAssets,podeserfeitadeformaseguradiretamentenosistemadearquivos.
Figure2JanelaProject
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
5
Hierarchyview
A janelaHierarchyexibetodososelementosdacenaqueencontramsenacenaqueseest
editando. Alm disso, nessa janela podemos organizar e visualizar a hierarquia de decomposioentreosvriosobjetosquecompemacena (grafodecena).O funcionamentodessesobjetos,bemcomoahierarquiadetransformaoserexplicadomaisdetalhadamente
naprximaseo.
Figure3JanelaHierarchycomdoisobjetos
Sceneview
AjanelaSceneaformaprincipaldemanipulaodoselementosvisuaisnoeditordecenasda
Unity, possibilitando a orientao e posicionamento desses elementos com um feedbackimediatodoefeitodasalteraesefetuadas.Nestajanela,podesemanipulargraficamenteosobjetosatravsdasopesdearrastaresoltarcomomouse.Essamanipulaosemelhante
quela de ferramentas demodelagem 3D e podesemanipular objetos tais como cmeras,cenrios,personagensetodososelementosquecompemacena.
Devidoasuagrandeimportnciaduranteodesenvolvimentodeumaaplicao,vriasformasdenavegaosooferecidasafimdeaumentaraindamaisaprodutividadedodesenvolvedor.
Alm disso, as ferramentas bsicas demanipulao dos elementos da cena, tais comopan,translao,rotaoeescalatambmestodisponveisparautilizaonestajanelaatravsdeatalhosdeteclado(teclasQ,W,EeR).
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
6
Figure4JanelaScene
Gameview
A janelaGame responsvel pela visualizao da aplicao em desenvolvimento da forma
queelaserexibidaquandofinalizada.Nessajanela,podeserapidamenteterumaprviadecomooselementosestosecomportandodentrodaaplicao.Almdisso,aUnityforneceaopodeseparalisar(botopause)asimulaoenquantoelaestiveremdepurao,deforma
a possibilitar que os parmetros dos vrios elementos possam ser ajustados paraexperimentao.Lembramosqueoajustedessesparmetrosnonecessitamqueasimulaoestejaparalisada,podendoseralteradosinclusiveenquantoasimulaoestejaemexecuo.
Nesta janela, tambm podese visualizar vrias informaes estatsticas (stats) sobre a
simulao,taiscomotempodeprocessamentoenmerodeframesporsegundo,nmerodetringulos e vrtices renderizados,memria de textura utilizada, entre outras. Esta opo importante para a depurao do desempenho da simulao para uma posterior otimizao,
casosejanecessrio.
Inspectorview
Najanela Inspector, temseacessoaosvriosparmetrosdeumobjetopresentenocenrio,bem como aos atributos de seus componentes (Components). Essa estrutura utilizada pelaUnityparaacomposiodeobjetossermelhorexplicadanaprximaseo.Aindanajanela
Inspector, podeseajustarosatributospblicos (parmetros)de cada componente, inclusiveduranteaexecuodaaplicao.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
7
Figure5JanelaInspector
2CriaoeManipulaodeGameObjects
Muitosmotoresdejogosdegeraoanteriordisponveisnomercadosobaseadosnousodeespecializao/heranaparaasclassesqueirorepresentarobjetosdejogo.Nestaarquitetura,oselementosdeumjogoherdamdeumaclassebsica(normalmentealgocomoGameObject)
e as novas funcionalidades so acrescentadas. Assim como em outras categorias dedesenvolvimentodesoftwareorientadoaobjetos,ousodemasiadodeherananessetipodesituaotornouseobsoleto,principalmenteporsuapoucaflexibilidadequandoosobjetosde
jogopossuemmltiploscomportamentos,oqueexigiriaheranamltipla.
A Unity3D baseada em ummodelomaismoderno para a arquitetura de objetos de jogobaseadoemcomposio[Bilas2002,Stoy2006,Passosetal.2008].Nessemodelo,umobjetodejogoespecificadoatravsdacomposiodevriasfuncionalidades,quesoagregadas(ou
removidas). Cada funcionalidade implementadapor um componente (classequeherdadeumcomponentebsico).EssecontainergenricoaindadenominadoGameObjectefuncionacomoumrepositriodefuncionalidades,oumaisespecificamente,componentes.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
8
Oscomponentessoentoresponsveispor implementarosdiversoscomportamentos que
umGame Object pode ter. Um componente pode ser desde um script, uma geometria decoliso,ouatumatexturadeGUI.Ouseja,GameObjectspodemrepresentarqualquercoisanocenrio,sendocaracterizadoscomoumasimplescmeraouumpersonagemapenaspelos
diferentes componentes que agrega. Conforme observado no manual de usurio da Unity(traduolivre):GameObjectumapanelavaziaeoscomponentessoosingredientesqueirocriarsuareceitadejogabilidade.
Abaixo apresentamos a estrutura de umGame Object padro que representa uma cmera
virtual. Nessa figura, a cmera umGameObject, porm, s definida como cmera poispossui um componente com essa funcionalidade. Alm disso, possui os componentesauxiliaresGUILayer,FlareLayereAudioListener.
Figure6ComposiodeumGameObject(Camera)
UmaobservaoimportantesobreosGameObjectsquetodoselesjpossuempelomenosocomponenteTransform,responsvelpeloseuposicionamento,orientaoeescalanosistema
referencialdacena.Almdisso,essecomponenteresponsvelpeladefiniodahierarquiadetransformaes,permitindooefeitodetransformaorelativadeacordocomaestruturadeascendncia/descendnciadecadaGameObject.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
9
Figure7Estruturamnimadeumobjeto
Na Unity tambm temos o conceito de Prefab. Um Prefab simplesmente ummodelo de
composiodeGameObject jdefinido,oumaisprecisamente,umtemplatequedefineumelemento atravs da composio dos vrios componentes. Podemos citar, por exemplo, adefiniodeumhumanidequenecessitadeumscriptdemovimentaoeumcomponente
decoliso.Nessecaso,poderamoscriarumPrefabdessehumanideecriarvriascpiasdomesmo, inclusivecomparmetrosdiferentes.Dessaforma,temosumganhoconsidervelde
tempopois issoevitariaque tivssemosque recriar essa composiopara cada instanciadehumanidepresentenocenrio.Prefabsseromaisdetalhadosnaseosobrescripting.
ImportaodeAssets
Geralmente,grandepartedodesenvolvimentodeumjogoestrelacionadocomautilizaoemanuseiodeAssetstaiscomotexturas,modelos3D,efeitosdesomescripts.Essesdiferentes
tiposdeartefatos sodesenvolvidosem ferramentasexternas,especializadosna construodecadaumdostiposdeAssets.Apssuacriaoouedio,Assetsprecisam,dealgumaforma,seremimportadosparadentrodeeditordecenasdomotordejogos.
AUnitypossuiumaformamuitosimpleserobustadeimportaodeAssetsparadentrodeum
projeto, bastando que os mesmos sejam arrastados para dentro de uma pasta da janelaProject.Aoefetuaresteprocedimento,aimportaofeitaautomaticamenteparaoprojeto,sem nenhuma interveno do usurio, ficando imediatamente disponvel para ser utilizada
dentrodaaplicao.AUnityaceitaformatosdedistribuiopopularesparamodelos3D(.FBX),udio(wav,mp3,etc)etexturas(jpg,png,bmpoumesmo.PSDdiretamente).
AlmdessasimplicidadedeimportaodosAssets,aUnitytambmofereceapossibilidadedavisualizao em tempo real de qualquer alterao feita nos mesmos. Com isso, temse um
ganho de produtividade, pois no precisase importar manualmente novas verses paradentro da Unity a cada vez que desejarmos efetuar uma alterao. A Unity verifica cadaarquivomodificadoeautomaticamenteatualizaomesmonacena.
3MateriaiseShaders
Jogos3Dnormalmentepossuemumgrandeapelovisual,ondeacriatividadeecapacidadedos
artistas realiza um papel fundamental para o sucesso. Atualmente, os dispositivos grficospermitemo uso de solues sofisticadas para a exibio em tempo real dasmalhas 3D doselementosdeumacena.Emespecial,fazseonipresenteousodeShadersprogramveis.
OmotordejogosUnity3DpermitetantoacriaodeShadersemlinguagensdeprogramao
comoCg ouGLSL, quanto o uso de funo fixa, almde incluir uma verstil coleo desses
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
10
Shadersnainstalaopadro.OvinculoentreumShadereumamalha3Dsefazatravsdeum
Material, que funciona comoumcontainerparaaspropriedadesvisuaisque cadaobjetodacenapossui.AfiguraaseguirmostracomoaatribuiodessaspropriedadespodeserfeitanajanelaInspectordentrodoeditordecenas.
Figure8ManipulaodeumMaterial
AespecificaodeumShaderdefinequaissoaspropriedadesqueestenecessitapararealizar
a exibio do objeto, enquanto o Material define os valores para essas propriedades. Aprximafiguramostraumarepresentaoesquemticadessarelao.DoisShaderssousados:uma para o corpo do carro e um para as rodas. Para o corpo do carro, dois materiais so
criados utilizandose do mesmo Shader. Em um deles, o valor da propriedade Color FX,especificadapeloShader, atribuda coma cor vermelha, enquantonooutrousadaa corazul.Dessaforma,podeseaplicaressesdiferentesmateriaisaobjetosnacena,comoilustrado
nafigura.
Figure9Relanaoentreshaders,materiaiseobjetos
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
11
Deformamaisespecfica,umShaderdefine:
* O mtodo de renderizao de um objeto. Isso inclui o uso de diversas variaes,
dependendododispositivogrficodousurio;
*TodososVertexePixelShadersusadosnessarenderizao;
*Aspropriedadesqueseroatribuveisnasespecificaesdemateriais;
*Parmetrosnumricosoudecorquetambmseroatribuveisnosmateriais;
UmMaterialdefine:
*Quaistexturasusarparaarenderizao;
*Quaiscoresusar;
*OsvaloresdequaisqueroutrosAssetstaiscomoCubmaps,limiaresdeluminncia,etc.
ParasecriarumnovoMaterial,usaseAssets>Create>Materialnomenuprincipal.UmavezcriadooMaterial,podeseaplicloaumobjetoeexperimentarsealterarosvaloresdesuaspropriedades. Para aplicar umMaterial a um objeto, basta de arrastar o mesmo da janela
ProjectparaqualquerobjetonacenaounajanelaHierarchy.
ParaaespecificaodeShaders,tantodefunofixaquantoprogramveis,aUnity3Dpossuiuma linguagem prpria chamada ShaderLab, que possui alguma semelhana com osarquivos.FXdefinidosparaoMicrosoftDirectXouaespecificaoNVidiaCgFX.Essalinguagem
declarativapossuiumasintaxesimplese incluicapacidadespoderosascomoreuso,mltiplospassos, criao procedural de texturas, entre outras.Nas prximas sees ser apresentadaumabreveintroduoaessalinguagem.
3.1IntroduoaShaderLab
ParasecriarumnovoShader,podeseescolherAssets>Create>Shaderdomenuprincipal,ou
duplicarumexistenteetrabalharapartirdomesmo.ShadersnaUnity3DsoarquivosdetextoepodemsereditadosfazendoseumduplocliquenosmesmosnajanelaProject.IniciaremosaexplicaocomumShaderbastantesimples:
Shader "Tutorial/Basic" { Properties { _Color ("Main Color", Color) = (1.0,0.5,0.5,1.0) } SubShader { Pass { Material { Diffuse [_Color] } Lighting On } } }
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
12
EsseShader simplesdemonstraumadas formasmaissimplesdeserenderizarumobjetoda
cena. definida apenas uma propriedade de cor (_Color), cujo valor padro especificadoatravsdeseuscomponentesRGBA.Pararenderizao,existeumanicaopodeSubShadercomumpassoapenas,queatribuiocomponentedifusonapipelinedefunofixacomovalor
especificadoparaapropriedade_Coloreligandoaopodeiluminaoporvrtices.
OShaderaseguirdefineumarenderizaomaiscompleta,masaindabaseadaemiluminaoporvrtices:
Shader "VertexLit" { Properties { _Color ("Main Color", Color) = (1,1,1,0.5) _SpecColor ("Spec Color", Color) = (1,1,1,1) _Emission ("Emmisive Color", Color) = (0,0,0,0) _Shininess ("Shininess", Range (0.01, 1)) = 0.7 _MainTex ("Base (RGB)", 2D) = "white" { } } SubShader { Pass { Material { Diffuse [_Color] Ambient [_Color] Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] } Lighting On SeparateSpecular On SetTexture [_MainTex] { constantColor [_Color] Combine texture * primary DOUBLE, texture * constant } } } }
Todo Shader deve iniciar com a palavra reservada Shader seguido de uma string que
representaseunome.EsteseronomeexibidonajanelaInspector.TodoocdigodoShaderficardefinidodentrodeumblocodelimitadopor{}.
*interessantequeonomesejacurtoedescritivo,nosendonecessriocorrespondercomonomedoarquivo.shader;
* Para utilizarse submenus, basta que se use o caractere /, por exemplo: um nome
"MeusShaders/Teste"iriaserorganizadoemumsubmenunoInspectordeumMaterialcomoMeusShaders>Teste.UmShadersemprecompostodeumblocodepropriedadesseguidoporumoumaisblocosdeSubShaders,queseroexplicadosaseguir.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
13
3.1.1Propriedades
As propriedades definidas no bloco inicial de um Shader sero aquelas que podem ser
atribudas atravs da janela Inspector para os materiais. O exemplo anterior apareceria daseguinteformanoeditordecena:
Figure10PropriedadesdeumShader(UNITYTECHNOLOGIES2009A)
A estrutura de uma declarao de uma propriedade mostrada na figura que segue. Oprimeiro termo designa o nome interno (referncia varivel), enquanto os valores entre
parnteses especificam a descrio (para a janela Inspector) e o tipo, respectivamente. Oultimo termoespecifica o valor padropara a propriedade. Encorajamoso leitor a buscar areferncia completa sobre tipos de propriedades possveis no manual de usurio da
ferramenta.
Figure11Declaraodeumapropriedade(UNITYTECHNOLOGIES2009A)
3.1.2SubShaders
Dispositivosgrficosdiferentespossuemcapacidadesdiferentes.Porexemplo,amaioriadas
placasgrficasatuaisdosuporteaPixelShaders,masmuitasplacasembarcadasemplacasme baratas no. Algumas suportam 4 texturas em um nico passo, enquanto outrassuportamapenas2,eassimpordiante.Parapermitirofuncionamentodojogoparaqualquer
que seja o dispositivo do usurio, um Shader pode conter mltiplos SubShaders. Pararenderizar um objeto, a Unity3D passa por todos os SubShaders e usa o primeiro que sejacompletamentesuportadopelohardwareemuso.Ocdigoaseguirilustraaestruturabsica
deumShaderdessetipo:
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
14
Shader "Structure Example" { Properties { /* ...shader properties... } SubShader { // ...subshader com Vertex e Pixel/fragment shaders... } SubShader { // ...subshader que usa 4 texturas por passo... } SubShader { // ...subshader que usa 2 texturas por passo... } SubShader { // ...subshader "feio" mas que roda em qualquer hardware... :) } }
Cada SubShader composto por uma coleo de passos. Para cada passo, a geometria doobjeto renderizada, portantoaomenosumpassonecessrio.OexemploVertxLit possuiapenasumpasso:
//... Pass { Material { Diffuse [_Color] Ambient [_Color] Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] } Lighting On SeparateSpecular On SetTexture [_MainTex] { constantColor [_Color] Combine texture * primary DOUBLE, texture * constant } } // ...
Todososcomandosemumpassoconfiguramohardwaregrficopararenderizarageometriade algumamaneira especfica.No exemplo acima, o blocoMaterial vincula as propriedades
definidaspeloShadercomosparmetrosdematerialdosistemadeiluminaoemfunofixa.O comando Lighting On liga a funcionalidade de iluminao por vrtices, enquantoSeparateSpecular On define o uso de uma cor separada para o parmetro de reflectncia
especular.
Todos esses comandos so mapeados diretamente ao modelo de pipeline de funo fixaOpenGL/Direct3D dos dispositivos grficos.O comando SetTexture bastante importante, eespecificaaformacomoaspropriedadesmapeadasparatexturassoaplicadasemconjunto
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
15
comomodelode iluminaodapipeline.Essecomandoseguidoporumblococontendoa
frmula que define a equao de combinao das texturas para cada pixel/fragmentorenderizado.Noexemploemquesto:
Combine texture * primary DOUBLE, texture * constant
Nessecomando,otermotexturereferentecorobtidapelomapeamentodatextura(nessecaso_MainTex).Estacormultiplicada(*)pelacorprimria(primary)dovrtice,computada
pelaequaodeiluminaodapipelinefixaeposteriormenteinterpoladaparacadapixel.Estevalorduplicado(DOUBLE)paraintensificara iluminao.Ovalordetransparncia(alpha)opcionalmente especificado aps a vrgula, onde computado pela multiplicao do valor
alpha da textura com a cor constante definida para a pipeline (constantColor). Diferentesmodos de combinao de textura podem ser especificados para a obteno dos resultadosdesejados.
3.2ShaderlabProgramvel
AUnitypermiteaodesenvolvedorousodeShadersprogramadosnalinguagemCgdaNVidia
ou em assembly. Tambm possvel a criao de Shaders com GLSL caso o jogo sejadisponibilizadoapenasparaMacOSX,umavezqueomduloderenderizaoparaWindowsusaDirectX,quenosuportatallinguagem.
Os Shaders programveis so includos diretamente em uma especificao ShaderLab,
substituindo o papel de um passo de renderizao em um SubShader. Essa integrao bastante interessante por dois motivos: simplifica a passagem de parmetros de materiaisparaessesShaders;permiteautilizaomistade funo fixa comShaders programveisem
um mesmo objeto (com o uso de mltiplo passos de renderizao). O cdigo a seguirexemplificacomoumpassoderenderizaopodeserespecificadoatravsdeumcdigoemCg.
Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // Cdigo para Vertex e Pixel Shaders (funes vert e frag) ENDCG }
Oexemploaseguir,umaespecificaoShaderLabcompleta,usaainformaodanormaldosvrticesparacomporacorexibida.Omarcador#pragmavertexvertindicaafunoqueserexecutadacomooVertexShaderparaosobjetosqueusamdesseShaderpararenderizao.
Deformasimilar,podesedefiniroPixelShader.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
16
Shader "Debug/Normals" { SubShader { Pass { Fog { Mode Off } CGPROGRAM #pragma vertex vert // parmetros de entrada para o Vertex Shader struct appdata { float4 vertex; float3 normal; }; struct v2f { float4 pos : POSITION; float4 color : COLOR; }; v2f vert (appdata v) { v2f o; o.pos = mul( glstate.matrix.mvp, v.vertex ); o.color.xyz = v.normal * 0.5 + 0.5; o.color.w = 1.0; return o; } ENDCG } } }
Observase que nesse exemplo, no foi especificada uma funo para o Pixel Shader, que
nessecasoserumaversopadroqueusainterpolaoparaexibirascorescomputadasporesseVextexShader.Afiguraaseguirmostraoresultadodessecdigoaplicadoaumobjeto.
Figure12Shaderqueexibenormais
Damesma formaqueosShaderde funo fixa,possvel sepassarparmetrosdematerialquesoespecificadosnoeditordecena,usartexturas,mltiploscanaisdemapeamentoUV,
ouqualqueroutraopoquesejainteressanteparaseatingirosresultadosdesejados.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
17
4SistemadeFsica
A Unity3D utiliza internamente o popular motor de fsica PhysX da NVidia para efetuar a
simulao fsicade corpos rgidoseo tratamentode colises.APhysX ummotorde fsicautilizado em vrios jogos populares tais comoMass Effect,Medal of Honor: Airbone, entreoutros,sendoconsideradoumdosmaiscompletosdomercado,inclusivecomapossibilidade
deserexecutadoemGPUs,oquepodeacarretaremmaiordesempenho.Comessaintegrao,odesenvolvedortemacessosimplificadoaumsistemadesimulaofsicasofisticado.VriasdasfuncionalidadesoferecidaspelaPhysXsomanipuladasgraficamenteatravsdainterface
daUnity,permitindoquesimulaesfsicascomplexassejamdesenvolvidasempoucotempo,aumentandoaprodutividadedodesenvolvedor.
Colliders
Geometrias bsicas de coliso tais como esfera, cubo, cpsula, ou precisas como umMeshCollider, so implementados como componentes para objetos de jogo na Unity. Esses
componentes podem ser anexados a um objeto da cena, que passar a fazer parte dasimulaofsica.Osparmetrosdecadageometriadecolisoestodisponveisparaalteraopeloeditordecena.
Dessaforma,podesetratarasimulaofsicadevriosobjetosatravsdautilizaodeumageometria envolvente ou, caso necessrio, at mesmo da geometria real do objeto,geralmente sendo utilizado em cenrios estticos, que necessitam de fidelidade de
representao. Alm disso, devido ao fato do cenrio ser esttico, vrias otimizaes soefetuadasafimdegarantirumbomdesempenhodasimulao.
Alm de sua funo principal na simulao fsica, estes componentes tambm podem serutilizados como triggers, ou seja, elementos que ativam o processamento de um trecho de
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
18
cdigo caso ocorra uma coliso com estes. Componentes definidos como triggers no so
simuladoscomocomponentesdefsicanormaisduranteasimulao.
CharacterController
Adicionalmenteaoquejfoiapresentado,aUnitytambmofereceacessoaumtipoespecialde objeto disponvel na PhysX: o Character Controller. Geralmente, o controle preciso deobjetos que sofrem ao da fsica bastante complicado de ser efetuado durante uma
simulao. Um exemplo desse tipo de preciso seria o controle de um personagem. Comosabemos, esse tipo de simulao fsica bastante complexo, pois alm do tratamento dasforas,devesetratartambmoasrotaesindesejadas.
Uma soluo seria simplesmente ignorar a geometria de coliso do personagem, porm
adotando essa soluo no teramos a interao do mesmo com os objetos do cenrio.UtilizandoocomponenteCharacterController,temseapossibilidadedecontrolaressetipodeobjetofacilmente,evitandotodasasoperaesindesejadasditasanteriormente,mantendoa
interao com os objetos do cenrio. Abaixo temse um exemplo da configurao desseobjetoemumpersonagem.
Figure13Componenteparapersonagens
Ragdolls
AlmdoCharacterController, temse tambmapossibilidadedesimular ragdolls comouso
do componente Character Joint. Este componente permite que simulaes de personagensinanimados (mortos?) sejam realizadas mais fielmente, tal como um boneco de pano.Utilizando umWizard, podese especificar onde encontramse os pivs de rotao, almde
vriosoutrosparmetrosresponsveispelasimulaodessetipodeobjeto.Abaixotemosumaimagemdaconfiguraodessetipodesimulao.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
19
Figure14Sistemaderagdoll
WheelColliders
Um outro recurso bastante til oferecido pela PhysX atravs da Unity um componenteespecialparasimulaodeveculoschamadoWheelCollider.Comestecomponente,podesesimular fora de trao, frico, entre outras caractersticas que ocorrem normalmente em
rodasdeveculos.Nestecaso,omovimentodocarroefetuadoatravsdaaplicaodeforasnessescomponentes.Autilizaodestecomponentepermitesimulardesdeforasdefricoatocomportamentodeamortecedores,conformepodeserobservadoabaixo.
Figure15WheelColliders
Utilizando a hierarquia entreGameObjects daUnity, omovimento de um veculo pode ser
simuladofacilmenteatravsdaconfiguraohierrquicadestescomponentescorretamente.
Joints
Umafuncionalidademuito importantedisponvelnaUnityapossibilidadedousodeJoints,oujunes,devriostiposparaasimulaodeobjetosconectadosaoutroscomrestriesemseugraudeliberdade.OsseguintesJointsestodisponveisnaPhysXatravsdaUnity:
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
20
HingeJoint:permiteaconexodedoisobjetosatravsdasimulaodeumadobradia.Ideal
paraasimulaodeportas,pnduloseoutrosobjetosquenecessitemdestetipodeconexo.
Figure16HingeJoint
Spring Joint:permiteaconexodedoisabjetosatravsdasimulaodeumamola.Objetosconectados utilizando esse tipo de joint possuem uma distnciamxima de separao que,apssoltos,tendemavoltarasuadistnciaderepouso.
Figure17SpringJoint
FixedJoint:permiteaconexoentredoisobjetosdeformaqueosmovimentosdeumobjetosejamdependentesdooutro.SimilarautilizaodashierarquiasdetransformaodaUnity,
porm,implementadoatravsdafsica.Idealparaobjetosquepossamserdesconectadosumdooutroduranteasimulao.
Figure18FixedJoint
Configurable Joint: esse tipo de joint oferece a possibilidade de customizao de seu
comportamento. Aqui, vrios tipos de configurao podem ser efetuadas como restrio demovimento e/ou rotao e acelerao demovimento e rotao. Dessa forma, temos comoconstruirumjointdeacordocomanecessidaderequerida.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
21
Por fim, a PhysX nos permite efetuar simulaes de superfcies de contatos atravs dos
materiais fsicos. Com isso, temos a possibilidade de alterar a forma como os objetosinteragem atravs do ajuste das propriedades dosmateriais que estes objetos utilizam taiscomofricoeoefeitodainteraoentreacolisodedoisobjetos.
5Scripting
OsistemadescriptingdaUnity3Dabrangenteeflexvel,oquepermiteodesenvolvimento
de jogos completos sem a necessidade do uso de C/C++. Internamente, os scripts soexecutados atravs de uma versomodificada da bibliotecaMono, uma implementao decdigo aberto para o sistema .Net. Essa biblioteca, permite que os scripts sejam
implementadosemqualquerumadetrslinguagens,escolhadoprogramador:javascript,C#ouBoo(umdialetodePython).Noexistepenalidadeporseescolherumalinguagemououtra,sendo inclusive possvel se usar mais de uma delas em um mesmo jogo. A documentao
oficial,entretanto,utilizaJavascriptparaamaioriadosexemplos.
De forma consistente arquitetura desenvolvida, scripts na Unity3D so acoplados comocomponentes de game objects. Dessa forma, importante projetar os scripts de maneiramodular,ganhandocomissoaflexibilidadedoreuso.Nessaseo,iremosdescreveralgumas
caractersticasimportantesdosistemadescriptingdaUnity3D.
5.1Criaodescripts
Paracriarumscript,bastaescolheraopoAssets>Create>Javascriptnomenuprincipal.Tambm possvel se criar scripts usandoo boto direito domouse sobre a janelaproject.Existeaopodesecriaroscriptemqualquerumadastrslinguagensdisponveis.
Figure19Criaodeumscript(UNITYTECHNOLOGIES2009A)
possvelseeditaroscriptclicandoduasvezessobreomesmonajanelaProject.Issoirabriroeditorpadro(UniScitenoWindowsouUnitronnoMacOSX).Aediodescriptssempre
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
22
feita emumprograma externo e no diretamente pelaUnity3D, que pode ser alterado nas
prefernciasdeusurio.EsseocontedodeumJavascriptrecemcriadonaUnity3D:
function Update () { }
Um script novo no realiza tarefa alguma ainda, ento podese adicionar funcionalidade aomesmo.Ocdigoaseguirservecomoumexemplobsico:
function Update () { print("Hello World"); }
Aoserexecutado,essecdigoirexibiraexpresso"HelloWorld"noconsole.Masaindanoexistenadaquecausaaexecuodessecdigo.necessrioseacoplaressescriptaumGameObjectativonacenaparaqueissoocorra.Issopodeserfeitosearrastandooarquivodoscript
paraoobjeto escolhido tantona janelaHierarchy, quantodiretamente aomesmona janelaScene. Tambmpodese selecionar o objeto escolhido e adicionar o script atravs domenuprincipal,comomostraafiguraaseguir.
Figure20Adiodeumscriptaumobjetoselecionado(UNITYTECHNOLOGIES2009A)
Ao se selecionar o objeto ao qual o script recmcriado foi adicionado, ser possvel sevisualizaromesmo,indicandosuacorretavinculao.
Figure21Scriptvinculadoaobjeto(UNITYTECHNOLOGIES2009A)
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
23
Afunoprint()bastantetilquandoseestdepurandoumscript,masnofaznadadetil
emtermosde jogabilidade.Ocdigoa seguiradicionaalguma funcionalidadeaoobjetoquecontmoscript:
function Update () { transform.Rotate(0, 5*Time.deltaTime, 0); }
Para quem novo em linguagens de script para jogos, o cdigo pode parecer um pouco
confuso.Algunsconceitosimportantesquedevemseraprendidos:
1.functionUpdate(){}asobrescritadomtodoUpdate,queserexecutadopelaUnity3Dumavezacadaframe;
2.transformumarefernciaaocomponenteTransformdoGameObjectemquesto.
3.Rotate()ummtodoexistentenocomponenteTransform;
4.Osparmetrosdessemtodorepresentamosgrausderotaosobrecadaumdoseixos
emumespao3D:X,Y,andZ.
5. Time.deltaTime um atributo da classe Time que representa o tempo que passou (emsegundos)desdequeoltimoUpdateocorreu.Essavarivelserveparagarantirqueoobjetoem questo seja rotacionado na mesma velocidade, independente da capacidade de
processamento do computador no qual o cdigo ser executado. Dessa forma, 5 *Time.deltaTimerepresenta5grausporsegundo.
J existem referncias como essa para alguns componentes que so comuns de seremutilizadosemobjetos.Algunsdosmaisimportantesso:
transformrepresentaoposicionamento,orientaoeescaladoobjeto; rigidbodyrepresentaocorporgidoparaosubsistemadefsica(quandoexistir); animation utilizadoparaacionaros ciclosdeanimaodeummodelo criadoemuma
ferramentadeanimaocomoo3DStudioMax;
renderercomponenteencarregadodaexibiodeumobjetonacena; audiofontedeefeitodeudio,vinculadaaumobjetopara incorporarposicionamento
deudio3D;
collidergeometriadecolisoparaosubsistemadefsicaouparautilizaocomoTrigger.
5.2Acessoaoutroscomponentesetrocademensagens
Entretanto, muitos outros componentes prexistentes, assim como Scripts criadosespecificamente para cada jogo, no tm referncias especiais includas. Para esses, necessria algumamaneira de se obter uma referncia em tempode execuo. Isso feito
atravsdomtodoGetComponent()existenteemqualquerscript.Essemtodopodeserusadopara se obter a referncia a qualquer componente vinculado ao objeto no qual o script emquestoestacoplado(ouaqualquerobjetoquesetenhaumarefernciaemumavarivel).O
exemploaseguirmostracomoobterarefernciaaumscriptchamado"Controlador":
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
24
var c : Controlador = GetComponent(Controlador); c.MeuMetodo();
Nesse exemplo, a varivel "c" foi usada para se guardar a referencia a instncia do script
Controlador vinculado aomesmo objeto de jogo em questo. Em seguida, foi executado omtodo"MeuMtodo"nessamesmainstncia.
sempre prefervel, por questes de desempenho, guardar referncias aos componentes
comoexemplificadoacima. Entretanto, existem situaesondepode serdesejvel seenviaruma determinada mensagem a todos os componentes de um determinado objeto. Isso possvel atravs do mtodo SendMessage da classeGameObject. Todo script tem acesso
instncia deGameObject ao qual est vinculado. O seguinte exemplo tenta executar (casoexista)omtodo"Teste"emtodososcomponentesdoobjetoaoqualessescriptforvinculado:
gameObject.SendMessage("Teste");
UmexemplocomumparaousodeSendMessageaaplicaode"dano"aumpersonagemque foi atingido por uma bala, bomba, ou qualquer outro objeto do jogo que possa causar
algum efeito desse tipo. A soluo pode ser criar esse projtil como um objeto comcomponentes de fsica (collider e rigidbody), e incluir um script simples que envia umamensagemassimqueesseprojtilatingiralgonacena:
function OnCollisionEnter(collision : Collision) { collision.gameObject.SendMessage("AplicarDano"); Destroy(this.gameObject); }
Ocdigoacima serexecutadoassimqueoprojtil (objeto contendo representao fsicaeesse script) colidir com outro objeto com fsica na cena. Amensagem enviada ir causar a
execuodomtodo"AplicarDano"emtodososscriptsdoobjetoatingido,casoessemtodoexista.Alinhaseguinteremoveoprojtildacena.
5.3Acessoavariveis
Osscriptsderotaoapresentadosatagoragiramoobjeto5grausacadasegundo.Talvezseja interessante rotacionar aumavelocidadeangular diferentedessa.Umaopo alterar
esse valor no cdigo e salvlo, mas exige uma recompilao desse, aomesmo tempo queimpedequeusemosomesmoscriptcomdiferentesvelocidades.Existeumaformabemmaisrpida para isso, que inclusive permite a alterao de parmetros como esse em tempo de
execuonoeditordecena,ebastantesimplesdeserimplementada.
Em vez de digitar o valor 5 diretamente, podese criar um atributo speed, do tipo float, noscripteusaressenachamadaaomtodoRotate().Oexemploaseguirmostracomoissopodeserfeito:
var speed = 5.0; function Update () { transform.Rotate(0, speed*Time.deltaTime, 0); }
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
25
Agoraobserveoobjeto contendoo script na janela Inspector. Podesenotarqueo valordo
atributoaparecenoeditordecena,comomostraafiguraaseguir.
Figure22Alteraodovalordeumatributo(UNITYTECHNOLOGIES2009A)
EstevalorpodeagorasermodificadodiretamentepelajanelaInspector,damesmaformaque
podeserenomearumarquivo.Selecionandoseamesma,podesealterarseuvalor.Tambmpodesedeslizaros valores comomouseusandoobotodireito.Podesealterarovalordeatributoscomoesseaqualquermomento,inclusiveenquantoojogoestsendoexecutado.
Ao apertar o boto Play e modificarse o valor desse atributo, a velocidade de rotao do
objeto ir ser alterada instantaneamente.Ao se sairdomododeexecuo,o valor voltaaoanterior. Dessa forma, podese experimentar a vontade e ao final decidir manter o valoranterioroualterlodeformapermanente(semobotoPlaypressionado).
Essa formadealteraode valoresematributos tambm implicaquepossvel seusarum
mesmo script em diversos objetos, cada um com um valor especfico para omesmo. Cadaalteraofeitairafetaravelocidadeapenasdoobjetonoqualamudanafoirealizada.
5.4PrefabseInstanciao
A criao de game objects atravs de composio bastante flexvel, mas em algunsmomentospodeserbastantetrabalhosorecriarcertasdessascomposiesqueprecisamser
usadasemdiversascenasdeummesmojogo,compartilhadascomoutrosdesenvolvedoresoumesmoinstanciadasinterativamenteduranteaexecuodojogo.
Um Prefab um tipo de asset um Game Object reusvel armazenado na janela Project.Prefabs podem ser inseridos em diversas cenas,mltiplas vezes em cada uma delas. Ao se
adicionar um Prefab a uma cena, est sendo criada uma instncia do mesmo. Todas essasinstncias esto ligadas ao Prefab original e so no fundo clones desse. Independente dequantasinstnciasexistamnoprojeto,qualquermudanafeitaaoPrefaboriginalseraplicada
atodasessascpiasexistentesnascenas.
ParasecriarumPrefab,precisocriarumcontainervazioparaomesmousandoomenu.EssePrefabvazionocontmumGameObjectainda,eportantonopodeserinstanciadonacena
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
26
ainda.ApsserrecheadocomdadosdeumGameObject,issopodeserfeito.Afiguraaseguir
mostraumPrefab recmcriado,aindasemcontedo (indicadopelaausnciadecoremseunomenajanelaProject).
Figure23CriaodeumPrefab(UNITYTECHNOLOGIES2009A)
Parapreencherumprefab,deveserusadoalgumobjetoexistentenacenaatual.Oseguinteroteiroexplicacomoesseprocessopodeserrealizado:
1.EscolhaAssets>Create>Prefabnomenuprincipaledumnomeaomesmo;
2.NajanelaHierarchy,selecioneoGameObjectquesedesejaguardarcomoumPrefab;
3.ArrasteesolteesseobjetodajanelaHierarchysobreonovoPrefabnajanelaProject.
Aps realizados esses passos, o objeto, todos os seus "filhos", componentes e valores deatributos foram copiados noPrefab. Agora possvel se criar diversas instncias domesmo
arrantandoseparacenaapartirdajanelaHierarchy.OprprioobjetousadoparaacriaodoPrefabfoitransformadoemumainstnciadomesmo.
Todas as instnciasdeumPrefab possuemamesmaestruturae, originalmente, osmesmosvalores para os atributos de seus componentes. Entretanto, possvel alterar diversas
instncias, ainda vinculadas aoPrefab original, os valores de alguns atributos. As alteraesfeitasaoPrefabaindaseropropagadasparaessas instncias,apenasosatributosmarcadoscomoespecficos tero seus valoresmantidos. A seguinte figuramostra esse procedimento,
que consiste em se marcar a caixa que fica a esquerda do nome do atributo, na janelaHierarchy (noexemploemquesto,oatributodenomeRepeatTriggernoseralteradodeacordocomasmodificaesnoPrefab).
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
27
Figure24AtributodesvinculadodoPrefab(UNITYTECHNOLOGIES2009A)
Emdiversassituaespodesernecessriose instanciarobjetosemtempodeexecuo.Um
exemploque ilustraessecenriopodeseracriaode foguetesqueso lanadosquandoojogadorpressionaumateclaouboto.Prefabssoumaferramentatilnessassituaes,poisacriaodecpiasdosmesmosatravsdescriptsbastantesimples,comoexplicadoaseguir.
AprimeiratarefaacriaodeumPrefabcontendooscomponentesevalorescalibradospara
osatributosdesejadosparaoreferidofoguete.Noiremosentraremdetalhessobreacriaodafuncionalidadedofogueteemsi,esimcomoprocessodeinstanciaodomesmo.ParaseterarefernciaaumPrefabatravsdeumscript,bastaquesecrieumatributocujotiposeja
umdoscomponentesexistentesnessePrefab.Nonossoexemplo,ofogueteserguiadopelosistema de simulao fsica, e conseqentemente um dos componentes do mesmo um
Rigidbody,dessaformaoscriptdeinstanciaodeveincluiraseguintelinha:
var rocket : Rigidbody;
IssoirpermitiraodesenvolvedorarrastaroPrefabdofoguetediretamentedajanelaProject
paraajanelaHierarchydeformaaestabelecerareferncianecessria.Ocdigoaseguircriauma instncia do foguete em tempo de execuo, ao mesmo tempo que adiciona umavelocidadeinicialaomesmo,referenteorientaodoobjetoqueocriou:
var r : Rigidbody = Instantiate(rocket, transform.position, transform.rotation); rocket.velocity = transform.forward * speed;
importanteobservarqueocdigoacimaindependedaestruturautilizadaparaoPrefabquerepresentao foguete,desdequeomesmo incluaumcomponenteRigidbody. Issopermitea
criaodeprottipossimplesefuncionaisbemantesdaexistnciadeAssetsdefinitivoscomomodelos3Dousistemasdepartculas.Osscriptscriadosinicialmenteaindaseropossveisdese usar mesmo com a evoluo desse Prefab para uma verso mais bem acabada para a
representaodessefoguete.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
28
6Concluso
EssetutorialapresentouumintroduosucintasobreomotordejogosUnity3D.Oobjetivofoi
expor de maneira simplificada as principais funcionalidades dessa verstil ferramenta dedesenvolvimento de jogos. Esperase que o leitor interessado busque um maioraprofundamentonesseassuntoatravsdabibliografiasugeridanofinaldessetutorial.
Osautoresgostariamdeagradecerspessoasquediretaouindiretamentecontriburampara
a confeco desse material. Em especial gostaramos de agradecer s nossas famlias, pelapacincia e apoio incondicional, e tambm excelente comunidade de desenvolvedores ecolaboradoresUnitypelasexcelentesinformaesetutoriaisdisponibilizados.
Finalmente,osautoresgostariamdeagradecerosleitoresdessetutorialeinformarqueatoda
aequipedoUFFMediaLabsecolocadisposioparacontatoatravsdosemailsinformadosnacapa.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
29
Bibliografia
BILAS,S.2002.Adatadrivengameobjectsystem.TalkattheGameDevelopersConference02.
PASSOS, E. B., SILVA, J., NASCIMENTO, G. T., KOZOVITS, L. CLUA, E. W. G. 2008. Fast and safe
prototypingofgameobjectswithdependencyinjection.AnaisdoSimpsioBrasileirodeGameseEntretenimentoDigital.SoLeopoldo,RS.2008
STOY,C.2006.Gameobjectcomponentsystem. InGameProgrammingGems6,CharlesRiverMedia,M.Dickheiser,Ed.,Pginas393a403.
UNITY TECHNOLOGIES. 2009 (A). Unity 3D User Manual [online]. Disponvel em:
www.unity3d.com/support/documentation/Manual[Acessadoem20agostode2009].
UNITY TECHNOLOGIES. 2009 (B). Unity 3D Community Forum [online]. Disponvel em:forum.unity3d.com/[Acessadoem25agostode2009].
UNITY TECHNOLOGIES. 2009 (C). Unity 3D Online Tutorials [online]. Disponvel em:www.unity3d.com/support/documentation/tutorials[Acessadoem30agostode2009].
UNIFY COMMUNITY. 2009. Unity 3D Community Wiki [online]. Disponvel em:
www.unifycommunity.com/wiki[Acessadoem28agostode2009].
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
30