VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 1 Apresentao
Lsse LuLorlal e apresenLado como uma breve lnLroduo ao desenvolvlmenLo de [ogos com o moLor unlLy3u. Lxpllcaes mulLo deLalhadas, mesmo que cobrlndo apenas parLe das funclonalldades exlsLenLes, ocuparlam bem mals que as Lrs dezenas de pglnas dlsponlvels para esLe LuLorlal. uessa forma, recomendamos o lelLor lnLeressado a buscar mals lnformaes na abrangenLe e excelenLe documenLao da ferramenLa, dlsponlvel LanLo localmenLe, ao se reallzar a sua lnsLalao, quanLo onllne aLraves do slLe hLLp://www.unlLy3d.com/supporL. 1ambem por quesLes de espao, no fol lnclulda uma lnLroduo geral ao desenvolvlmenLo de [ogos. Lspera-se que o lelLor possua alguma famlllarldade com os concelLos e ferramenLas relaclonados ao assunLo Lals como renderlzao em Lempo-real, modelagem e anlmao 3u, LexLuras e 5boJets. 1ambem espera-se que o lelLor possua noes de programao, preferenclalmenLe com alguma llnguagem orlenLada a ob[eLos. C conLeudo do LexLo esL organlzado em forma crescenLe de complexldade, de forma a faclllLar a lelLura. LnLreLanLo, as sees apresenLadas Lambem podem ser lldas de forma lndependenLe. A lmagem da capa fol cedlda do pro[eLo lrana AnLrLlca, de cu[a equlpe de desenvolvlmenLo fazem parLe alguns dos auLores. C [ogo lrana AnLrLlca esL sendo desenvolvldo aLraves da unlLy3u e e um pro[eLo flnanclado pela SecreLarla de CulLura do LsLado do 8lo de !anelro. or flm, lnforma-se que algumas das flguras e exemplos apresenLados foram adapLados do manual da ferramenLa, de LuLorlals onllne (hLLp://www.unlLy3d.com/resources), bem como de dlscusses dlsponlvels no forum comunlLrlo de desenvolvedores unlLy (hLLp://forum.unlLy3d.com). 1ambem recomendamos o lelLor que explore essas refernclas para um malor aprofundamenLo. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 2 Gu|a de |e|tura
1 - Introduo 8reve apresenLao dos mdulos da unlLy3u e deLalhamenLo da lnLerface do edlLor de cenas. 2 - Cr|ao e Man|pu|ao de Game Cb[ects Lxpllcao do modelo de ob[eLos da unlLy3u e as formas bslcas de crlao, composlo e alLerao dos mesmos. 3 - Mater|a|s e Shaders 8reve lnLroduo a llnguagem de especlflcao de 5boJets da unlLy3u: 5boJetlob. So demonsLrados exemplos para plpelloe de funo flxa, bem como 5boJets programvels. 4 - S|stema de I|s|ca lnLroduo aos componenLes relaclonados ao subslsLema hysx de slmulao flslca. S - Scr|pt|ng ApresenLao, aLraves de exemplos, dos prlnclpals concelLos para a programao de scrlpLs com a unlLy3u. 6 - Conc|uso Conslderaes flnals dos auLores. 8|b||ograf|a LelLuras recomendadas para aqueles lnLeressados em um malor aprofundamenLo. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 3
1 - Introduo C desenvolvlmenLo de [ogos 3u e uma aLlvldade ao mesmo Lempo graLlflcanLe e desafladora. ulversas habllldades, de dlferenLes reas do conheclmenLo, so necessrlas nesse processo. C uso de ferramenLas para auxlllar nas Larefas repeLlLlvas e fundamenLal nesse Llpo de aLlvldade, e ao longo do Lempo, um Llpo especlal de ferramenLa, conhecldo como moLor de [ogos (qome eoqloe) fol evolulndo de manelra paralela aos prprlos [ogos, ao ponLo que se Lornaram produLos vallosos e de cerLa forma populares. Alguns mdulos e funclonalldades auxlllares so condles necessrlas para que uma ferramenLa se[a conslderada um moLor de [ogos compleLo. Lm especlal, um slsLema de renderlzao 3u com suporLe a 5boJets programvels e um slsLema de slmulao flslca so fundamenLals. uma boa arqulLeLura para a programao de sctlpts, um edlLor de cenas lnLegrado, e a capacldade de se lmporLar dlreLamenLe modelos 3d, lmagens e efelLos de udlo produzldos em ferramenLas exLernas, so as caracLerlsLlcas exlsLenLes nos moLores de [ogos. Alem dlsso, e dese[vel que os [ogos desenvolvldos possam ser dlsLrlbuldos em mulLlplas plaLaformas como C, consoles ou mesmo dlsposlLlvos mvels. A unlLy3u absLral do desenvolvedor de [ogos a necessldade de uLlllzar dlreLamenLe ultect\ ou OpeoCl (apesar de alnda ser posslvel, caso necessrlo), suporLando a crlao de 5boJets complexos com a llnguagem cq da NvlJlo. lnLernamenLe, o subslsLema de slmulao flslca e o popular lbys\, Lambem da NvlJlo. ara a execuo de scrlpLs, a unlLy usa uma verso de alLo desempenho da blblloLeca Mooo, uma lmplemenLao de cdlgo aberLo do framework .neL da MlcrosofL. Alnda que se[a uma ferramenLa que lnclul o esLado da arLe no seu segmenLo, a unlLy3u Lem um preo acesslvel, o que e apenas mals uma das razes para sua crescenLe popularldade. Mesmo usando a verso mals baraLa da unlLy3d, os [ogos podem ser desenvolvldos para C, Mac ou mesmo embuLldos em uma pglna web. Com a aqulslo de llcenas especlflcas, pode-se desenvolver e dlsLrlbulr [ogos para llbooe, aLraves da lo[a onllne da Apple, ou mesmo para o console wll da NloteoJo. 1.1 - Interface C moLor de [ogos unlLy3u possul uma lnLerface basLanLe slmples e amlgvel que ob[eLlva faclllLar o desenvolvlmenLo de [ogos de dlversos gneros e ouLros slsLemas de vlsuallzao. Sua rea de Lrabalho e composLa de vrlas [anelas chamadas v|ews, cada uma com um propslLo especlflco. A flgura abalxo e uma capLura conLendo uma represenLao esquemLlca e a ldenLlflcao de cada uma dessas [anelas no edlLor de cenas da unlLy3u. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 4
I|gure 1 - Interface do ed|tor de cena da Un|ty3D (UNI1 1LCnNCLCGILS 2009A) ro[ect v|ew A [anela ltoject e a lnLerface para manlpulao e organlzao dos vrlos arqulvos (Assets) que compem um pro[eLo Lals como sctlpts, modelos, LexLuras, efelLos de udlo e ltefobs, os quals sero deLalhados mals adlanLe na seo de sctlptloq. A esLruLura exlblda na [anela ltoject e correspondenLe a sub-pasLa AsseLs denLro da pasLa do pro[eLo no slsLema de arqulvos do compuLador. 8ecomenda-se que a manlpulao de sua esLruLura e conLeudo se[a efeLuada somenLe denLro da unlLy3u, a flm de manLer a lnLegrldade dos meLadados que so assoclados a esLes elemenLos. LnLreLanLo, cerLas mudanas, como aLuallzao de uma LexLura por um edlLor de lmagens por exemplo, ou mesmo a adlo de novos Assets, pode ser felLa de forma segura dlreLamenLe no slsLema de arqulvos.
I|gure 2 - Iane|a ro[ect VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 5
n|erarchy v|ew A [anela nletotcby exlbe Lodos os elemenLos da cena que enconLram-se na cena que se esL edlLando. Alem dlsso, nessa [anela podemos organlzar e vlsuallzar a hlerarqula de de composlo enLre os vrlos ob[eLos que compem a cena (grafo de cena). C funclonamenLo desses ob[eLos, bem como a hlerarqula de Lransformao ser expllcado mals deLalhadamenLe na prxlma seo.
I|gure 3 - Iane|a n|erarchy com do|s ob[etos
Scene v|ew A [anela 5ceoe e a forma prlnclpal de manlpulao dos elemenLos vlsuals no edlLor de cenas da unlLy, posslblllLando a orlenLao e poslclonamenLo desses elemenLos com um feeJbock lmedlaLo do efelLo das alLeraes efeLuadas. nesLa [anela, pode-se manlpular graflcamenLe os ob[eLos aLraves das opes de arrasLar e solLar com o mouse. Lssa manlpulao e semelhanLe aquela de ferramenLas de modelagem 3u e pode-se manlpular ob[eLos Lals como cmeras, cenrlos, personagens e Lodos os elemenLos que compem a cena. uevldo a sua grande lmporLncla duranLe o desenvolvlmenLo de uma apllcao, vrlas formas de navegao so oferecldas a flm de aumenLar alnda mals a produLlvldade do desenvolvedor. Alem dlsso, as ferramenLas bslcas de manlpulao dos elemenLos da cena, Lals como poo, Lranslao, roLao e escala Lambem esLo dlsponlvels para uLlllzao nesLa [anela aLraves de aLalhos de Leclado (Leclas C, W, L e 8).
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 6
I|gure 4 - Iane|a Scene
Game v|ew A [anela Come e responsvel pela vlsuallzao da apllcao em desenvolvlmenLo da forma que ela ser exlblda quando flnallzada. nessa [anela, pode-se rapldamenLe Ler uma prevla de como os elemenLos esLo se comporLando denLro da apllcao. Alem dlsso, a unlLy fornece a opo de se parallsar (boLo poose) a slmulao enquanLo ela esLlver em depurao, de forma a posslblllLar que os parmeLros dos vrlos elemenLos possam ser a[usLados para experlmenLao. Lembramos que o a[usLe desses parmeLros no necesslLam que a slmulao esLe[a parallsada, podendo ser alLerados lncluslve enquanLo a slmulao esLe[a em execuo. nesLa [anela, Lambem pode-se vlsuallzar vrlas lnformaes esLaLlsLlcas (stots) sobre a slmulao, Lals como Lempo de processamenLo e numero de frames por segundo, numero de Lrlngulos e verLlces renderlzados, memrla de LexLura uLlllzada, enLre ouLras. LsLa opo e lmporLanLe para a depurao do desempenho da slmulao para uma posLerlor oLlmlzao, caso se[a necessrlo. Inspector v|ew na [anela lospectot, Lem-se acesso aos vrlos parmeLros de um ob[eLo presenLe no cenrlo, bem como aos aLrlbuLos de seus componenLes (compooeots). Lssa esLruLura uLlllzada pela unlLy para a composlo de ob[eLos ser melhor expllcada na prxlma seo. Alnda na [anela lospectot, pode-se a[usLar os aLrlbuLos publlcos (parmeLros) de cada componenLe, lncluslve duranLe a execuo da apllcao. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 7
I|gure S - Iane|a Inspector
2 - Cr|ao e Man|pu|ao de Game Cb[ects MulLos moLores de [ogos de gerao anLerlor dlsponlvels no mercado so baseados no uso de especlallzao/herana para as classes que lro represenLar ob[eLos de [ogo. nesLa arqulLeLura, os elemenLos de um [ogo herdam de uma classe bslca (normalmenLe algo como ComeObject) e as novas funclonalldades so acrescenLadas. Asslm como em ouLras caLegorlas de desenvolvlmenLo de sofLware orlenLado a ob[eLos, o uso demaslado de herana nesse Llpo de slLuao Lornou-se obsoleLo, prlnclpalmenLe por sua pouca flexlbllldade quando os ob[eLos de [ogo possuem mulLlplos comporLamenLos, o que exlglrla herana mulLlpla. A unlLy3u e baseada em um modelo mals moderno para a arqulLeLura de ob[eLos de [ogo baseado em composlo [8llas 2002, SLoy 2006, assos eL al. 2008]. nesse modelo, um ob[eLo de [ogo e especlflcado aLraves da composlo de vrlas funclonalldades, que so agregadas (ou removldas). Cada funclonalldade e lmplemenLada por um componenLe (classe que herda de um componenLe bslco). Lsse conLalner generlco alnda e denomlnado Come Object e funclona como um reposlLrlo de funclonalldades, ou mals especlflcamenLe, componenLes. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 8 Cs componenLes so enLo responsvels por lmplemenLar os dlversos comporLamenLos que um Come Object pode Ler. um componenLe pode ser desde um sctlpt, uma geomeLrla de collso, ou aLe uma LexLura de Cul. Cu se[a, Come Objects podem represenLar qualquer colsa no cenrlo, sendo caracLerlzados como uma slmples cmera ou um personagem apenas pelos dlferenLes componenLes que agrega. Conforme observado no manual de usurlo da unlLy (Lraduo llvre): Come Object omo pooelo vozlo e os compooeotes so os loqteJleotes poe lto ctlot soo tecelto Je joqoblllJoJe". Abalxo apresenLamos a esLruLura de um Come Object padro que represenLa uma cmera vlrLual. nessa flgura, a cmera e um Come Object, porem, s e deflnlda como cmera pols possul um componenLe com essa funclonalldade. Alem dlsso, possul os componenLes auxlllares Culloyet, llote loyet e AoJlo llsteoet.
I|gure 6 - Compos|o de um Game Cb[ect (Camera) uma observao lmporLanLe sobre os Come Objects e que Lodos eles [ possuem pelo menos o componenLe 1toosfotm, responsvel pelo seu poslclonamenLo, orlenLao e escala no slsLema referenclal da cena. Alem dlsso, esse componenLe e responsvel pela deflnlo da hlerarqula de Lransformaes, permlLlndo o efelLo de Lransformao relaLlva de acordo com a esLruLura de ascendncla/descendncla de cada Come Object.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 9
I|gure 7 - Lstrutura m|n|ma de um ob[eto na unlLy Lambem Lemos o concelLo de ltefob. um ltefob e slmplesmenLe um modelo de composlo de Come Object [ deflnldo, ou mals preclsamenLe, um templote que deflne um elemenLo aLraves da composlo dos vrlos componenLes. odemos clLar, por exemplo, a deflnlo de um humanlde que necesslLa de um scrlpL de movlmenLao e um componenLe de collso. nesse caso, poderlamos crlar um ltefob desse humanlde e crlar vrlas cplas do mesmo, lncluslve com parmeLros dlferenLes. uessa forma, Lemos um ganho consldervel de Lempo pols lsso evlLarla que Llvessemos que recrlar essa composlo para cada lnsLancla de humanlde presenLe no cenrlo. ltefobs sero mals deLalhados na seo sobre sctlptloq. Importao de Assets CeralmenLe, grande parLe do desenvolvlmenLo de um [ogo esL relaclonado com a uLlllzao e manuselo de Assets Lals como LexLuras, modelos 3u, efelLos de som e sctlpts. Lsses dlferenLes Llpos de arLefaLos so desenvolvldos em ferramenLas exLernas, especlallzados na consLruo de cada um dos Llpos de Assets. Aps sua crlao ou edlo, Assets preclsam, de alguma forma, serem lmporLados para denLro de edlLor de cenas do moLor de [ogos. A unlLy possul uma forma mulLo slmples e robusLa de lmporLao de Assets para denLro de um pro[eLo, basLando que os mesmos se[am arrasLados" para denLro de uma pasLa da [anela ltoject. Ao efeLuar esLe procedlmenLo, a lmporLao e felLa auLomaLlcamenLe para o pro[eLo, sem nenhuma lnLerveno do usurlo, flcando lmedlaLamenLe dlsponlvel para ser uLlllzada denLro da apllcao. A unlLy acelLa formaLos de dlsLrlbulo populares para modelos 3u (.l8x), udlo (wav, mp3, eLc) e LexLuras ([pg, png, bmp ou mesmo .Su dlreLamenLe). Alem dessa slmpllcldade de lmporLao dos Assets, a unlLy Lambem oferece a posslbllldade da vlsuallzao em Lempo real de qualquer alLerao felLa nos mesmos. Com lsso, Lem-se um ganho de produLlvldade, pols no preclsa-se lmporLar manualmenLe novas verses para denLro da unlLy a cada vez que dese[armos efeLuar uma alLerao. A unlLy verlflca cada arqulvo modlflcado e auLomaLlcamenLe aLuallza o mesmo na cena.
3 - Mater|a|s e Shaders !ogos 3u normalmenLe possuem um grande apelo vlsual, onde a crlaLlvldade e capacldade dos arLlsLas reallza um papel fundamenLal para o sucesso. ALualmenLe, os dlsposlLlvos grflcos permlLem o uso de solues soflsLlcadas para a exlblo em Lempo real das malhas 3u dos elemenLos de uma cena. Lm especlal, faz-se onlpresenLe o uso de 5boJets programvels. C moLor de [ogos unlLy3u permlLe LanLo a crlao de 5boJets em llnguagens de programao como Cg ou CLSL, quanLo o uso de funo flxa, alem de lnclulr uma versLll coleo desses VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 10 5boJets na lnsLalao padro. C vlnculo enLre um 5boJet e uma malha 3u se faz aLraves de um Motetlol, que funclona como um conLalner para as proprledades vlsuals que cada ob[eLo da cena possul. A flgura a segulr mosLra como a aLrlbulo dessas proprledades pode ser felLa na [anela lospectot denLro do edlLor de cenas.
I|gure 8 - Man|pu|ao de um Mater|a| A especlflcao de um 5boJet deflne quals so as proprledades que esLe necesslLa para reallzar a exlblo do ob[eLo, enquanLo o Motetlol deflne os valores para essas proprledades. A prxlma flgura mosLra uma represenLao esquemLlca dessa relao. uols 5boJets so usados: uma para o corpo do carro e um para as rodas. ara o corpo do carro, dols maLerlals so crlados uLlllzando-se do mesmo 5boJet. Lm um deles, o valor da proprledade colot l\, especlflcada pelo 5boJet, e aLrlbulda com a cor vermelha, enquanLo no ouLro e usada a cor azul. uessa forma, pode-se apllcar esses dlferenLes maLerlals a ob[eLos na cena, como llusLrado na flgura.
I|gure 9 - ke|anao entre shaders, mater|a|s e ob[etos
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 11 ue forma mals especlflca, um Shader deflne: * C meLodo de renderlzao de um ob[eLo. lsso lnclul o uso de dlversas varlaes, dependendo do dlsposlLlvo grflco do usurlo, * 1odos os vettex e llxel-5boJets usados nessa renderlzao, * As proprledades que sero aLrlbulvels nas especlflcaes de maLerlals, * armeLros numerlcos ou de cor que Lambem sero aLrlbulvels nos maLerlals, um Motetlol deflne: * Cuals LexLuras usar para a renderlzao, * Cuals cores usar, * Cs valores de qualsquer ouLros Assets Lals como cobmops, llmlares de lumlnncla, eLc. ara se crlar um novo Motetlol, usa-se Assets->cteote->Motetlol no menu prlnclpal. uma vez crlado o Motetlol, pode-se apllc-lo a um ob[eLo e experlmenLar-se alLerar os valores de suas proprledades. ara apllcar um Motetlol a um ob[eLo, basLa de arrasLar o mesmo da [anela ltoject para qualquer ob[eLo na cena ou na [anela nletotcby. ara a especlflcao de 5boJets, LanLo de funo flxa quanLo programvels, a unlLy3u possul uma llnguagem prprla chamada 5boJetlob, que possul alguma semelhana com os arqulvos .l\ deflnldos para o Mlctosoft ultect\ ou a especlflcao NvlJlo cql\. Lssa llnguagem declaraLlva possul uma slnLaxe slmples e lnclul capacldades poderosas como reuso, mulLlplos passos, crlao procedural de LexLuras, enLre ouLras. nas prxlmas sees ser apresenLada uma breve lnLroduo a essa llnguagem. 3.1 - Introduo a ShaderLab ara se crlar um novo 5boJet, pode-se escolher Assets->cteote->5boJet do menu prlnclpal, ou dupllcar um exlsLenLe e Lrabalhar a parLlr do mesmo. 5boJets na unlLy3u so arqulvos de LexLo e podem ser edlLados fazendo-se um duplo-cllque nos mesmos na [anela ltoject. lnlclaremos a expllcao com um 5boJet basLanLe slmples: 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 Lsse 5boJet slmples demonsLra uma das formas mals slmples de se renderlzar um ob[eLo da cena. L deflnlda apenas uma proprledade de cor (_colot), cu[o valor padro e especlflcado aLraves de seus componenLes 8C8A. ara renderlzao, exlsLe uma unlca opo de 5ob5boJet com um passo apenas, que aLrlbul o componenLe dlfuso na plpelloe de funo flxa com o valor especlflcado para a proprledade _colot e llgando a opo de llumlnao por verLlces. C Shader a segulr deflne uma renderlzao mals compleLa, mas alnda baseada em llumlnao por verLlces: 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 } } } } 1odo 5boJet deve lnlclar com a palavra reservada 5boJet seguldo de uma sttloq que represenLa seu nome. LsLe ser o nome exlbldo na [anela lospectot. 1odo o cdlgo do 5boJet flcar deflnldo denLro de um bloco dellmlLado por [}. * L lnLeressanLe que o nome se[a curLo e descrlLlvo, no sendo necessrlo corresponder com o nome do arqulvo .sboJet, * ara uLlllzar-se submenus, basLa que se use o caracLere /, por exemplo: um nome "Meos5boJets/1este" lrla ser organlzado em um submenu no lospectot de um MaLerlal como Meos5boJets -> 1este. um 5boJet e sempre composLo de um bloco de proprledades seguldo por um ou mals blocos de 5ob5boJets, que sero expllcados a segulr.
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 13 3.1.1 - ropr|edades As proprledades deflnldas no bloco lnlclal de um Shader sero aquelas que podem ser aLrlbuldas aLraves da [anela lnspecLor para os maLerlals. C exemplo anLerlor aparecerla da segulnLe forma no edlLor de cena:
I|gure 10 - ropr|edades de um Shader (UNI1 1LCnNCLCGILS 2009A) A esLruLura de uma declarao de uma proprledade e mosLrada na flgura que segue. C prlmelro Lermo deslgna o nome lnLerno (referncla a varlvel), enquanLo os valores enLre parnLeses especlflcam a descrlo (para a [anela lospectot) e o Llpo, respecLlvamenLe. C ulLlmo Lermo especlflca o valor padro para a proprledade. Lncora[amos o lelLor a buscar a referncla compleLa sobre Llpos de proprledades posslvels no manual de usurlo da ferramenLa.
I|gure 11 - Dec|arao de uma propr|edade (UNI1 1LCnNCLCGILS 2009A) 3.1.2 - SubShaders ulsposlLlvos grflcos dlferenLes possuem capacldades dlferenLes. or exemplo, a malorla das placas grflcas aLuals do suporLe a lxel Shaders, mas mulLas placas embarcadas em placas me baraLas no. Algumas suporLam 4 LexLuras em um unlco passo, enquanLo ouLras suporLam apenas 2, e asslm por dlanLe. ara permlLlr o funclonamenLo do [ogo para qualquer que se[a o dlsposlLlvo do usurlo, um 5boJet pode conLer mulLlplos 5ob5boJets. ara renderlzar um ob[eLo, a unlLy3u passa por Lodos os 5ob5boJets e usa o prlmelro que se[a compleLamenLe suporLado pelo botJwote em uso. C cdlgo a segulr llusLra a esLruLura bslca de um 5boJet desse Llpo:
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 5ob5boJet e composLo por uma coleo de passos. ara cada passo, a geomeLrla do ob[eLo e renderlzada, porLanLo ao menos um passo e necessrlo. C exemplo vettxllt possul apenas um passo: //... 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 } } // ... 1odos os comandos em um passo conflguram o botJwote grflco para renderlzar a geomeLrla de alguma manelra especlflca. no exemplo aclma, o bloco Motetlol vlncula as proprledades deflnldas pelo 5boJet com os parmeLros de maLerlal do slsLema de llumlnao em funo flxa. C comando llqbtloq Oo llga a funclonalldade de llumlnao por verLlces, enquanLo 5epotote5pecolot Oo deflne o uso de uma cor separada para o parmeLro de reflecLncla especular. 1odos esses comandos so mapeados dlreLamenLe ao modelo de plpelloe de funo flxa CpenCL/ulrecL3u dos dlsposlLlvos grflcos. C comando 5et1extote e basLanLe lmporLanLe, e especlflca a forma como as proprledades mapeadas para LexLuras so apllcadas em con[unLo VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 15 com o modelo de llumlnao da plpelloe. Lsse comando e seguldo por um bloco conLendo a frmula que deflne a equao de comblnao das LexLuras para cada plxel/fragmenLo renderlzado. no exemplo em quesLo: Combine texture * primary DOUBLE, texture * constant nesse comando, o Lermo textote e referenLe a cor obLlda pelo mapeamenLo da LexLura (nesse caso _Molo1ex). LsLa cor e mulLlpllcada (*) pela cor prlmrla (ptlmoty) do verLlce, compuLada pela equao de llumlnao da plpellne flxa e posLerlormenLe lnLerpolada para cada plxel. LsLe valor e dupllcado (uOu8l) para lnLenslflcar a llumlnao. C valor de Lransparncla (olpbo) e opclonalmenLe especlflcado aps a vlrgula, onde e compuLado pela mulLlpllcao do valor olpbo da LexLura com a cor consLanLe deflnlda para a plpelloe (coostootcolot). ulferenLes modos de comblnao de LexLura podem ser especlflcados para a obLeno dos resulLados dese[ados. 3.2 - Shader|ab rogramve| A unlLy permlLe ao desenvolvedor o uso de Shaders programados na llnguagem Cg da nvldla ou em assembly. 1ambem e posslvel a crlao de Shaders com CLSL caso o [ogo se[a dlsponlblllzado apenas para Mac CSx, uma vez que o mdulo de renderlzao para Wlndows usa ulrecLx, que no suporLa Lal llnguagem. Cs 5boJets programvels so lncluldos dlreLamenLe em uma especlflcao 5boJetlob, subsLlLulndo o papel de um passo de renderlzao em um 5ob5boJet. Lssa lnLegrao e basLanLe lnLeressanLe por dols moLlvos: slmpllflca a passagem de parmeLros de maLerlals para esses 5boJets, permlLe a uLlllzao mlsLa de funo flxa com 5boJets programvels em um mesmo ob[eLo (com o uso de mulLlplo passos de renderlzao). C cdlgo a segulr exempllflca como um passo de renderlzao pode ser especlflcado aLraves de um cdlgo em Cg. Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag
// Cdigo para Vertex e Pixel Shaders (funes vert e frag)
ENDCG } C exemplo a segulr, uma especlflcao 5boJetlob compleLa, usa a lnformao da normal dos verLlces para compor a cor exlblda. C marcador #ptoqmo vettex vett lndlca a funo que ser execuLada como o vettex 5boJet para os ob[eLos que usam desse Shader para renderlzao. ue forma slmllar, pode-se deflnlr o llxel 5boJet.
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 } } } Cbserva-se que nesse exemplo, no fol especlflcada uma funo para o llxel 5boJet, que nesse caso ser uma verso padro que usa lnLerpolao para exlblr as cores compuLadas por esse vextex 5boJet. A flgura a segulr mosLra o resulLado desse cdlgo apllcado a um ob[eLo.
I|gure 12 - Shader que ex|be norma|s ua mesma forma que os Shader de funo flxa, e posslvel se passar parmeLros de maLerlal que so especlflcados no edlLor de cena, usar LexLuras, mulLlplos canals de mapeamenLo uv, ou qualquer ouLra opo que se[a lnLeressanLe para se aLlnglr os resulLados dese[ados. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 17 4 - S|stema de I|s|ca A unlLy3u uLlllza lnLernamenLe o popular moLor de flslca lbys\ da NvlJlo para efeLuar a slmulao flslca de corpos rlgldos e o LraLamenLo de collses. A lbys\ e um moLor de flslca uLlllzado em vrlos [ogos populares Lals como Moss ffect, MeJol of nooot. Altbooe, enLre ouLros, sendo conslderado um dos mals compleLos do mercado, lncluslve com a posslbllldade de ser execuLado em Cus, o que pode acarreLar em malor desempenho. Com essa lnLegrao, o desenvolvedor Lem acesso slmpllflcado a um slsLema de slmulao flslca soflsLlcado. vrlas das funclonalldades oferecldas pela lbys\ so manlpuladas graflcamenLe aLraves da lnLerface da unlLy, permlLlndo que slmulaes flslcas complexas se[am desenvolvldas em pouco Lempo, aumenLando a produLlvldade do desenvolvedor. Co|||ders CeomeLrlas bslcas de collso Lals como esfera, cubo, cpsula, ou preclsas como um Mesh Colllder, so lmplemenLados como componenLes para ob[eLos de [ogo na unlLy. Lsses componenLes podem ser anexados a um ob[eLo da cena, que passar a fazer parLe da slmulao flslca. Cs parmeLros de cada geomeLrla de collso esLo dlsponlvels para alLerao pelo edlLor de cena.
uessa forma, pode-se LraLar a slmulao flslca de vrlos ob[eLos aLraves da uLlllzao de uma geomeLrla envolvenLe ou, caso necessrlo, aLe mesmo da geomeLrla real do ob[eLo, geralmenLe sendo uLlllzado em cenrlos esLLlcos, que necesslLam de fldelldade de represenLao. Alem dlsso, devldo ao faLo do cenrlo ser esLLlco, vrlas oLlmlzaes so efeLuadas a flm de garanLlr um bom desempenho da slmulao. Alem de sua funo prlnclpal na slmulao flslca, esLes componenLes Lambem podem ser uLlllzados como ttlqqets, ou se[a, elemenLos que aLlvam o processamenLo de um Lrecho de VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 18 cdlgo caso ocorra uma collso com esLes. ComponenLes deflnldos como ttlqqets no so slmulados como componenLes de flslca normals duranLe a slmulao. Character Contro||er AdlclonalmenLe ao que [ fol apresenLado, a unlLy Lambem oferece acesso a um Llpo especlal de ob[eLo dlsponlvel na lbys\: o cbotoctet coottollet. CeralmenLe, o conLrole preclso de ob[eLos que sofrem ao da flslca e basLanLe compllcado de ser efeLuado duranLe uma slmulao. um exemplo desse Llpo de preclso serla o conLrole de um personagem. Como sabemos, esse Llpo de slmulao flslca e basLanLe complexo, pols alem do LraLamenLo das foras, deve-se LraLar Lambem o as roLaes lndese[adas. uma soluo serla slmplesmenLe lgnorar a geomeLrla de collso do personagem, porem adoLando essa soluo no Lerlamos a lnLerao do mesmo com os ob[eLos do cenrlo. uLlllzando o componenLe cbotoctet coottollet, Lem-se a posslbllldade de conLrolar esse Llpo de ob[eLo facllmenLe, evlLando Lodas as operaes lndese[adas dlLas anLerlormenLe, manLendo a lnLerao com os ob[eLos do cenrlo. Abalxo Lem-se um exemplo da conflgurao desse ob[eLo em um personagem.
I|gure 13 - Componente para personagens
kagdo||s Alem do cbotoctet coottollet, Lem-se Lambem a posslbllldade de slmular toqJolls com o uso do componenLe cbotoctet Iolot. LsLe componenLe permlLe que slmulaes de personagens lnanlmados (morLos?) se[am reallzadas mals flelmenLe, Lal como um boneco de pano". uLlllzando um wlzotJ, pode-se especlflcar onde enconLram-se os plvs de roLao, alem de vrlos ouLros parmeLros responsvels pela slmulao desse Llpo de ob[eLo. Abalxo Lemos uma lmagem da conflgurao desse Llpo de slmulao. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 19
I|gure 14 - S|stema de ragdo||
Whee| Co|||ders um ouLro recurso basLanLe uLll oferecldo pela lbys\ aLraves da unlLy e um componenLe especlal para slmulao de velculos chamado wbeel colllJet. Com esLe componenLe, pode-se slmular fora de Lrao, frlco, enLre ouLras caracLerlsLlcas que ocorrem normalmenLe em rodas de velculos. nesLe caso, o movlmenLo do carro e efeLuado aLraves da apllcao de foras nesses componenLes. A uLlllzao desLe componenLe permlLe slmular desde foras de frlco aLe o comporLamenLo de amorLecedores, conforme pode ser observado abalxo.
I|gure 1S - Whee| Co|||ders
uLlllzando a hlerarqula enLre Come Objects da unlLy, o movlmenLo de um velculo pode ser slmulado facllmenLe aLraves da conflgurao hlerrqulca desLes componenLes correLamenLe. Io|nts uma funclonalldade mulLo lmporLanLe dlsponlvel na unlLy e a posslbllldade do uso de Iolots, ou [unes, de vrlos Llpos para a slmulao de ob[eLos conecLados a ouLros com resLrles em seu grau de llberdade. Cs segulnLes Iolots esLo dlsponlvels na hysx aLraves da unlLy: VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 20 n|nge Io|nt: permlLe a conexo de dols ob[eLos aLraves da slmulao de uma dobradla. ldeal para a slmulao de porLas, pndulos e ouLros ob[eLos que necesslLem desLe Llpo de conexo.
I|gure 16 - n|nge Io|nt Spr|ng Io|nt: permlLe a conexo de dols ab[eLos aLraves da slmulao de uma mola. Cb[eLos conecLados uLlllzando esse Llpo de jolot possuem uma dlsLncla mxlma de separao que, aps solLos, Lendem a volLar a sua dlsLncla de repouso.
I|gure 17 - Spr|ng Io|nt I|xed Io|nt: permlLe a conexo enLre dols ob[eLos de forma que os movlmenLos de um ob[eLo se[am dependenLes do ouLro. Slmllar a uLlllzao das hlerarqulas de Lransformao da unlLy, porem, lmplemenLado aLraves da flslca. ldeal para ob[eLos que possam ser desconecLados um do ouLro duranLe a slmulao.
I|gure 18 - I|xed Io|nt Conf|gurab|e Io|nt: esse Llpo de jolot oferece a posslbllldade de cusLomlzao de seu comporLamenLo. Aqul, vrlos Llpos de conflgurao podem ser efeLuadas como resLrlo de movlmenLo e/ou roLao e acelerao de movlmenLo e roLao. uessa forma, Lemos como consLrulr um jolot de acordo com a necessldade requerlda. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 21 or flm, a lbys\ nos permlLe efeLuar slmulaes de superflcles de conLaLos aLraves dos maLerlals flslcos. Com lsso, Lemos a posslbllldade de alLerar a forma como os ob[eLos lnLeragem aLraves do a[usLe das proprledades dos maLerlals que esLes ob[eLos uLlllzam Lals como frlco e o efelLo da lnLerao enLre a collso de dols ob[eLos. S - Scr|pt|ng C slsLema de sctlptloq da unlLy3u e abrangenLe e flexlvel, o que permlLe o desenvolvlmenLo de [ogos compleLos sem a necessldade do uso de C/C++. lnLernamenLe, os sctlpts so execuLados aLraves de uma verso modlflcada da blblloLeca Mooo, uma lmplemenLao de cdlgo aberLo para o slsLema .Net. Lssa blblloLeca, permlLe que os scrlpLs se[am lmplemenLados em qualquer uma de Lrs llnguagens, a escolha do programador: jovosctlpt, c# ou 8oo (um dlaleLo de lytboo). no exlsLe penalldade por se escolher uma llnguagem ou ouLra, sendo lncluslve posslvel se usar mals de uma delas em um mesmo [ogo. A documenLao oflclal, enLreLanLo, uLlllza Iovosctlpt para a malorla dos exemplos. ue forma conslsLenLe a arqulLeLura desenvolvlda, scrlpLs na unlLy3u so acoplados como componenLes de qome objects. uessa forma, e lmporLanLe pro[eLar os sctlpts de manelra modular, ganhando com lsso a flexlbllldade do reuso. nessa seo, lremos descrever algumas caracLerlsLlcas lmporLanLes do slsLema de sctlptloq da unlLy3u. S.1 - Cr|ao de scr|pts ara crlar um sctlpt, basLa escolher a opo Assets -> cteote -> Iovosctlpt no menu prlnclpal. 1ambem e posslvel se crlar sctlpts usando o boLo dlrelLo do mouse sobre a [anela ptoject. LxlsLe a opo de se crlar o sctlpt em qualquer uma das Lrs llnguagens dlsponlvels.
I|gure 19 - Cr|ao de um scr|pt (UNI1 1LCnNCLCGILS 2009A) L posslvel se edlLar o sctlpt cllcando duas vezes sobre o mesmo na [anela ltoject. lsso lr abrlr o edlLor padro (unlSclLe no Wlndows ou unlLron no Mac CSx). A edlo de sctlpts sempre e VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 22 felLa em um programa exLerno e no dlreLamenLe pela unlLy3u, que pode ser alLerado nas prefernclas de usurlo. Lsse e o conLeudo de um Iovosctlpt recem-crlado na unlLy3u: function Update () { } um sctlpt novo no reallza Larefa alguma alnda, enLo pode-se adlclonar funclonalldade ao mesmo. C cdlgo a segulr serve como um exemplo bslco: function Update () { print("Hello World"); } Ao ser execuLado, esse cdlgo lr exlblr a expresso "Pello World" no console. Mas alnda no exlsLe nada que causa a execuo desse cdlgo. L necessrlo se acoplar esse sctlpt a um Come Object aLlvo na cena para que lsso ocorra. lsso pode ser felLo se arrasLando o arqulvo do scrlpL para o ob[eLo escolhldo LanLo na [anela nletotcby, quanLo dlreLamenLe ao mesmo na [anela 5ceoe. 1ambem pode-se seleclonar o ob[eLo escolhldo e adlclonar o scrlpL aLraves do menu prlnclpal, como mosLra a flgura a segulr.
I|gure 20 - Ad|o de um scr|pt a um ob[eto se|ec|onado (UNI1 1LCnNCLCGILS 2009A) Ao se seleclonar o ob[eLo ao qual o scrlpL recem-crlado fol adlclonado, ser posslvel se vlsuallzar o mesmo, lndlcando sua correLa vlnculao.
I|gure 21 - Scr|pt v|ncu|ado a ob[eto (UNI1 1LCnNCLCGILS 2009A) VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 23 A funo ptlot() e basLanLe uLll quando se esL depurando um sctlpt, mas no faz nada de uLll em Lermos de [ogabllldade. C cdlgo a segulr adlclona alguma funclonalldade ao ob[eLo que conLem o sctlpt: function Update () { transform.Rotate(0, 5*Time.deltaTime, 0); } ara quem e novo em llnguagens de scrlpL para [ogos, o cdlgo pode parecer um pouco confuso. Alguns concelLos lmporLanLes que devem ser aprendldos: 1. fooctloo upJote () {} e a sobrescrlLa do meLodo upJote, que ser execuLado pela unlLy3u uma vez a cada frame, 2. ttoosfotm e uma referncla ao componenLe 1toosfotm do Come Object em quesLo. 3. kotote() e um meLodo exlsLenLe no componenLe 1toosfotm, 4. Cs parmeLros desse meLodo represenLam os graus de roLao sobre cada um dos elxos em um espao 3u: x, ?, and Z. 3. 1lme.Jelto1lme e um aLrlbuLo da classe 1lme que represenLa o Lempo que passou (em segundos) desde que o ulLlmo upJote ocorreu. Lssa varlvel serve para garanLlr que o ob[eLo em quesLo se[a roLaclonado na mesma velocldade, lndependenLe da capacldade de processamenLo do compuLador no qual o cdlgo ser execuLado. uessa forma, 3 * 1lme.Jelto1lme represenLa 3 graus por segundo. ! exlsLem refernclas como essa para alguns componenLes que so comuns de serem uLlllzados em ob[eLos. Alguns dos mals lmporLanLes so: Lransform - represenLa o poslclonamenLo, orlenLao e escala do ob[eLo, rlgldbody - represenLa o corpo rlgldo para o sub-slsLema de flslca (quando exlsLlr), anlmaLlon - uLlllzado para aclonar os clclos de anlmao de um modelo crlado em uma ferramenLa de anlmao como o 3u SLudlo Max, renderer - componenLe encarregado da exlblo de um ob[eLo na cena, audlo - fonLe de efelLo de udlo, vlnculada a um ob[eLo para lncorporar poslclonamenLo de udlo 3u, colllder - geomeLrla de collso para o subslsLema de flslca ou para uLlllzao como 1tlqqet. S.2 - Acesso a outros componentes e troca de mensagens LnLreLanLo, mulLos ouLros componenLes pre-exlsLenLes, asslm como ScrlpLs crlados especlflcamenLe para cada [ogo, no Lm refernclas especlals lncluldas. ara esses, e necessrla alguma manelra de se obLer uma referncla em Lempo de execuo. lsso e felLo aLraves do meLodo Cetcompooeot() exlsLenLe em qualquer scrlpL. Lsse meLodo pode ser usado para se obLer a referncla a qualquer componenLe vlnculado ao ob[eLo no qual o sctlpt em quesLo esL acoplado (ou a qualquer ob[eLo que se Lenha uma referncla em uma varlvel). C exemplo a segulr mosLra como obLer a referncla a um sctlpt chamado "ConLrolador":
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 varlvel "c" fol usada para se guardar a referencla a lnsLncla do sctlpt ConLrolador vlnculado ao mesmo ob[eLo de [ogo em quesLo. Lm segulda, fol execuLado o meLodo "MeuMeLodo" nessa mesma lnsLncla. L sempre preferlvel, por quesLes de desempenho, guardar refernclas aos componenLes como exempllflcado aclma. LnLreLanLo, exlsLem slLuaes onde pode ser dese[vel se envlar uma deLermlnada mensagem a Lodos os componenLes de um deLermlnado ob[eLo. lsso e posslvel aLraves do meLodo 5eoJMessoqe da classe ComeObject. 1odo sctlpt Lem acesso a lnsLncla de ComeObject ao qual esL vlnculado. C segulnLe exemplo LenLa execuLar (caso exlsLa) o meLodo "1esLe" em Lodos os componenLes do ob[eLo ao qual esse scrlpL for vlnculado: gameObject.SendMessage("Teste"); um exemplo comum para o uso de SendMessage e a apllcao de "dano" a um personagem que fol aLlngldo por uma bala, bomba, ou qualquer ouLro ob[eLo do [ogo que possa causar algum efelLo desse Llpo. A soluo pode ser crlar esse pro[eLll como um ob[eLo com componenLes de flslca (colllJet e tlqlJboJy), e lnclulr um sctlpt slmples que envla uma mensagem asslm que esse pro[eLll aLlnglr algo na cena: function OnCollisionEnter(collision : Collision) { collision.gameObject.SendMessage("AplicarDano"); Destroy(this.gameObject); } C cdlgo aclma ser execuLado asslm que o pro[eLll (ob[eLo conLendo represenLao flslca e esse sctlpt) colldlr com ouLro ob[eLo com flslca na cena. A mensagem envlada lr causar a execuo do meLodo "Apllcaruano" em Lodos os sctlpts do ob[eLo aLlngldo, caso esse meLodo exlsLa. A llnha segulnLe remove o pro[eLll da cena. S.3 - Acesso a var|ve|s Cs scrlpLs de roLao apresenLados aLe agora glram o ob[eLo 3 graus a cada segundo. 1alvez se[a lnLeressanLe roLaclonar a uma velocldade angular dlferenLe dessa. uma opo e alLerar esse valor no cdlgo e salv-lo, mas exlge uma recompllao desse, ao mesmo Lempo que lmpede que usemos o mesmo scrlpL com dlferenLes velocldades. LxlsLe uma forma bem mals rplda para lsso, que lncluslve permlLe a alLerao de parmeLros como esse em Lempo de execuo no edlLor de cena, e e basLanLe slmples de ser lmplemenLada. Lm vez de dlglLar o valor 3 dlreLamenLe, pode-se crlar um aLrlbuLo speeJ, do Llpo floot, no sctlpt e usar esse na chamada ao meLodo kotote(). C exemplo a segulr mosLra como lsso pode ser felLo: 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 Agora observe o ob[eLo conLendo o sctlpt na [anela lospectot. ode-se noLar que o valor do aLrlbuLo aparece no edlLor de cena, como mosLra a flgura a segulr.
I|gure 22 - A|terao do va|or de um atr|buto (UNI1 1LCnNCLCGILS 2009A) LsLe valor pode agora ser modlflcado dlreLamenLe pela [anela lospectot, da mesma forma que pode-se renomear um arqulvo. Seleclonando-se a mesma, pode-se alLerar seu valor. 1ambem pode-se desllzar os valores com o mouse usando o boLo dlrelLo. ode-se alLerar o valor de aLrlbuLos como esse a qualquer momenLo, lncluslve enquanLo o [ogo esL sendo execuLado. Ao aperLar o boLo lloy e modlflcar-se o valor desse aLrlbuLo, a velocldade de roLao do ob[eLo lr ser alLerada lnsLanLaneamenLe. Ao se salr do modo de execuo, o valor volLa ao anLerlor. uessa forma, pode-se experlmenLar a vonLade e ao flnal decldlr manLer o valor anLerlor ou alLer-lo de forma permanenLe (sem o boLo lloy presslonado). Lssa forma de alLerao de valores em aLrlbuLos Lambem lmpllca que e posslvel se usar um mesmo scrlpL em dlversos ob[eLos, cada um com um valor especlflco para o mesmo. Cada alLerao felLa lr afeLar a velocldade apenas do ob[eLo no qual a mudana fol reallzada. S.4 - refabs e Instanc|ao A crlao de qome objects aLraves de composlo e basLanLe flexlvel, mas em alguns momenLos pode ser basLanLe Lrabalhoso recrlar cerLas dessas composles que preclsam ser usadas em dlversas cenas de um mesmo [ogo, comparLllhadas com ouLros desenvolvedores ou mesmo lnsLancladas lnLeraLlvamenLe duranLe a execuo do [ogo. um ltefob e um Llpo de osset - um Come Object reusvel armazenado na [anela ltoject. ltefobs podem ser lnserldos em dlversas cenas, mulLlplas vezes em cada uma delas. Ao se adlclonar um ltefob a uma cena, esL sendo crlada uma lnsLncla do mesmo. 1odas essas lnsLnclas esLo llgadas ao ltefob orlglnal e so no fundo clones desse. lndependenLe de quanLas lnsLnclas exlsLam no pro[eLo, qualquer mudana felLa ao ltefob orlglnal ser apllcada a Lodas essas cplas exlsLenLes nas cenas. ara se crlar um ltefob, e preclso crlar um conLalner vazlo para o mesmo usando o menu. Lsse ltefob vazlo no conLem um Come Object alnda, e porLanLo no pode ser lnsLanclado na cena VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 26 alnda. Aps ser recheado com dados de um Come Object, lsso pode ser felLo. A flgura a segulr mosLra um ltefob recem-crlado, alnda sem conLeudo (lndlcado pela ausncla de cor em seu nome na [anela ltoject).
I|gure 23 - Cr|ao de um refab (UNI1 1LCnNCLCGILS 2009A)
ara preencher um prefab, deve ser usado algum ob[eLo exlsLenLe na cena aLual. C segulnLe roLelro expllca como esse processo pode ser reallzado: 1. Lscolha Assets->cteote->ltefob no menu prlnclpal e d um nome ao mesmo, 2. na [anela nletotcby, seleclone o Come Object que se dese[a guardar como um ltefob, 3. ArrasLe e solLe esse ob[eLo da [anela nletotcby sobre o novo ltefob na [anela ltoject. Aps reallzados esses passos, o ob[eLo, Lodos os seus "fllhos", componenLes e valores de aLrlbuLos foram coplados no ltefob. Agora e posslvel se crlar dlversas lnsLnclas do mesmo arranLando-se para cena a parLlr da [anela nletotcby. C prprlo ob[eLo usado para a crlao do ltefob fol Lransformado em uma lnsLncla do mesmo. 1odas as lnsLnclas de um ltefob possuem a mesma esLruLura e, orlglnalmenLe, os mesmos valores para os aLrlbuLos de seus componenLes. LnLreLanLo, e posslvel alLerar dlversas lnsLnclas, alnda vlnculadas ao ltefob orlglnal, os valores de alguns aLrlbuLos. As alLeraes felLas ao ltefob alnda sero propagadas para essas lnsLnclas, apenas os aLrlbuLos marcados como especlflcos Lero seus valores manLldos. A segulnLe flgura mosLra esse procedlmenLo, que conslsLe em se marcar a calxa que flca a esquerda do nome do aLrlbuLo, na [anela nletotcby (no exemplo em quesLo, o aLrlbuLo de nome kepeot 1tlqqet no ser alLerado de acordo com as modlflcaes no ltefob). VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 27
I|gure 24 - Atr|buto desv|ncu|ado do refab (UNI1 1LCnNCLCGILS 2009A) Lm dlversas slLuaes pode ser necessrlo se lnsLanclar ob[eLos em Lempo de execuo. um exemplo que llusLra esse cenrlo pode ser a crlao de fogueLes que so lanados quando o [ogador presslona uma Lecla ou boLo. ltefobs so uma ferramenLa uLll nessas slLuaes, pols a crlao de cplas dos mesmos aLraves de sctlpts e basLanLe slmples, como expllcado a segulr. A prlmelra Larefa e a crlao de um ltefob conLendo os componenLes e valores callbrados para os aLrlbuLos dese[ados para o referldo fogueLe. no lremos enLrar em deLalhes sobre a crlao da funclonalldade do fogueLe em sl, e slm com o processo de lnsLanclao do mesmo. ara se Ler a referncla a um ltefob aLraves de um sctlpt, basLa que se crle um aLrlbuLo cu[o Llpo se[a um dos componenLes exlsLenLes nesse ltefob. no nosso exemplo, o fogueLe ser gulado pelo slsLema de slmulao flslca, e consequenLemenLe um dos componenLes do mesmo e um klqlJboJy, dessa forma o scrlpL de lnsLanclao deve lnclulr a segulnLe llnha: var rocket : Rigidbody; lsso lr permlLlr ao desenvolvedor arrasLar o ltefob do fogueLe dlreLamenLe da [anela ltoject para a [anela nletotcby de forma a esLabelecer a referncla necessrla. C cdlgo a segulr crla uma lnsLncla do fogueLe em Lempo de execuo, ao mesmo Lempo que adlclona uma velocldade lnlclal ao mesmo, referenLe a orlenLao do ob[eLo que o crlou: var r : Rigidbody = Instantiate(rocket, transform.position, transform.rotation); rocket.velocity = transform.forward * speed; L lmporLanLe observar que o cdlgo aclma lndepende da esLruLura uLlllzada para o ltefob que represenLa o fogueLe, desde que o mesmo lnclua um componenLe klqlJboJy. lsso permlLe a crlao de proLLlpos slmples e funclonals bem anLes da exlsLncla de Assets deflnlLlvos como modelos 3u ou slsLemas de parLlculas. Cs scrlpLs crlados lnlclalmenLe alnda sero posslvels de se usar mesmo com a evoluo desse ltefob para uma verso mals bem acabada para a represenLao desse fogueLe. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 28 6 - Conc|uso Lsse LuLorlal apresenLou um lnLroduo suclnLa sobre o moLor de [ogos unlLy3u. C ob[eLlvo fol expor de manelra slmpllflcada as prlnclpals funclonalldades dessa versLll ferramenLa de desenvolvlmenLo de [ogos. Lspera-se que o lelLor lnLeressado busque um malor aprofundamenLo nesse assunLo aLraves da blbllografla sugerlda no flnal desse LuLorlal. Cs auLores gosLarlam de agradecer as pessoas que dlreLa ou lndlreLamenLe conLrlbulram para a confeco desse maLerlal. Lm especlal gosLarlamos de agradecer as nossas famlllas, pela paclncla e apolo lncondlclonal, e Lambem a excelenLe comunldade de desenvolvedores e colaboradores unlLy pelas excelenLes lnformaes e LuLorlals dlsponlblllzados. llnalmenLe, os auLores gosLarlam de agradecer os lelLores desse LuLorlal e lnformar que a Loda a equlpe do ull-MedlaLab se coloca a dlsposlo para conLaLo aLraves dos emalls lnformados na capa. VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 29 8|b||ograf|a 8lLAS , S. 2002. A Joto-Jtlveo qome object system. 1alk aL Lhe Came uevelopers Conference '02. ASSCS, L. 8., SlLvA, !., nASClMLn1C, C. 1., CZCvl1S, L. CLuA, L. W. C. 2008. lost ooJ sofe ptototyploq of qome objects wltb JepeoJeocy lojectloo. Anals do Slmpslo 8rasllelro de Cames e LnLreLenlmenLo ulglLal. So Leopoldo, 8S. 2008 S1C?, C. 2006. Come object compooeot system. ln Came rogrammlng Cems 6, Charles 8lver Medla, M. ulckhelser, Ld., glnas 33 a 403. unl1? 1LCPnCLCClLS. 200 (A). uolty Ju uset Mooool [onllne]. ulsponlvel em: www.unlLy3d.com/supporL/documenLaLlon/Manual [Acessado em 20 agosLo de 200]. unl1? 1LCPnCLCClLS. 200 (8). uolty Ju commoolty lotom [onllne]. ulsponlvel em: forum.unlLy3d.com/ [Acessado em 23 agosLo de 200]. unl1? 1LCPnCLCClLS. 200 (C). uolty Ju Oolloe 1ototlols [onllne]. ulsponlvel em: www.unlLy3d.com/supporL/documenLaLlon/LuLorlals [Acessado em 30 agosLo de 200]. unll? CCMMunl1?. 200. uolty Ju commoolty wlkl [onllne]. ulsponlvel em: www.unlfycommunlLy.com/wlkl [Acessado em 28 agosLo de 200].
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009 30