desenvolvendo jogos com unity 3d.pdf

30
Tutorial: Desenvolvimento de Jogos com Unity 3D Erick Baptista Passos [email protected] José Ricardo da Silva Jr. [email protected] Fernando Emiliano Cardoso Ribeiro [email protected] Pedro Thiago Mourão [email protected] VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ – Brazil, October, 8th-10th 2009 1

Upload: kevin-andrews

Post on 23-Nov-2015

101 views

Category:

Documents


16 download

TRANSCRIPT

  • Tutorial:DesenvolvimentodeJogoscomUnity3D

    [email protected]

    [email protected]

    [email protected]

    [email protected]

    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