Você está na página 1de 30

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Tutorial:DesenvolvimentodeJogoscomUnity3D
ErickBaptistaPassos
epassos@ic.uff.br

JosRicardodaSilvaJr.
josericardo.jr@gmail.com

FernandoEmilianoCardosoRibeiro
one.fernando@gmail.com

PedroThiagoMouro
pedrothiago@hotmail.com

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Apresentao Essetutorialapresentadocomoumabreveintroduoaodesenvolvimentodejogoscomo motor Unity3D. Explicaes muito detalhadas, mesmo que cobrindo apenas parte das funcionalidades existentes, ocupariam bem mais que as trs dezenas de pginas disponveis paraestetutorial.Dessaforma,recomendamosoleitorinteressadoabuscarmaisinformaes na abrangente e excelente documentao da ferramenta, disponvel tanto localmente, ao se realizarasuainstalao,quantoonlineatravsdositehttp://www.unity3d.com/support. Tambmporquestesdeespao,nofoiincludaumaintroduogeralaodesenvolvimento dejogos.Esperasequeoleitorpossuaalgumafamiliaridadecomosconceitoseferramentas relacionados ao assunto tais como renderizao em temporeal, modelagem e animao 3D, 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 forma independente. AimagemdacapafoicedidadoprojetoFranaAntrtica,decujaequipededesenvolvimento fazemparte alguns dos autores. O jogoFranaAntrticaestsendodesenvolvidoatravsda Unity3DeumprojetofinanciadopelaSecretariadeCulturadoEstadodoRiodeJaneiro. Por fim, informase que algumas das figuras e exemplos apresentados foram adaptados do manualdaferramenta,detutoriaisonline(http://www.unity3d.com/resources),bemcomode discusses disponveis no forum comunitrio de desenvolvedores Unity (http://forum.unity3d.com). Tambm recomendamos o leitor que explore essas referncias paraummaioraprofundamento.

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Guiadeleitura 1Introduo BreveapresentaodosmdulosdaUnity3Dedetalhamentodainterfacedoeditordecenas. 2CriaoeManipulaodeGameObjects ExplicaodomodelodeobjetosdaUnity3Deasformasbsicasdecriao,composioe alteraodosmesmos. 3MateriaiseShaders BreveintroduolinguagemdeespecificaodeShadersdaUnity3D:ShaderLab.So demonstradosexemplosparapipelinedefunofixa,bemcomoShadersprogramveis. 4SistemadeFsica IntroduoaoscomponentesrelacionadosaosubsistemaPhysXdesimulaofsica. 5Scripting Apresentao,atravsdeexemplos,dosprincipaisconceitosparaaprogramaodescripts comaUnity3D. 6Concluso Consideraesfinaisdosautores. Bibliografia Leiturasrecomendadasparaaquelesinteressadosemummaioraprofundamento.

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

1Introduo Odesenvolvimentodejogos3Dumaatividadeaomesmotempogratificanteedesafiadora. Diversashabilidades,dediferentesreasdoconhecimento,sonecessriasnesseprocesso.O usodeferramentasparaauxiliarnastarefasrepetitivasfundamentalnessetipodeatividade, eaolongodotempo,umtipoespecialdeferramenta,conhecidocomomotordejogos(game engine) foi evoluindo de maneira paralela aos prprios jogos, ao ponto que se tornaram produtosvaliososedecertaformapopulares. Alguns mdulos e funcionalidades auxiliares so condies necessrias para que uma ferramenta seja considerada um motor de jogos completo. Em especial, um sistema de renderizao 3D com suporte a Shaders programveis e um sistema de simulao fsica so fundamentais. Uma boa arquitetura para a programao de scripts, um editor de cenas integrado,eacapacidadedeseimportardiretamentemodelos3d,imagenseefeitosdeudio produzidos em ferramentas externas, so as caractersticas existentes nos motores de jogos. Alm disso, desejvel que os jogos desenvolvidos possam ser distribudos em mltiplas plataformascomoPC,consolesoumesmodispositivosmveis. AUnity3Dabstraidodesenvolvedordejogosanecessidadedeutilizardiretamente DirectXou OpenGL (apesar de ainda ser possvel, caso necessrio), suportando a criao de Shaders complexoscomalinguagem Cgda NVidia.Internamente,osubsistemadesimulaofsicao popular PhysX,tambmda NVidia.Paraaexecuodescripts,aUnityusaumaversodealto desempenhodabibliotecaMono,umaimplementaodecdigoabertodoframework.Netda Microsoft. Aindaquesejaumaferramentaqueincluioestadodaartenoseusegmento,aUnity3Dtem um preo acessvel, o que apenas mais uma das razes para sua crescente popularidade. MesmousandoaversomaisbaratadaUnity3d,osjogospodemserdesenvolvidosparaPC, Mac ou mesmo embutidos em uma pgina Web. Com a aquisio de licenas especficas, podesedesenvolveredistribuirjogospara iPhone,atravsdalojaonlineda Apple,oumesmo paraoconsoleWiidaNintendo. 1.1Interface O motor de jogos Unity3D possui uma interface bastante simples e amigvel que objetiva facilitar 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.Afiguraabaixoumacapturacontendoumarepresentaoesquemtica eaidentificaodecadaumadessasjanelasnoeditordecenasdaUnity3D.

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Figure1InterfacedoeditordecenadaUnity3D(UNITYTECHNOLOGIES2009A)

Projectview Ajanela Projectainterfaceparamanipulaoeorganizaodosvriosarquivos(Assets)que compemumprojetotaiscomoscripts,modelos,texturas,efeitosdeudioePrefabs,osquais sero detalhados mais adiante na seo de scripting. A estrutura exibida na janela Project correspondente subpasta Assets dentro da pasta do projeto no sistema de arquivos do computador. Recomendase que a manipulao de sua estrutura e contedo seja efetuada somentedentrodaUnity3D,afimdemanteraintegridadedosmetadadosquesoassociados a estes elementos. Entretanto, certas mudanas, como atualizao de uma textura por um editordeimagensporexemplo,oumesmoaadiodenovos Assets,podeserfeitadeforma seguradiretamentenosistemadearquivos.

Figure2JanelaProject

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Hierarchyview A janela Hierarchy exibe todos os elementos da cena que encontramse na cena que se est editando. Alm disso, nessa janela podemos organizar e visualizar a hierarquia de de composio entre os vrios objetos que compem a cena (grafo de cena). O funcionamento dessesobjetos,bemcomoahierarquiadetransformaoserexplicadomaisdetalhadamente naprximaseo.

Figure3JanelaHierarchycomdoisobjetos

Sceneview AjanelaSceneaformaprincipaldemanipulaodoselementosvisuaisnoeditordecenasda Unity, possibilitando a orientao e posicionamento desses elementos com um feedback imediatodoefeitodasalteraesefetuadas.Nestajanela,podesemanipulargraficamenteos objetosatravsdasopesdearrastaresoltarcomomouse.Essamanipulaosemelhante quela de ferramentas de modelagem 3D e podese manipular objetos tais como cmeras, cenrios,personagensetodososelementosquecompemacena. Devidoasuagrandeimportnciaduranteodesenvolvimentodeumaaplicao,vriasformas denavegaosooferecidasafimdeaumentaraindamaisaprodutividadedodesenvolvedor. Alm disso, as ferramentas bsicas de manipulao dos elementos da cena, tais como pan, translao,rotaoeescalatambmestodisponveisparautilizaonestajanelaatravsde atalhosdeteclado(teclasQ,W,EeR).

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Figure4JanelaScene

Gameview A janela Game responsvel pela visualizao da aplicao em desenvolvimento da forma queelaserexibidaquandofinalizada.Nessajanela,podeserapidamenteterumaprviade comooselementosestosecomportandodentrodaaplicao.Almdisso,aUnityfornecea opodeseparalisar(boto pause)asimulaoenquantoelaestiveremdepurao,deforma a possibilitar que os parmetros dos vrios elementos possam ser ajustados para experimentao.Lembramosqueoajustedessesparmetrosnonecessitamqueasimulao estejaparalisada,podendoseralteradosinclusiveenquantoasimulaoestejaemexecuo. Nesta janela, tambm podese visualizar vrias informaes estatsticas (stats) sobre a simulao,taiscomotempodeprocessamentoenmerodeframesporsegundo,nmerode tringulos 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 pela Unityparaacomposiodeobjetossermelhorexplicadanaprximaseo.Aindanajanela Inspector, podese ajustar os atributos pblicos (parmetros) de cada componente, inclusive duranteaexecuodaaplicao.

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Figure5JanelaInspector

2CriaoeManipulaodeGameObjects Muitosmotoresdejogosdegeraoanteriordisponveisnomercadosobaseadosnousode especializao/heranaparaasclassesqueirorepresentarobjetosdejogo.Nestaarquitetura, oselementosdeumjogoherdamdeumaclassebsica(normalmentealgocomoGameObject) e as novas funcionalidades so acrescentadas. Assim como em outras categorias de desenvolvimentodesoftwareorientadoaobjetos,ousodemasiadodeherananessetipode situaotornouseobsoleto,principalmenteporsuapoucaflexibilidadequandoosobjetosde jogopossuemmltiploscomportamentos,oqueexigiriaheranamltipla. A Unity3D baseada em um modelo mais moderno para a arquitetura de objetos de jogo baseadoemcomposio[Bilas2002,Stoy2006,Passosetal.2008].Nessemodelo,umobjeto dejogoespecificadoatravsdacomposiodevriasfuncionalidades,quesoagregadas(ou removidas). Cada funcionalidade implementada por um componente (classe que herda de umcomponentebsico).EssecontainergenricoaindadenominadoGameObjectefunciona comoumrepositriodefuncionalidades,oumaisespecificamente,componentes.

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Oscomponentessoentoresponsveisporimplementarosdiversoscomportamentosque um Game Object pode ter. Um componente pode ser desde um script, uma geometria de coliso,ouatumatexturadeGUI.Ouseja, GameObjectspodemrepresentarqualquercoisa nocenrio,sendocaracterizadoscomoumasimplescmeraouumpersonagemapenaspelos diferentes componentes que agrega. Conforme observado no manual de usurio da Unity (traduolivre):GameObjectumapanelavaziaeoscomponentessoosingredientesque irocriarsuareceitadejogabilidade. Abaixo apresentamos a estrutura de um Game Object padro que representa uma cmera virtual. Nessa figura, a cmera um Game Object, porm, s definida como cmera pois possui um componente com essa funcionalidade. Alm disso, possui os componentes auxiliaresGUILayer,FlareLayereAudioListener.

Figure6ComposiodeumGameObject(Camera)

UmaobservaoimportantesobreosGameObjectsquetodoselesjpossuempelomenoso componente Transform,responsvelpeloseuposicionamento,orientaoeescalanosistema referencialdacena.Almdisso,essecomponenteresponsvelpeladefiniodahierarquia detransformaes,permitindooefeitodetransformaorelativadeacordocomaestrutura deascendncia/descendnciadecadaGameObject.

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Figure7Estruturamnimadeumobjeto

Na Unity tambm temos o conceito de Prefab. Um Prefab simplesmente um modelo de composio de Game Object j definido, ou mais precisamente, um template que define um elemento atravs da composio dos vrios componentes. Podemos citar, por exemplo, a definiodeumhumanidequenecessitadeumscriptdemovimentaoeumcomponente decoliso.Nessecaso,poderamoscriarum Prefabdessehumanideecriarvriascpiasdo mesmo,inclusivecomparmetrosdiferentes.Dessaforma,temosumganhoconsidervelde tempo pois isso evitaria que tivssemos que recriar essa composio para cada instancia de humanidepresentenocenrio.Prefabsseromaisdetalhadosnaseosobrescripting. ImportaodeAssets Geralmente,grandepartedodesenvolvimentodeumjogoestrelacionadocomautilizaoe manuseiode Assetstaiscomotexturas,modelos3D,efeitosdesome scripts.Essesdiferentes tipos de artefatos so desenvolvidos em ferramentas externas, especializados na construo decadaumdostiposdeAssets.Apssuacriaoouedio,Assetsprecisam,dealgumaforma, seremimportadosparadentrodeeditordecenasdomotordejogos. AUnitypossuiumaformamuitosimpleserobustadeimportaodeAssetsparadentrodeum projeto, bastando que os mesmos sejam arrastados para dentro de uma pasta da janela Project.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,aUnitytambmofereceapossibilidadeda visualizao em tempo real de qualquer alterao feita nos mesmos. Com isso, temse um ganho de produtividade, pois no precisase importar manualmente novas verses para dentro da Unity a cada vez que desejarmos efetuar uma alterao. A Unity verifica cada arquivomodificadoeautomaticamenteatualizaomesmonacena. 3MateriaiseShaders Jogos3Dnormalmentepossuemumgrandeapelovisual,ondeacriatividadeecapacidadedos artistas realiza um papel fundamental para o sucesso. Atualmente, os dispositivos grficos permitem o uso de solues sofisticadas para a exibio em tempo real das malhas 3D dos elementosdeumacena.Emespecial,fazseonipresenteousodeShadersprogramveis. OmotordejogosUnity3Dpermitetantoacriaode Shadersemlinguagensdeprogramao como Cg ou GLSL, quanto o uso de funo fixa, alm de incluir uma verstil coleo desses

10

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Shadersnainstalaopadro.OvinculoentreumShadereumamalha3Dsefazatravsdeum Material, que funciona como um container para as propriedades visuais que cada objeto da cenapossui.Afiguraaseguirmostracomoaatribuiodessaspropriedadespodeserfeitana janelaInspectordentrodoeditordecenas.

Figure8ManipulaodeumMaterial

AespecificaodeumShaderdefinequaissoaspropriedadesqueestenecessitapararealizar a exibio do objeto, enquanto o Material define os valores para essas propriedades. A prximafiguramostraumarepresentaoesquemticadessarelao.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, especificada pelo Shader, atribuda com a cor vermelha, enquanto no outro usada a cor azul.Dessaforma,podeseaplicaressesdiferentesmateriaisaobjetosnacena,comoilustrado nafigura.

Figure9Relanaoentreshaders,materiaiseobjetos

11

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

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. Parasecriarumnovo Material,usase Assets>Create>Materialnomenuprincipal.Umavez criadoo Material,podeseaplicloaumobjetoeexperimentarsealterarosvaloresdesuas propriedades. Para aplicar um Material a um objeto, basta de arrastar o mesmo da janela ProjectparaqualquerobjetonacenaounajanelaHierarchy. Paraaespecificaode Shaders,tantodefunofixaquantoprogramveis,aUnity3Dpossui uma linguagem prpria chamada ShaderLab, que possui alguma semelhana com os arquivos.FXdefinidosparaoMicrosoftDirectXouaespecificaoNVidiaCgFX.Essalinguagem declarativapossuiumasintaxesimpleseincluicapacidadespoderosascomoreuso,mltiplos passos, criao procedural de texturas, entre outras. Nas prximas sees ser apresentada umabreveintroduoaessalinguagem. 3.1IntroduoaShaderLab Parasecriarumnovo Shader,podeseescolher Assets>Create>Shaderdomenuprincipal,ou duplicarumexistenteetrabalharapartirdomesmo.ShadersnaUnity3Dsoarquivosdetexto epodemsereditadosfazendoseumduplocliquenosmesmosnajanelaProject.Iniciaremosa explicaocomumShaderbastantesimples: Shader "Tutorial/Basic" { Properties { _Color ("Main Color", Color) = (1.0,0.5,0.5,1.0) } SubShader { Pass { Material { Diffuse [_Color] } Lighting On } } }

12

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Esse Shader simples demonstra uma dasformasmaissimplesdeserenderizarumobjetoda cena. definida apenas uma propriedade de cor (_Color), cujo valor padro especificado atravsdeseuscomponentesRGBA.Pararenderizao,existeumanicaopode SubShader comumpassoapenas,queatribuiocomponentedifusonapipelinedefunofixacomovalor especificadoparaapropriedade_Coloreligandoaopodeiluminaoporvrtices. OShaderaseguirdefineumarenderizaomaiscompleta,masaindabaseadaemiluminao porvrtices:
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.Esteseronomeexibidonajanela Inspector.Todoocdigodo Shader ficardefinidodentrodeumblocodelimitadopor{}. *interessantequeonomesejacurtoedescritivo,nosendonecessriocorrespondercom onomedoarquivo.shader; * Para utilizarse submenus, basta que se use o caractere /, por exemplo: um nome "MeusShaders/Teste"iriaserorganizadoemumsubmenuno InspectordeumMaterialcomo MeusShaders>Teste.Um Shadersemprecompostodeumblocodepropriedadesseguido porumoumaisblocosdeSubShaders,queseroexplicadosaseguir.

13

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

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 da seguinteformanoeditordecena:

Figure10PropriedadesdeumShader(UNITYTECHNOLOGIES2009A)

A estrutura de uma declarao de uma propriedade mostrada na figura que segue. O primeiro termo designa o nome interno (referncia varivel), enquanto os valores entre parnteses especificam a descrio (para a janela Inspector) e o tipo, respectivamente. O ultimo termo especifica o valor padro para a propriedade. Encorajamos o leitor a buscar a referncia completa sobre tipos de propriedades possveis no manual de usurio da ferramenta.

Figure11Declaraodeumapropriedade(UNITYTECHNOLOGIES2009A)

3.1.2SubShaders Dispositivos grficos diferentes possuem capacidades diferentes. Por exemplo, a maioria das placas grficas atuais do suporte a Pixel Shaders, mas muitas placas embarcadas em placas me baratas no. Algumas suportam 4 texturas em um nico passo, enquanto outras suportamapenas2,eassimpordiante.Parapermitirofuncionamentodojogoparaqualquer que seja o dispositivo do usurio, um Shader pode conter mltiplos SubShaders. Para renderizar um objeto, a Unity3D passa por todos os SubShaders e usa o primeiro que seja completamentesuportadopelo hardwareemuso.Ocdigoaseguirilustraaestruturabsica deumShaderdessetipo:

14

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

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 do objeto renderizada, portanto ao menos um passo necessrio. O exemplo VertxLit possui apenasumpasso: //... 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 } } // ... Todososcomandosemumpassoconfiguramo hardwaregrficopararenderizarageometria de alguma maneira especfica. No exemplo acima, o bloco Material vincula as propriedades definidaspeloShadercomosparmetrosdematerialdosistemadeiluminaoemfunofixa. O comando Lighting On liga a funcionalidade de iluminao por vrtices, enquanto SeparateSpecular 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 fixa OpenGL/Direct3D dos dispositivos grficos. O comando SetTexture bastante importante, e especificaaformacomoaspropriedadesmapeadasparatexturassoaplicadasemconjunto

15

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

comomodelo de iluminao da pipeline.Essecomandoseguidoporumblococontendoa frmula que define a equao de combinao das texturas para cada pixel/fragmento renderizado.Noexemploemquesto: Combine texture * primary DOUBLE, texture * constant Nessecomando,otermo texturereferentecorobtidapelomapeamentodatextura(nesse caso_MainTex).Estacormultiplicada(*)pelacorprimria(primary)dovrtice,computada pelaequaodeiluminaodapipelinefixaeposteriormenteinterpoladaparacadapixel.Este valorduplicado(DOUBLE)paraintensificarailuminao.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). Diferentes modos de combinao de textura podem ser especificados para a obteno dos resultados desejados. 3.2ShaderlabProgramvel AUnitypermiteaodesenvolvedorousodeShadersprogramadosnalinguagemCgdaNVidia ou em assembly. Tambm possvel a criao de Shaders com GLSL caso o jogo seja disponibilizadoapenasparaMacOSX,umavezqueomduloderenderizaoparaWindows usaDirectX,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 materiais para esses Shaders; permite a utilizao mista de funo fixa com Shaders programveis em um mesmo objeto (com o uso de mltiplo passos de renderizao). O cdigo a seguir exemplificacomoumpassoderenderizaopodeserespecificadoatravsdeumcdigoem Cg. Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // Cdigo para Vertex e Pixel Shaders (funes vert e frag) ENDCG } Oexemploaseguir,umaespecificao ShaderLabcompleta,usaainformaodanormaldos vrticesparacomporacorexibida.Omarcador #pragmavertexvertindicaafunoqueser executada como o Vertex Shader para os objetos que usam desse Shader para renderizao. Deformasimilar,podesedefiniroPixelShader.

16

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

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 nessecasoserumaversopadroqueusainterpolaoparaexibirascorescomputadaspor esseVextexShader.Afiguraaseguirmostraoresultadodessecdigoaplicadoaumobjeto.

Figure12Shaderqueexibenormais

Da mesma forma que os Shader de funo fixa, possvel se passar parmetros de material quesoespecificadosnoeditordecena,usartexturas,mltiploscanaisdemapeamentoUV, ouqualqueroutraopoquesejainteressanteparaseatingirosresultadosdesejados.

17

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

4SistemadeFsica A Unity3D utiliza internamente o popular motor de fsica PhysX da NVidia para efetuar a simulao fsica de corpos rgidos e o tratamento de colises. A PhysX um motor de fsica utilizado em vrios jogos populares tais como Mass Effect, Medal of Honor: Airbone, entre outros,sendoconsideradoumdosmaiscompletosdomercado,inclusivecomapossibilidade deserexecutadoemGPUs,oquepodeacarretaremmaiordesempenho.Comessaintegrao, odesenvolvedortemacessosimplificadoaumsistemadesimulaofsicasofisticado.Vrias dasfuncionalidadesoferecidaspela PhysXsomanipuladasgraficamenteatravsdainterface daUnity,permitindoquesimulaesfsicascomplexassejamdesenvolvidasempoucotempo, aumentandoaprodutividadedodesenvolvedor. Colliders Geometrias bsicas de coliso tais como esfera, cubo, cpsula, ou precisas como um Mesh Collider, 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 da simulaofsica.Osparmetrosdecadageometriadecolisoestodisponveisparaalterao peloeditordecena.

Dessaforma,podesetratarasimulaofsicadevriosobjetosatravsdautilizaodeuma geometria 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 so efetuadasafimdegarantirumbomdesempenhodasimulao. Alm de sua funo principal na simulao fsica, estes componentes tambm podem ser utilizados como triggers, ou seja, elementos que ativam o processamento de um trecho de

18

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

cdigo caso ocorra uma coliso com estes. Componentes definidos como triggers no so simuladoscomocomponentesdefsicanormaisduranteasimulao. CharacterController Adicionalmenteaoquejfoiapresentado,aUnitytambmofereceacessoaumtipoespecial de objeto disponvel na PhysX: o Character Controller. Geralmente, o controle preciso de objetos 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. Como sabemos, esse tipo de simulao fsica bastante complexo, pois alm do tratamento das foras,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,temseapossibilidadedecontrolaressetipode objetofacilmente,evitandotodasasoperaesindesejadasditasanteriormente,mantendoa interao com os objetos do cenrio. Abaixo temse um exemplo da configurao desse objetoemumpersonagem.

Figure13Componenteparapersonagens

Ragdolls Alm do Character Controller, temse tambm a possibilidade de simular ragdolls com o uso do componente Character Joint. Este componente permite que simulaes de personagens inanimados (mortos?) sejam realizadas mais fielmente, tal como um boneco de pano. Utilizando um Wizard, podese especificar onde encontramse os pivs de rotao, alm de vriosoutrosparmetrosresponsveispelasimulaodessetipodeobjeto.Abaixotemosuma imagemdaconfiguraodessetipodesimulao.

19

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Figure14Sistemaderagdoll

WheelColliders Um outro recurso bastante til oferecido pela PhysX atravs da Unity um componente especialparasimulaodeveculoschamado WheelCollider.Comestecomponente,podese simular fora de trao, frico, entre outras caractersticas que ocorrem normalmente em rodasdeveculos.Nestecaso,omovimentodocarroefetuadoatravsdaaplicaodeforas nessescomponentes.Autilizaodestecomponentepermitesimulardesdeforasdefrico atocomportamentodeamortecedores,conformepodeserobservadoabaixo.

Figure15WheelColliders

Utilizando a hierarquia entre Game Objects da Unity, o movimento de um veculo pode ser simuladofacilmenteatravsdaconfiguraohierrquicadestescomponentescorretamente. Joints UmafuncionalidademuitoimportantedisponvelnaUnityapossibilidadedousode Joints, oujunes,devriostiposparaasimulaodeobjetosconectadosaoutroscomrestriesem seugraudeliberdade.OsseguintesJointsestodisponveisnaPhysXatravsdaUnity:

20

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

HingeJoint:permiteaconexodedoisobjetosatravsdasimulaodeumadobradia.Ideal paraasimulaodeportas,pnduloseoutrosobjetosquenecessitemdestetipodeconexo.

Figure16HingeJoint

Spring Joint: permite a conexo de dois abjetos atravs da simulao de uma mola. Objetos conectados utilizando esse tipo de joint possuem uma distncia mxima de separao que, apssoltos,tendemavoltarasuadistnciaderepouso.

Figure17SpringJoint

FixedJoint:permiteaconexoentredoisobjetosdeformaqueosmovimentosdeumobjeto sejamdependentesdooutro.SimilarautilizaodashierarquiasdetransformaodaUnity, porm,implementadoatravsdafsica.Idealparaobjetosquepossamserdesconectadosum dooutroduranteasimulao.

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 de movimento e/ou rotao e acelerao de movimento e rotao. Dessa forma, temos como construirumjointdeacordocomanecessidaderequerida.

21

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

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 objetos interagem atravs do ajuste das propriedades dos materiais que estes objetos utilizam tais comofricoeoefeitodainteraoentreacolisodedoisobjetos. 5Scripting Osistemade scriptingdaUnity3Dabrangenteeflexvel,oquepermiteodesenvolvimento de jogos completos sem a necessidade do uso de C/C++. Internamente, os scripts so executados atravs de uma verso modificada da biblioteca Mono, uma implementao de cdigo 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 como componentes de game objects. Dessa forma, importante projetar os scripts de maneira modular,ganhandocomissoaflexibilidadedoreuso.Nessaseo,iremosdescreveralgumas caractersticasimportantesdosistemadescriptingdaUnity3D. 5.1Criaodescripts Paracriarum script,bastaescolheraopo Assets>Create>Javascriptnomenuprincipal. Tambm possvel se criar scripts usando o boto direito do mouse sobre a janela project. Existeaopodesecriaroscriptemqualquerumadastrslinguagensdisponveis.

Figure19Criaodeumscript(UNITYTECHNOLOGIES2009A)

possvelseeditaro scriptclicandoduasvezessobreomesmonajanela Project.Issoirabrir oeditorpadro(UniScitenoWindowsouUnitronnoMacOSX).Aediode scriptssempre

22

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

feita em um programa externo e no diretamente pela Unity3D, que pode ser alterado nas prefernciasdeusurio.EsseocontedodeumJavascriptrecemcriadonaUnity3D: function Update () { } Um script novo no realiza tarefa alguma ainda, ento podese adicionar funcionalidade ao mesmo.Ocdigoaseguirservecomoumexemplobsico: function Update () { print("Hello World"); } Aoserexecutado,essecdigoirexibiraexpresso"HelloWorld"noconsole.Masaindano existenadaquecausaaexecuodessecdigo.necessrioseacoplaressescriptaumGame Objectativonacenaparaqueissoocorra.Issopodeserfeitosearrastandooarquivodoscript para o objeto escolhido tanto na janela Hierarchy, quanto diretamente ao mesmo na janela Scene. Tambm podese selecionar o objeto escolhido e adicionar o script atravs do menu principal,comomostraafiguraaseguir.

Figure20Adiodeumscriptaumobjetoselecionado(UNITYTECHNOLOGIES2009A)

Ao se selecionar o objeto ao qual o script recmcriado foi adicionado, ser possvel se visualizaromesmo,indicandosuacorretavinculao.

Figure21Scriptvinculadoaobjeto(UNITYTECHNOLOGIES2009A)

23

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Afuno print()bastantetilquandoseestdepurandoum script,masnofaznadadetil em termos de jogabilidade. O cdigo a seguir adiciona alguma funcionalidade ao objeto que contmoscript: 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(){}asobrescritadomtodo Update,queserexecutadopelaUnity3D umavezacadaframe; 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 (em segundos)desdequeoltimo Updateocorreu.Essavarivelserveparagarantirqueoobjeto em 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 serem utilizadosemobjetos.Algunsdosmaisimportantesso: transformrepresentaoposicionamento,orientaoeescaladoobjeto; rigidbodyrepresentaocorporgidoparaosubsistemadefsica(quandoexistir); animation utilizado para acionar os ciclos de animao de um modelo criado em uma ferramentadeanimaocomoo3DStudioMax; renderercomponenteencarregadodaexibiodeumobjetonacena; audiofontedeefeitodeudio,vinculadaaumobjetoparaincorporarposicionamento deudio3D; collidergeometriadecolisoparaosubsistemadefsicaouparautilizaocomoTrigger.

5.2Acessoaoutroscomponentesetrocademensagens Entretanto, muitos outros componentes prexistentes, assim como Scripts criados especificamente para cada jogo, no tm referncias especiais includas. Para esses, necessria alguma maneira de se obter uma referncia em tempo de execuo. Isso feito atravsdomtodoGetComponent()existenteemqualquerscript.Essemtodopodeserusado para se obter a referncia a qualquer componente vinculado ao objeto no qual o script em questoestacoplado(ouaqualquerobjetoquesetenhaumarefernciaemumavarivel).O exemploaseguirmostracomoobterarefernciaaumscriptchamado"Controlador":

24

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

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 ao mesmo objeto de jogo em questo. Em seguida, foi executado o mtodo"MeuMtodo"nessamesmainstncia. sempre prefervel, por questes de desempenho, guardar referncias aos componentes como exemplificado acima. Entretanto, existem situaes onde pode ser desejvel se enviar uma determinada mensagem a todos os componentes de um determinado objeto. Isso possvel atravs do mtodo SendMessage da classe GameObject. Todo script tem acesso instncia de GameObject ao qual est vinculado. O seguinte exemplo tenta executar (caso exista)omtodo"Teste"emtodososcomponentesdoobjetoaoqualessescriptforvinculado: gameObject.SendMessage("Teste"); UmexemplocomumparaousodeSendMessageaaplicaode"dano"aumpersonagem que 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 com componentes de fsica (collider e rigidbody), e incluir um script simples que envia uma mensagemassimqueesseprojtilatingiralgonacena: function OnCollisionEnter(collision : Collision) { collision.gameObject.SendMessage("AplicarDano"); Destroy(this.gameObject); } O cdigo acima ser executado assim que o projtil (objeto contendo representao fsica e esse script) colidir com outro objeto com fsica na cena. A mensagem enviada ir causar a execuodomtodo"AplicarDano"emtodosos scriptsdoobjetoatingido,casoessemtodo exista.Alinhaseguinteremoveoprojtildacena. 5.3Acessoavariveis Os scripts de rotao apresentados at agora giram o objeto 5 graus a cada segundo. Talvez seja interessante rotacionar a uma velocidade angular diferente dessa. Uma opo alterar esse valor no cdigo e salvlo, mas exige uma recompilao desse, ao mesmo tempo que impedequeusemosomesmoscriptcomdiferentesvelocidades.Existeumaformabemmais rpida 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, no scripteusaressenachamadaaomtodoRotate().Oexemploaseguirmostracomoissopode serfeito: var speed = 5.0; function Update () { transform.Rotate(0, speed*Time.deltaTime, 0); }

25

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Agora observe o objeto contendo o script na janela Inspector. Podese notar que o valor do atributoaparecenoeditordecena,comomostraafiguraaseguir.

Figure22Alteraodovalordeumatributo(UNITYTECHNOLOGIES2009A)

Estevalorpodeagorasermodificadodiretamentepelajanela Inspector,damesmaformaque podeserenomearumarquivo.Selecionandoseamesma,podesealterarseuvalor.Tambm podese deslizar os valores com o mouse usando o boto direito. Podese alterar o valor de atributoscomoesseaqualquermomento,inclusiveenquantoojogoestsendoexecutado. Ao apertar o boto Play e modificarse o valor desse atributo, a velocidade de rotao do objeto ir ser alterada instantaneamente. Ao se sair do modo de execuo, o valor volta ao anterior. Dessa forma, podese experimentar a vontade e ao final decidir manter o valor anterioroualterlodeformapermanente(semobotoPlaypressionado). Essa forma de alterao de valores em atributos tambm implica que possvel se usar um mesmo script em diversos objetos, cada um com um valor especfico para o mesmo. Cada alteraofeitairafetaravelocidadeapenasdoobjetonoqualamudanafoirealizada. 5.4PrefabseInstanciao A criao de game objects atravs de composio bastante flexvel, mas em alguns momentospodeserbastantetrabalhosorecriarcertasdessascomposiesqueprecisamser usadasemdiversascenasdeummesmojogo,compartilhadascomoutrosdesenvolvedoresou mesmoinstanciadasinterativamenteduranteaexecuodojogo. 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 essas instncias esto ligadas ao Prefab original e so no fundo clones desse. Independente de quantasinstnciasexistamnoprojeto,qualquermudanafeitaaoPrefaboriginalseraplicada atodasessascpiasexistentesnascenas. ParasecriarumPrefab,precisocriarumcontainervazioparaomesmousandoomenu.Esse Prefabvazionocontmum GameObjectainda,eportantonopodeserinstanciadonacena

26

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

ainda.Apsserrecheadocomdadosdeum GameObject,issopodeserfeito.Afiguraaseguir mostra um Prefab recmcriado, ainda sem contedo (indicado pela ausncia de cor em seu nomenajanelaProject).

Figure23CriaodeumPrefab(UNITYTECHNOLOGIES2009A)

Parapreencherumprefab,deveserusadoalgumobjetoexistentenacenaatual.Oseguinte roteiroexplicacomoesseprocessopodeserrealizado: 1.EscolhaAssets>Create>Prefabnomenuprincipaledumnomeaomesmo; 2.NajanelaHierarchy,selecioneoGameObjectquesedesejaguardarcomoumPrefab; 3.ArrasteesolteesseobjetodajanelaHierarchysobreonovoPrefabnajanelaProject. Aps realizados esses passos, o objeto, todos os seus "filhos", componentes e valores de atributos foram copiados no Prefab. Agora possvel se criar diversas instncias do mesmo arrantandoseparacenaapartirdajanelaHierarchy.Oprprioobjetousadoparaacriaodo Prefabfoitransformadoemumainstnciadomesmo. Todas as instncias de um Prefab possuem a mesma estrutura e, originalmente, os mesmos valores para os atributos de seus componentes. Entretanto, possvel alterar diversas instncias, ainda vinculadas ao Prefab original, os valores de alguns atributos. As alteraes feitasao Prefabaindaseropropagadasparaessasinstncias,apenasosatributosmarcados como especficos tero seus valores mantidos. A seguinte figura mostra esse procedimento, que consiste em se marcar a caixa que fica a esquerda do nome do atributo, na janela Hierarchy (noexemploemquesto,oatributodenome RepeatTriggernoseralteradode acordocomasmodificaesnoPrefab).

27

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

Figure24AtributodesvinculadodoPrefab(UNITYTECHNOLOGIES2009A)

Em diversas situaes pode ser necessrio se instanciar objetos em tempo de execuo. Um exemplo que ilustra esse cenrio pode ser a criao de foguetes que so lanados quando o jogadorpressionaumateclaouboto. Prefabssoumaferramentatilnessassituaes,pois acriaodecpiasdosmesmosatravsdescriptsbastantesimples,comoexplicadoaseguir. AprimeiratarefaacriaodeumPrefabcontendooscomponentesevalorescalibradospara osatributosdesejadosparaoreferidofoguete.Noiremosentraremdetalhessobreacriao dafuncionalidadedofogueteemsi,esimcomoprocessodeinstanciaodomesmo.Parase terarefernciaaum Prefabatravsdeum script,bastaquesecrieumatributocujotiposeja umdoscomponentesexistentesnesse Prefab.Nonossoexemplo,ofogueteserguiadopelo sistema de simulao fsica, e conseqentemente um dos componentes do mesmo um Rigidbody,dessaformaoscriptdeinstanciaodeveincluiraseguintelinha: var rocket : Rigidbody; Issoirpermitiraodesenvolvedorarrastaro Prefabdofoguetediretamentedajanela Project paraajanela Hierarchydeformaaestabelecerareferncianecessria.Ocdigoaseguircria uma instncia do foguete em tempo de execuo, ao mesmo tempo que adiciona uma velocidadeinicialaomesmo,referenteorientaodoobjetoqueocriou: var r : Rigidbody = Instantiate(rocket, transform.position, transform.rotation); rocket.velocity = transform.forward * speed; importanteobservarqueocdigoacimaindependedaestruturautilizadaparao Prefabque representa o foguete, desde que o mesmo inclua um componente Rigidbody. Isso permite a criaodeprottipossimplesefuncionaisbemantesdaexistnciade Assetsdefinitivoscomo modelos3Dousistemasdepartculas.Osscriptscriadosinicialmenteaindaseropossveisde se usar mesmo com a evoluo desse Prefab para uma verso mais bem acabada para a representaodessefoguete.

28

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

6Concluso EssetutorialapresentouumintroduosucintasobreomotordejogosUnity3D.Oobjetivofoi expor de maneira simplificada as principais funcionalidades dessa verstil ferramenta de desenvolvimento de jogos. Esperase que o leitor interessado busque um maior aprofundamentonesseassuntoatravsdabibliografiasugeridanofinaldessetutorial. Osautoresgostariamdeagradecerspessoasquediretaouindiretamentecontriburampara a confeco desse material. Em especial gostaramos de agradecer s nossas famlias, pela pacincia e apoio incondicional, e tambm excelente comunidade de desenvolvedores e colaboradoresUnitypelasexcelentesinformaesetutoriaisdisponibilizados. Finalmente,osautoresgostariamdeagradecerosleitoresdessetutorialeinformarqueatoda aequipedoUFFMediaLabsecolocadisposioparacontatoatravsdosemailsinformados nacapa.

29

VIII Brazilian Symposium on Games and Digital Entertainment

Rio de Janeiro, RJ Brazil, October, 8th-10th 2009

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.AnaisdoSimpsioBrasileirodeGames eEntretenimentoDigital.SoLeopoldo,RS.2008 STOY, C. 2006. Game object component system. In Game Programming Gems 6, Charles River Media,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].

30

Você também pode gostar