Você está na página 1de 30

VIII Brazilian Symposium on Games and Digital Entertainment

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

Tutorial:DesenvolvimentodeJogoscomUnity3D

ErickBaptistaPassos
epassos@ic.uff.br

JosRicardodaSilvaJr.
josericardo.jr@gmail.com

FernandoEmilianoCardosoRibeiro
one.fernando@gmail.com

PedroThiagoMouro
pedrothiago@hotmail.com

VIII Brazilian Symposium on Games and Digital Entertainment

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

Apresentao

Essetutorialapresentadocomoumabreveintroduoaodesenvolvimentodejogoscomo
motor Unity3D. Explicaes muito detalhadas, mesmo que cobrindo apenas parte das
funcionalidades existentes, ocupariam bem mais que as trs dezenas de pginas disponveis
paraestetutorial.Dessaforma,recomendamosoleitorinteressadoabuscarmaisinformaes
na abrangente e excelente documentao da ferramenta, disponvel tanto localmente, ao se
realizarasuainstalao,quantoonlineatravsdositehttp://www.unity3d.com/support.
Tambmporquestesdeespao,nofoiincludaumaintroduogeralaodesenvolvimento
dejogos.Esperasequeoleitorpossuaalgumafamiliaridadecomosconceitoseferramentas
relacionados ao assunto tais como renderizao em temporeal, modelagem e animao 3D,
texturas e Shaders. Tambm esperase que o leitor possua noes de programao,
preferencialmentecomalgumalinguagemorientadaaobjetos.
O contedo do texto est organizado em forma crescente de complexidade, de forma a
facilitar a leitura. Entretanto, as sees apresentadas tambm podem ser lidas de forma
independente.
AimagemdacapafoicedidadoprojetoFranaAntrtica,decujaequipededesenvolvimento
fazemparte alguns dos autores. O jogoFranaAntrticaestsendodesenvolvidoatravsda
Unity3DeumprojetofinanciadopelaSecretariadeCulturadoEstadodoRiodeJaneiro.
Por fim, informase que algumas das figuras e exemplos apresentados foram adaptados do
manualdaferramenta,detutoriaisonline(http://www.unity3d.com/resources),bemcomode
discusses disponveis no forum comunitrio de desenvolvedores Unity
(http://forum.unity3d.com). Tambm recomendamos o leitor que explore essas referncias
paraummaioraprofundamento.

VIII Brazilian Symposium on Games and Digital Entertainment

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

Guiadeleitura

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

VIII Brazilian Symposium on Games and Digital Entertainment

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

1Introduo
Odesenvolvimentodejogos3Dumaatividadeaomesmotempogratificanteedesafiadora.
Diversashabilidades,dediferentesreasdoconhecimento,sonecessriasnesseprocesso.O
usodeferramentasparaauxiliarnastarefasrepetitivasfundamentalnessetipodeatividade,
eaolongodotempo,umtipoespecialdeferramenta,conhecidocomomotordejogos(game
engine) foi evoluindo de maneira paralela aos prprios jogos, ao ponto que se tornaram
produtosvaliososedecertaformapopulares.
Alguns mdulos e funcionalidades auxiliares so condies necessrias para que uma
ferramenta seja considerada um motor de jogos completo. Em especial, um sistema de
renderizao 3D com suporte a Shaders programveis e um sistema de simulao fsica so
fundamentais. Uma boa arquitetura para a programao de scripts, um editor de cenas
integrado,eacapacidadedeseimportardiretamentemodelos3d,imagenseefeitosdeudio
produzidos em ferramentas externas, so as caractersticas existentes nos motores de jogos.
Alm disso, desejvel que os jogos desenvolvidos possam ser distribudos em mltiplas
plataformascomoPC,consolesoumesmodispositivosmveis.
AUnity3DabstraidodesenvolvedordejogosanecessidadedeutilizardiretamenteDirectXou
OpenGL (apesar de ainda ser possvel, caso necessrio), suportando a criao de Shaders
complexoscomalinguagemCgdaNVidia.Internamente,osubsistemadesimulaofsicao
popularPhysX,tambmdaNVidia.Paraaexecuodescripts,aUnityusaumaversodealto
desempenhodabibliotecaMono,umaimplementaodecdigoabertodoframework.Netda
Microsoft.
Aindaquesejaumaferramentaqueincluioestadodaartenoseusegmento,aUnity3Dtem
um preo acessvel, o que apenas mais uma das razes para sua crescente popularidade.
MesmousandoaversomaisbaratadaUnity3d,osjogospodemserdesenvolvidosparaPC,
Mac ou mesmo embutidos em uma pgina Web. Com a aquisio de licenas especficas,
podesedesenvolveredistribuirjogosparaiPhone,atravsdalojaonlinedaApple,oumesmo
paraoconsoleWiidaNintendo.
1.1Interface
O motor de jogos Unity3D possui uma interface bastante simples e amigvel que objetiva
facilitar o desenvolvimento de jogos de diversos gneros e outros sistemas de visualizao.
Sua rea de trabalho composta de vrias janelas chamadas views, cada uma com um
propsitoespecfico.Afiguraabaixoumacapturacontendoumarepresentaoesquemtica
eaidentificaodecadaumadessasjanelasnoeditordecenasdaUnity3D.

VIII Brazilian Symposium on Games and Digital Entertainment

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

Figure1InterfacedoeditordecenadaUnity3D(UNITYTECHNOLOGIES2009A)

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

Figure2JanelaProject

VIII Brazilian Symposium on Games and Digital Entertainment

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

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

Figure3JanelaHierarchycomdoisobjetos

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

VIII Brazilian Symposium on Games and Digital Entertainment

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

Figure4JanelaScene

Gameview
A janela Game responsvel pela visualizao da aplicao em desenvolvimento da forma
queelaserexibidaquandofinalizada.Nessajanela,podeserapidamenteterumaprviade
comooselementosestosecomportandodentrodaaplicao.Almdisso,aUnityfornecea
opodeseparalisar(botopause)asimulaoenquantoelaestiveremdepurao,deforma
a possibilitar que os parmetros dos vrios elementos possam ser ajustados para
experimentao.Lembramosqueoajustedessesparmetrosnonecessitamqueasimulao
estejaparalisada,podendoseralteradosinclusiveenquantoasimulaoestejaemexecuo.
Nesta janela, tambm podese visualizar vrias informaes estatsticas (stats) sobre a
simulao,taiscomotempodeprocessamentoenmerodeframesporsegundo,nmerode
tringulos e vrtices renderizados, memria de textura utilizada, entre outras. Esta opo
importante para a depurao do desempenho da simulao para uma posterior otimizao,
casosejanecessrio.
Inspectorview
NajanelaInspector,temseacessoaosvriosparmetrosdeumobjetopresentenocenrio,
bem como aos atributos de seus componentes (Components). Essa estrutura utilizada pela
Unityparaacomposiodeobjetossermelhorexplicadanaprximaseo.Aindanajanela
Inspector, podese ajustar os atributos pblicos (parmetros) de cada componente, inclusive
duranteaexecuodaaplicao.

VIII Brazilian Symposium on Games and Digital Entertainment

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

Figure5JanelaInspector

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

VIII Brazilian Symposium on Games and Digital Entertainment

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

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

Figure6ComposiodeumGameObject(Camera)

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

VIII Brazilian Symposium on Games and Digital Entertainment

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

Figure7Estruturamnimadeumobjeto

Na Unity tambm temos o conceito de Prefab. Um Prefab simplesmente um modelo de


composio de Game Object j definido, ou mais precisamente, umtemplate que define um
elemento atravs da composio dos vrios componentes. Podemos citar, por exemplo, a
definiodeumhumanidequenecessitadeumscriptdemovimentaoeumcomponente
decoliso.Nessecaso,poderamoscriarumPrefabdessehumanideecriarvriascpiasdo
mesmo,inclusivecomparmetrosdiferentes.Dessaforma,temosumganhoconsidervelde
tempo pois isso evitaria que tivssemos que recriar essa composio para cada instancia de
humanidepresentenocenrio.Prefabsseromaisdetalhadosnaseosobrescripting.
ImportaodeAssets
Geralmente,grandepartedodesenvolvimentodeumjogoestrelacionadocomautilizaoe
manuseiodeAssetstaiscomotexturas,modelos3D,efeitosdesomescripts.Essesdiferentes
tipos de artefatos so desenvolvidos em ferramentas externas, especializados na construo
decadaumdostiposdeAssets.Apssuacriaoouedio,Assetsprecisam,dealgumaforma,
seremimportadosparadentrodeeditordecenasdomotordejogos.
AUnitypossuiumaformamuitosimpleserobustadeimportaodeAssetsparadentrodeum
projeto, bastando que os mesmos sejam arrastados para dentro de uma pasta da janela
Project.Aoefetuaresteprocedimento,aimportaofeitaautomaticamenteparaoprojeto,
sem nenhuma interveno do usurio, ficando imediatamente disponvel para ser utilizada
dentrodaaplicao.AUnityaceitaformatosdedistribuiopopularesparamodelos3D(.FBX),
udio(wav,mp3,etc)etexturas(jpg,png,bmpoumesmo.PSDdiretamente).
AlmdessasimplicidadedeimportaodosAssets,aUnitytambmofereceapossibilidadeda
visualizao em tempo real de qualquer alterao feita nos mesmos. Com isso, temse um
ganho de produtividade, pois no precisase importar manualmente novas verses para
dentro da Unity a cada vez que desejarmos efetuar uma alterao. A Unity verifica cada
arquivomodificadoeautomaticamenteatualizaomesmonacena.

3MateriaiseShaders
Jogos3Dnormalmentepossuemumgrandeapelovisual,ondeacriatividadeecapacidadedos
artistas realiza um papel fundamental para o sucesso. Atualmente, os dispositivos grficos
permitem o uso de solues sofisticadas para a exibio em tempo real das malhas 3D dos
elementosdeumacena.Emespecial,fazseonipresenteousodeShadersprogramveis.
OmotordejogosUnity3DpermitetantoacriaodeShadersemlinguagensdeprogramao
como Cg ou GLSL, quanto o uso de funo fixa, alm de incluir uma verstil coleo desses

10

VIII Brazilian Symposium on Games and Digital Entertainment

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

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

Figure8ManipulaodeumMaterial

AespecificaodeumShaderdefinequaissoaspropriedadesqueestenecessitapararealizar
a exibio do objeto, enquanto o Material define os valores para essas propriedades. A
prximafiguramostraumarepresentaoesquemticadessarelao.DoisShaderssousados:
uma para o corpo do carro e um para as rodas. Para o corpo do carro, dois materiais so
criados utilizandose do mesmo Shader. Em um deles, o valor da propriedade Color FX,
especificada pelo Shader, atribuda com a cor vermelha, enquanto no outro usada a cor
azul.Dessaforma,podeseaplicaressesdiferentesmateriaisaobjetosnacena,comoilustrado
nafigura.

Figure9Relanaoentreshaders,materiaiseobjetos

11

VIII Brazilian Symposium on Games and Digital Entertainment

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

Deformamaisespecfica,umShaderdefine:
* O mtodo de renderizao de um objeto. Isso inclui o uso de diversas variaes,
dependendododispositivogrficodousurio;
*TodososVertexePixelShadersusadosnessarenderizao;
*Aspropriedadesqueseroatribuveisnasespecificaesdemateriais;
*Parmetrosnumricosoudecorquetambmseroatribuveisnosmateriais;
UmMaterialdefine:
*Quaistexturasusarparaarenderizao;
*Quaiscoresusar;
*OsvaloresdequaisqueroutrosAssetstaiscomoCubmaps,limiaresdeluminncia,etc.
ParasecriarumnovoMaterial,usaseAssets>Create>Materialnomenuprincipal.Umavez
criadooMaterial,podeseaplicloaumobjetoeexperimentarsealterarosvaloresdesuas
propriedades. Para aplicar um Material a um objeto, basta de arrastar o mesmo da janela
ProjectparaqualquerobjetonacenaounajanelaHierarchy.
ParaaespecificaodeShaders,tantodefunofixaquantoprogramveis,aUnity3Dpossui
uma linguagem prpria chamada ShaderLab, que possui alguma semelhana com os
arquivos.FXdefinidosparaoMicrosoftDirectXouaespecificaoNVidiaCgFX.Essalinguagem
declarativapossuiumasintaxesimpleseincluicapacidadespoderosascomoreuso,mltiplos
passos, criao procedural de texturas, entre outras. Nas prximas sees ser apresentada
umabreveintroduoaessalinguagem.
3.1IntroduoaShaderLab
ParasecriarumnovoShader,podeseescolherAssets>Create>Shaderdomenuprincipal,ou
duplicarumexistenteetrabalharapartirdomesmo.ShadersnaUnity3Dsoarquivosdetexto
epodemsereditadosfazendoseumduplocliquenosmesmosnajanelaProject.Iniciaremosa
explicaocomumShaderbastantesimples:
Shader "Tutorial/Basic" {
Properties {
_Color ("Main Color", Color) = (1.0,0.5,0.5,1.0)
}
SubShader {
Pass {
Material {
Diffuse [_Color]
}
Lighting On
}
}
}

12

VIII Brazilian Symposium on Games and Digital Entertainment

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

Esse Shader simples demonstra uma dasformasmaissimplesdeserenderizarumobjetoda


cena. definida apenas uma propriedade de cor (_Color), cujo valor padro especificado
atravsdeseuscomponentesRGBA.Pararenderizao,existeumanicaopodeSubShader
comumpassoapenas,queatribuiocomponentedifusonapipelinedefunofixacomovalor
especificadoparaapropriedade_Coloreligandoaopodeiluminaoporvrtices.
OShaderaseguirdefineumarenderizaomaiscompleta,masaindabaseadaemiluminao
porvrtices:
Shader "VertexLit" {
Properties {
_Color ("Main Color", Color) = (1,1,1,0.5)
_SpecColor ("Spec Color", Color) = (1,1,1,1)
_Emission ("Emmisive Color", Color) = (0,0,0,0)
_Shininess ("Shininess", Range (0.01, 1)) = 0.7
_MainTex ("Base (RGB)", 2D) = "white" { }
}
SubShader {
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
SeparateSpecular On
SetTexture [_MainTex] {
constantColor [_Color]
Combine texture * primary DOUBLE, texture * constant
}
}
}
}

Todo Shader deve iniciar com a palavra reservada Shader seguido de uma string que
representaseunome.EsteseronomeexibidonajanelaInspector.TodoocdigodoShader
ficardefinidodentrodeumblocodelimitadopor{}.
*interessantequeonomesejacurtoedescritivo,nosendonecessriocorrespondercom
onomedoarquivo.shader;
* Para utilizarse submenus, basta que se use o caractere /, por exemplo: um nome
"MeusShaders/Teste"iriaserorganizadoemumsubmenunoInspectordeumMaterialcomo
MeusShaders>Teste.UmShadersemprecompostodeumblocodepropriedadesseguido
porumoumaisblocosdeSubShaders,queseroexplicadosaseguir.

13

VIII Brazilian Symposium on Games and Digital Entertainment

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

3.1.1Propriedades
As propriedades definidas no bloco inicial de um Shader sero aquelas que podem ser
atribudas atravs da janela Inspector para os materiais. O exemplo anterior apareceria da
seguinteformanoeditordecena:

Figure10PropriedadesdeumShader(UNITYTECHNOLOGIES2009A)

A estrutura de uma declarao de uma propriedade mostrada na figura que segue. O


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

Figure11Declaraodeumapropriedade(UNITYTECHNOLOGIES2009A)

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

14

VIII Brazilian Symposium on Games and Digital Entertainment

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

Shader "Structure Example" {


Properties { /* ...shader properties... }
SubShader {
// ...subshader com Vertex e Pixel/fragment shaders...
}
SubShader {
// ...subshader que usa 4 texturas por passo...
}
SubShader {
// ...subshader que usa 2 texturas por passo...
}
SubShader {
// ...subshader "feio" mas que roda em qualquer
hardware... :)
}
}
Cada SubShader composto por uma coleo de passos. Para cada passo, a geometria do
objeto renderizada, portanto ao menos um passo necessrio. O exemplo VertxLit possui
apenasumpasso:
//...
Pass {
Material {
Diffuse [_Color]
Ambient [_Color]
Shininess [_Shininess]
Specular [_SpecColor]
Emission [_Emission]
}
Lighting On
SeparateSpecular On
SetTexture [_MainTex] {
constantColor [_Color]
Combine texture * primary DOUBLE, texture * constant
}
}
// ...
Todososcomandosemumpassoconfiguramohardwaregrficopararenderizarageometria
de alguma maneira especfica. No exemplo acima, o bloco Material vincula as propriedades
definidaspeloShadercomosparmetrosdematerialdosistemadeiluminaoemfunofixa.
O comando Lighting On liga a funcionalidade de iluminao por vrtices, enquanto
SeparateSpecular On define o uso de uma cor separada para o parmetro de reflectncia
especular.
Todos esses comandos so mapeados diretamente ao modelo de pipeline de funo fixa
OpenGL/Direct3D dos dispositivos grficos. O comando SetTexture bastante importante, e
especificaaformacomoaspropriedadesmapeadasparatexturassoaplicadasemconjunto

15

VIII Brazilian Symposium on Games and Digital Entertainment

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

comomodelo de iluminao dapipeline.Essecomandoseguidoporumblococontendoa


frmula que define a equao de combinao das texturas para cada pixel/fragmento
renderizado.Noexemploemquesto:
Combine texture * primary DOUBLE, texture * constant
Nessecomando,otermotexturereferentecorobtidapelomapeamentodatextura(nesse
caso_MainTex).Estacormultiplicada(*)pelacorprimria(primary)dovrtice,computada
pelaequaodeiluminaodapipelinefixaeposteriormenteinterpoladaparacadapixel.Este
valorduplicado(DOUBLE)paraintensificarailuminao.Ovalordetransparncia(alpha)
opcionalmente especificado aps a vrgula, onde computado pela multiplicao do valor
alpha da textura com a cor constante definida para a pipeline (constantColor). Diferentes
modos de combinao de textura podem ser especificados para a obteno dos resultados
desejados.
3.2ShaderlabProgramvel
AUnitypermiteaodesenvolvedorousodeShadersprogramadosnalinguagemCgdaNVidia
ou em assembly. Tambm possvel a criao de Shaders com GLSL caso o jogo seja
disponibilizadoapenasparaMacOSX,umavezqueomduloderenderizaoparaWindows
usaDirectX,quenosuportatallinguagem.
Os Shaders programveis so includos diretamente em uma especificao ShaderLab,
substituindo o papel de um passo de renderizao em um SubShader. Essa integrao
bastante interessante por dois motivos: simplifica a passagem de parmetros de materiais
para esses Shaders; permite a utilizao mista de funo fixa com Shaders programveis em
um mesmo objeto (com o uso de mltiplo passos de renderizao). O cdigo a seguir
exemplificacomoumpassoderenderizaopodeserespecificadoatravsdeumcdigoem
Cg.
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// Cdigo para Vertex e Pixel Shaders (funes vert e frag)
ENDCG
}
Oexemploaseguir,umaespecificaoShaderLabcompleta,usaainformaodanormaldos
vrticesparacomporacorexibida.Omarcador#pragmavertexvertindicaafunoqueser
executada como o Vertex Shader para os objetos que usam desse Shader para renderizao.
Deformasimilar,podesedefiniroPixelShader.

16

VIII Brazilian Symposium on Games and Digital Entertainment

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

Shader "Debug/Normals" {
SubShader {
Pass {
Fog { Mode Off }
CGPROGRAM
#pragma vertex vert
// parmetros de entrada para o Vertex Shader
struct appdata {
float4 vertex;
float3 normal;
};
struct v2f {
float4 pos : POSITION;
float4 color : COLOR;
};
v2f vert (appdata v) {
v2f o;
o.pos = mul( glstate.matrix.mvp, v.vertex );
o.color.xyz = v.normal * 0.5 + 0.5;
o.color.w = 1.0;
return o;
}
ENDCG
}
}
}

Observase que nesse exemplo, no foi especificada uma funo para o Pixel Shader, que
nessecasoserumaversopadroqueusainterpolaoparaexibirascorescomputadaspor
esseVextexShader.Afiguraaseguirmostraoresultadodessecdigoaplicadoaumobjeto.

Figure12Shaderqueexibenormais

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

17

VIII Brazilian Symposium on Games and Digital Entertainment

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

4SistemadeFsica
A Unity3D utiliza internamente o popular motor de fsica PhysX da NVidia para efetuar a
simulao fsica de corpos rgidos e o tratamento de colises. A PhysX um motor de fsica
utilizado em vrios jogos populares tais como Mass Effect, Medal of Honor: Airbone, entre
outros,sendoconsideradoumdosmaiscompletosdomercado,inclusivecomapossibilidade
deserexecutadoemGPUs,oquepodeacarretaremmaiordesempenho.Comessaintegrao,
odesenvolvedortemacessosimplificadoaumsistemadesimulaofsicasofisticado.Vrias
dasfuncionalidadesoferecidaspelaPhysXsomanipuladasgraficamenteatravsdainterface
daUnity,permitindoquesimulaesfsicascomplexassejamdesenvolvidasempoucotempo,
aumentandoaprodutividadedodesenvolvedor.
Colliders
Geometrias bsicas de coliso tais como esfera, cubo, cpsula, ou precisas como um Mesh
Collider, so implementados como componentes para objetos de jogo na Unity. Esses
componentes podem ser anexados a um objeto da cena, que passar a fazer parte da
simulaofsica.Osparmetrosdecadageometriadecolisoestodisponveisparaalterao
peloeditordecena.

Dessaforma,podesetratarasimulaofsicadevriosobjetosatravsdautilizaodeuma
geometria envolvente ou, caso necessrio, at mesmo da geometria real do objeto,
geralmente sendo utilizado em cenrios estticos, que necessitam de fidelidade de
representao. Alm disso, devido ao fato do cenrio ser esttico, vrias otimizaes so
efetuadasafimdegarantirumbomdesempenhodasimulao.
Alm de sua funo principal na simulao fsica, estes componentes tambm podem ser
utilizados como triggers, ou seja, elementos que ativam o processamento de um trecho de

18

VIII Brazilian Symposium on Games and Digital Entertainment

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

cdigo caso ocorra uma coliso com estes. Componentes definidos como triggers no so
simuladoscomocomponentesdefsicanormaisduranteasimulao.
CharacterController
Adicionalmenteaoquejfoiapresentado,aUnitytambmofereceacessoaumtipoespecial
de objeto disponvel na PhysX: o Character Controller. Geralmente, o controle preciso de
objetos que sofrem ao da fsica bastante complicado de ser efetuado durante uma
simulao. Um exemplo desse tipo de preciso seria o controle de um personagem. Como
sabemos, esse tipo de simulao fsica bastante complexo, pois alm do tratamento das
foras,devesetratartambmoasrotaesindesejadas.
Uma soluo seria simplesmente ignorar a geometria de coliso do personagem, porm
adotando essa soluo no teramos a interao do mesmo com os objetos do cenrio.
UtilizandoocomponenteCharacterController,temseapossibilidadedecontrolaressetipode
objetofacilmente,evitandotodasasoperaesindesejadasditasanteriormente,mantendoa
interao com os objetos do cenrio. Abaixo temse um exemplo da configurao desse
objetoemumpersonagem.

Figure13Componenteparapersonagens

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

19

VIII Brazilian Symposium on Games and Digital Entertainment

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

Figure14Sistemaderagdoll

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

Figure15WheelColliders

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

20

VIII Brazilian Symposium on Games and Digital Entertainment

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

HingeJoint:permiteaconexodedoisobjetosatravsdasimulaodeumadobradia.Ideal
paraasimulaodeportas,pnduloseoutrosobjetosquenecessitemdestetipodeconexo.

Figure16HingeJoint

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

Figure17SpringJoint

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

Figure18FixedJoint

Configurable Joint: esse tipo de joint oferece a possibilidade de customizao de seu


comportamento. Aqui, vrios tipos de configurao podem ser efetuadas como restrio de
movimento e/ou rotao e acelerao de movimento e rotao. Dessa forma, temos como
construirumjointdeacordocomanecessidaderequerida.

21

VIII Brazilian Symposium on Games and Digital Entertainment

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

Por fim, a PhysX nos permite efetuar simulaes de superfcies de contatos atravs dos
materiais fsicos. Com isso, temos a possibilidade de alterar a forma como os objetos
interagem atravs do ajuste das propriedades dos materiais que estes objetos utilizam tais
comofricoeoefeitodainteraoentreacolisodedoisobjetos.
5Scripting
OsistemadescriptingdaUnity3Dabrangenteeflexvel,oquepermiteodesenvolvimento
de jogos completos sem a necessidade do uso de C/C++. Internamente, os scripts so
executados atravs de uma verso modificada da biblioteca Mono, uma implementao de
cdigo aberto para o sistema .Net. Essa biblioteca, permite que os scripts sejam
implementadosemqualquerumadetrslinguagens,escolhadoprogramador:javascript,C#
ouBoo(umdialetodePython).Noexistepenalidadeporseescolherumalinguagemououtra,
sendo inclusive possvel se usar mais de uma delas em um mesmo jogo. A documentao
oficial,entretanto,utilizaJavascriptparaamaioriadosexemplos.
De forma consistente arquitetura desenvolvida, scripts na Unity3D so acoplados como
componentes de game objects. Dessa forma, importante projetar os scripts de maneira
modular,ganhandocomissoaflexibilidadedoreuso.Nessaseo,iremosdescreveralgumas
caractersticasimportantesdosistemadescriptingdaUnity3D.
5.1Criaodescripts
Paracriarumscript,bastaescolheraopoAssets>Create>Javascriptnomenuprincipal.
Tambm possvel se criar scripts usando o boto direito do mouse sobre a janela project.
Existeaopodesecriaroscriptemqualquerumadastrslinguagensdisponveis.

Figure19Criaodeumscript(UNITYTECHNOLOGIES2009A)

possvelseeditaroscriptclicandoduasvezessobreomesmonajanelaProject.Issoirabrir
oeditorpadro(UniScitenoWindowsouUnitronnoMacOSX).Aediodescriptssempre

22

VIII Brazilian Symposium on Games and Digital Entertainment

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

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

Figure20Adiodeumscriptaumobjetoselecionado(UNITYTECHNOLOGIES2009A)

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


visualizaromesmo,indicandosuacorretavinculao.

Figure21Scriptvinculadoaobjeto(UNITYTECHNOLOGIES2009A)

23

VIII Brazilian Symposium on Games and Digital Entertainment

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

Afunoprint()bastantetilquandoseestdepurandoumscript,masnofaznadadetil
em termos de jogabilidade. O cdigo a seguir adiciona alguma funcionalidade ao objeto que
contmoscript:
function Update () {
transform.Rotate(0, 5*Time.deltaTime, 0);
}
Para quem novo em linguagens de script para jogos, o cdigo pode parecer um pouco
confuso.Algunsconceitosimportantesquedevemseraprendidos:
1.functionUpdate(){}asobrescritadomtodoUpdate,queserexecutadopelaUnity3D
umavezacadaframe;
2.transformumarefernciaaocomponenteTransformdoGameObjectemquesto.
3.Rotate()ummtodoexistentenocomponenteTransform;
4.Osparmetrosdessemtodorepresentamosgrausderotaosobrecadaumdoseixos
emumespao3D:X,Y,andZ.
5. Time.deltaTime um atributo da classe Time que representa o tempo que passou (em
segundos)desdequeoltimoUpdateocorreu.Essavarivelserveparagarantirqueoobjeto
em questo seja rotacionado na mesma velocidade, independente da capacidade de
processamento do computador no qual o cdigo ser executado. Dessa forma, 5 *
Time.deltaTimerepresenta5grausporsegundo.
J existem referncias como essa para alguns componentes que so comuns de serem
utilizadosemobjetos.Algunsdosmaisimportantesso:

transformrepresentaoposicionamento,orientaoeescaladoobjeto;
rigidbodyrepresentaocorporgidoparaosubsistemadefsica(quandoexistir);
animation utilizado para acionar os ciclos de animao de um modelo criado em uma
ferramentadeanimaocomoo3DStudioMax;
renderercomponenteencarregadodaexibiodeumobjetonacena;
audiofontedeefeitodeudio,vinculadaaumobjetoparaincorporarposicionamento
deudio3D;
collidergeometriadecolisoparaosubsistemadefsicaouparautilizaocomoTrigger.

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

24

VIII Brazilian Symposium on Games and Digital Entertainment

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

var c : Controlador = GetComponent(Controlador);


c.MeuMetodo();
Nesse exemplo, a varivel "c" foi usada para se guardar a referencia a instncia do script
Controlador vinculado ao mesmo objeto de jogo em questo. Em seguida, foi executado o
mtodo"MeuMtodo"nessamesmainstncia.
sempre prefervel, por questes de desempenho, guardar referncias aos componentes
como exemplificado acima. Entretanto, existem situaes onde pode ser desejvel se enviar
uma determinada mensagem a todos os componentes de um determinado objeto. Isso
possvel atravs do mtodo SendMessage da classe GameObject. Todo script tem acesso
instncia de GameObject ao qual est vinculado. O seguinte exemplo tenta executar (caso
exista)omtodo"Teste"emtodososcomponentesdoobjetoaoqualessescriptforvinculado:
gameObject.SendMessage("Teste");
UmexemplocomumparaousodeSendMessageaaplicaode"dano"aumpersonagem
que foi atingido por uma bala, bomba, ou qualquer outro objeto do jogo que possa causar
algum efeito desse tipo. A soluo pode ser criar esse projtil como um objeto com
componentes de fsica (collider e rigidbody), e incluir um script simples que envia uma
mensagemassimqueesseprojtilatingiralgonacena:
function OnCollisionEnter(collision : Collision) {
collision.gameObject.SendMessage("AplicarDano");
Destroy(this.gameObject);
}
O cdigo acima ser executado assim que o projtil (objeto contendo representao fsica e
esse script) colidir com outro objeto com fsica na cena. A mensagem enviada ir causar a
execuodomtodo"AplicarDano"emtodososscriptsdoobjetoatingido,casoessemtodo
exista.Alinhaseguinteremoveoprojtildacena.
5.3Acessoavariveis
Os scripts de rotao apresentados at agora giram o objeto 5 graus a cada segundo. Talvez
seja interessante rotacionar a uma velocidade angular diferente dessa. Uma opo alterar
esse valor no cdigo e salvlo, mas exige uma recompilao desse, ao mesmo tempo que
impedequeusemosomesmoscriptcomdiferentesvelocidades.Existeumaformabemmais
rpida para isso, que inclusive permite a alterao de parmetros como esse em tempo de
execuonoeditordecena,ebastantesimplesdeserimplementada.
Em vez de digitar o valor 5 diretamente, podese criar um atributo speed, do tipo float, no
scripteusaressenachamadaaomtodoRotate().Oexemploaseguirmostracomoissopode
serfeito:
var speed = 5.0;
function Update () {
transform.Rotate(0, speed*Time.deltaTime, 0);
}

25

VIII Brazilian Symposium on Games and Digital Entertainment

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

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

Figure22Alteraodovalordeumatributo(UNITYTECHNOLOGIES2009A)

EstevalorpodeagorasermodificadodiretamentepelajanelaInspector,damesmaformaque
podeserenomearumarquivo.Selecionandoseamesma,podesealterarseuvalor.Tambm
podese deslizar os valores com o mouse usando o boto direito. Podese alterar o valor de
atributoscomoesseaqualquermomento,inclusiveenquantoojogoestsendoexecutado.
Ao apertar o boto Play e modificarse o valor desse atributo, a velocidade de rotao do
objeto ir ser alterada instantaneamente. Ao se sair do modo de execuo, o valor volta ao
anterior. Dessa forma, podese experimentar a vontade e ao final decidir manter o valor
anterioroualterlodeformapermanente(semobotoPlaypressionado).
Essa forma de alterao de valores em atributos tambm implica que possvel se usar um
mesmo script em diversos objetos, cada um com um valor especfico para o mesmo. Cada
alteraofeitairafetaravelocidadeapenasdoobjetonoqualamudanafoirealizada.
5.4PrefabseInstanciao
A criao de game objects atravs de composio bastante flexvel, mas em alguns
momentospodeserbastantetrabalhosorecriarcertasdessascomposiesqueprecisamser
usadasemdiversascenasdeummesmojogo,compartilhadascomoutrosdesenvolvedoresou
mesmoinstanciadasinterativamenteduranteaexecuodojogo.
Um Prefab um tipo de asset um Game Object reusvel armazenado na janela Project.
Prefabs podem ser inseridos em diversas cenas, mltiplas vezes em cada uma delas. Ao se
adicionar um Prefab a uma cena, est sendo criada uma instncia do mesmo. Todas essas
instncias esto ligadas ao Prefab original e so no fundo clones desse. Independente de
quantasinstnciasexistamnoprojeto,qualquermudanafeitaaoPrefaboriginalseraplicada
atodasessascpiasexistentesnascenas.
ParasecriarumPrefab,precisocriarumcontainervazioparaomesmousandoomenu.Esse
PrefabvazionocontmumGameObjectainda,eportantonopodeserinstanciadonacena

26

VIII Brazilian Symposium on Games and Digital Entertainment

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

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

Figure23CriaodeumPrefab(UNITYTECHNOLOGIES2009A)

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

27

VIII Brazilian Symposium on Games and Digital Entertainment

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

Figure24AtributodesvinculadodoPrefab(UNITYTECHNOLOGIES2009A)

Em diversas situaes pode ser necessrio se instanciar objetos em tempo de execuo. Um


exemplo que ilustra esse cenrio pode ser a criao de foguetes que so lanados quando o
jogadorpressionaumateclaouboto.Prefabssoumaferramentatilnessassituaes,pois
acriaodecpiasdosmesmosatravsdescriptsbastantesimples,comoexplicadoaseguir.
AprimeiratarefaacriaodeumPrefabcontendooscomponentesevalorescalibradospara
osatributosdesejadosparaoreferidofoguete.Noiremosentraremdetalhessobreacriao
dafuncionalidadedofogueteemsi,esimcomoprocessodeinstanciaodomesmo.Parase
terarefernciaaumPrefabatravsdeumscript,bastaquesecrieumatributocujotiposeja
umdoscomponentesexistentesnessePrefab.Nonossoexemplo,ofogueteserguiadopelo
sistema de simulao fsica, e conseqentemente um dos componentes do mesmo um
Rigidbody,dessaformaoscriptdeinstanciaodeveincluiraseguintelinha:
var rocket : Rigidbody;
IssoirpermitiraodesenvolvedorarrastaroPrefabdofoguetediretamentedajanelaProject
paraajanelaHierarchydeformaaestabelecerareferncianecessria.Ocdigoaseguircria
uma instncia do foguete em tempo de execuo, ao mesmo tempo que adiciona uma
velocidadeinicialaomesmo,referenteorientaodoobjetoqueocriou:
var r : Rigidbody = Instantiate(rocket, transform.position,
transform.rotation);
rocket.velocity = transform.forward * speed;
importanteobservarqueocdigoacimaindependedaestruturautilizadaparaoPrefabque
representa o foguete, desde que o mesmo inclua um componente Rigidbody. Isso permite a
criaodeprottipossimplesefuncionaisbemantesdaexistnciadeAssetsdefinitivoscomo
modelos3Dousistemasdepartculas.Osscriptscriadosinicialmenteaindaseropossveisde
se usar mesmo com a evoluo desse Prefab para uma verso mais bem acabada para a
representaodessefoguete.

28

VIII Brazilian Symposium on Games and Digital Entertainment

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

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

29

VIII Brazilian Symposium on Games and Digital Entertainment

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

Bibliografia
BILAS,S.2002.Adatadrivengameobjectsystem.TalkattheGameDevelopersConference02.
PASSOS, E. B., SILVA, J., NASCIMENTO, G. T., KOZOVITS, L. CLUA, E. W. G. 2008. Fast and safe
prototypingofgameobjectswithdependencyinjection.AnaisdoSimpsioBrasileirodeGames
eEntretenimentoDigital.SoLeopoldo,RS.2008
STOY, C. 2006. Game object component system. In Game Programming Gems 6, Charles River
Media,M.Dickheiser,Ed.,Pginas393a403.
UNITY TECHNOLOGIES. 2009 (A). Unity 3D User Manual [online]. Disponvel em:
www.unity3d.com/support/documentation/Manual[Acessadoem20agostode2009].
UNITY TECHNOLOGIES. 2009 (B). Unity 3D Community Forum [online]. Disponvel em:
forum.unity3d.com/[Acessadoem25agostode2009].
UNITY TECHNOLOGIES. 2009 (C). Unity 3D Online Tutorials [online]. Disponvel em:
www.unity3d.com/support/documentation/tutorials[Acessadoem30agostode2009].
UNIFY COMMUNITY. 2009. Unity 3D Community Wiki [online]. Disponvel em:
www.unifycommunity.com/wiki[Acessadoem28agostode2009].

30

Você também pode gostar