Вы находитесь на странице: 1из 30

1utor|a|: Desenvo|v|mento de Iogos com Un|ty 3D

Lr|ck 8apt|sta assos


epassosQ|c.uff.br
Ios k|cardo da S||va Ir.
[oser|cardo.[rQgma||.com
Iernando Lm|||ano Cardoso k|be|ro
one.fernandoQgma||.com
edro 1h|ago Mouro
pedroth|agoQhotma||.com






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