-
Tutorial:DesenvolvimentodeJogoscomUnity3D
[email protected]
[email protected]
[email protected]
[email protected]
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
1
-
Apresentao
Essetutorialapresentadocomoumabreveintroduoaodesenvolvimentodejogoscomo
motor Unity3D. Explicaes muito detalhadas, mesmo que cobrindo
apenas parte dasfuncionalidades existentes, ocupariambemmais que as
trs dezenas de pginas
disponveisparaestetutorial.Dessaforma,recomendamosoleitorinteressadoabuscarmaisinformaes
naabrangenteeexcelentedocumentaoda ferramenta,disponvel tanto
localmente,aoserealizarasuainstalao,quantoonlineatravsdositehttp://www.unity3d.com/support.
Tambmporquestesdeespao,nofoi includauma
introduogeralaodesenvolvimentodejogos.Esperasequeoleitorpossuaalgumafamiliaridadecomosconceitoseferramentas
relacionadosaoassunto
taiscomorenderizaoemtemporeal,modelagemeanimao3D,texturas e
Shaders. Tambm esperase que o leitor possua noes de
programao,preferencialmentecomalgumalinguagemorientadaaobjetos.
O contedo do texto est organizado em forma crescente de
complexidade, de forma a
facilitar a leitura. Entretanto, as sees apresentadas tambm
podem ser lidas de formaindependente.
AimagemdacapafoicedidadoprojetoFranaAntrtica,decujaequipededesenvolvimentofazempartealgunsdosautores.O
jogoFranaAntrticaestsendodesenvolvidoatravsda
Unity3DeumprojetofinanciadopelaSecretariadeCulturadoEstadodoRiodeJaneiro.
Por fim, informase que algumas das figuras e exemplos
apresentados foram adaptados
domanualdaferramenta,detutoriaisonline(http://www.unity3d.com/resources),bemcomodediscusses
disponveis no forum comunitrio de desenvolvedores Unity
(http://forum.unity3d.com). Tambm recomendamos o leitor que
explore essas refernciasparaummaioraprofundamento.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
2
-
Guiadeleitura
1Introduo
BreveapresentaodosmdulosdaUnity3Dedetalhamentodainterfacedoeditordecenas.
2CriaoeManipulaodeGameObjects
ExplicaodomodelodeobjetosdaUnity3Deasformasbsicasdecriao,composioe
alteraodosmesmos.
3MateriaiseShaders
BreveintroduolinguagemdeespecificaodeShadersdaUnity3D:ShaderLab.Sodemonstradosexemplosparapipelinedefunofixa,bemcomoShadersprogramveis.
4SistemadeFsica
IntroduoaoscomponentesrelacionadosaosubsistemaPhysXdesimulaofsica.
5Scripting
Apresentao,atravsdeexemplos,dosprincipaisconceitosparaaprogramaodescriptscomaUnity3D.
6Concluso
Consideraesfinaisdosautores.
Bibliografia
Leiturasrecomendadasparaaquelesinteressadosemummaioraprofundamento.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
3
-
1Introduo
Odesenvolvimentodejogos3Dumaatividadeaomesmotempogratificanteedesafiadora.
Diversashabilidades,dediferentesreasdoconhecimento,sonecessriasnesseprocesso.Ousodeferramentasparaauxiliarnastarefasrepetitivasfundamentalnessetipodeatividade,eaolongodotempo,umtipoespecialdeferramenta,conhecidocomomotordejogos(game
engine) foi evoluindo de maneira paralela aos prprios jogos, ao
ponto que se tornaramprodutosvaliososedecertaformapopulares.
Alguns mdulos e funcionalidades auxiliares so condies necessrias
para que umaferramenta seja considerada um motor de jogos completo.
Em especial, um sistema de
renderizao 3D com suporte a Shaders programveis e um sistemade
simulao fsica sofundamentais. Uma boa arquitetura para a programao
de scripts, um editor de
cenasintegrado,eacapacidadedeseimportardiretamentemodelos3d,imagenseefeitosdeudio
produzidosemferramentasexternas,
soascaractersticasexistentesnosmotoresde jogos.Alm disso, desejvel
que os jogos desenvolvidos possam ser distribudos em
mltiplasplataformascomoPC,consolesoumesmodispositivosmveis.
AUnity3DabstraidodesenvolvedordejogosanecessidadedeutilizardiretamenteDirectXou
OpenGL (apesar de ainda ser possvel, caso necessrio), suportando
a criao de
ShaderscomplexoscomalinguagemCgdaNVidia.Internamente,osubsistemadesimulaofsicaopopularPhysX,tambmdaNVidia.Paraaexecuodescripts,aUnityusaumaversodealto
desempenhodabibliotecaMono,umaimplementaodecdigoabertodoframework.NetdaMicrosoft.
Aindaquesejaumaferramentaqueincluioestadodaartenoseusegmento,aUnity3Dtemum
preo acessvel, o que apenasmais uma das razes para sua crescente
popularidade.
MesmousandoaversomaisbaratadaUnity3d,os
jogospodemserdesenvolvidosparaPC,Mac ou mesmo embutidos em uma
pginaWeb. Com a aquisio de licenas
especficas,podesedesenvolveredistribuirjogosparaiPhone,atravsdalojaonlinedaApple,oumesmo
paraoconsoleWiidaNintendo.
1.1Interface
O motor de jogos Unity3D possui uma interface bastante simples e
amigvel que objetivafacilitar o desenvolvimento de jogos de
diversos gneros e outros sistemas de visualizao.Sua rea de trabalho
composta de vrias janelas chamadas views, cada uma com um
propsitoespecfico.AfiguraabaixoumacapturacontendoumarepresentaoesquemticaeaidentificaodecadaumadessasjanelasnoeditordecenasdaUnity3D.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
4
-
Figure1InterfacedoeditordecenadaUnity3D(UNITYTECHNOLOGIES2009A)
Projectview
AjanelaProjectainterfaceparamanipulaoeorganizaodosvriosarquivos(Assets)que
compemumprojetotaiscomoscripts,modelos,texturas,efeitosdeudioePrefabs,osquaisserodetalhadosmais
adiantena seode scripting.Aestruturaexibidana janelaProject
correspondente subpasta Assets dentro da pasta do projeto no
sistema de arquivos do
computador. Recomendase que a manipulao de sua estrutura e
contedo seja
efetuadasomentedentrodaUnity3D,afimdemanteraintegridadedosmetadadosquesoassociadosa
estes elementos. Entretanto, certasmudanas, como atualizao de uma
textura por um
editordeimagensporexemplo,oumesmoaadiodenovosAssets,podeserfeitadeformaseguradiretamentenosistemadearquivos.
Figure2JanelaProject
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
5
-
Hierarchyview
A
janelaHierarchyexibetodososelementosdacenaqueencontramsenacenaqueseest
editando. Alm disso, nessa janela podemos organizar e visualizar
a hierarquia de decomposioentreosvriosobjetosquecompemacena
(grafodecena).O
funcionamentodessesobjetos,bemcomoahierarquiadetransformaoserexplicadomaisdetalhadamente
naprximaseo.
Figure3JanelaHierarchycomdoisobjetos
Sceneview
AjanelaSceneaformaprincipaldemanipulaodoselementosvisuaisnoeditordecenasda
Unity, possibilitando a orientao e posicionamento desses
elementos com um
feedbackimediatodoefeitodasalteraesefetuadas.Nestajanela,podesemanipulargraficamenteosobjetosatravsdasopesdearrastaresoltarcomomouse.Essamanipulaosemelhante
quela de ferramentas demodelagem 3D e podesemanipular objetos
tais como
cmeras,cenrios,personagensetodososelementosquecompemacena.
Devidoasuagrandeimportnciaduranteodesenvolvimentodeumaaplicao,vriasformasdenavegaosooferecidasafimdeaumentaraindamaisaprodutividadedodesenvolvedor.
Alm disso, as ferramentas bsicas demanipulao dos elementos da
cena, tais
comopan,translao,rotaoeescalatambmestodisponveisparautilizaonestajanelaatravsdeatalhosdeteclado(teclasQ,W,EeR).
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
6
-
Figure4JanelaScene
Gameview
A janelaGame responsvel pela visualizao da aplicao em
desenvolvimento da forma
queelaserexibidaquandofinalizada.Nessajanela,podeserapidamenteterumaprviadecomooselementosestosecomportandodentrodaaplicao.Almdisso,aUnityforneceaopodeseparalisar(botopause)asimulaoenquantoelaestiveremdepurao,deforma
a possibilitar que os parmetros dos vrios elementos possam ser
ajustados
paraexperimentao.Lembramosqueoajustedessesparmetrosnonecessitamqueasimulaoestejaparalisada,podendoseralteradosinclusiveenquantoasimulaoestejaemexecuo.
Nesta janela, tambm podese visualizar vrias informaes
estatsticas (stats) sobre a
simulao,taiscomotempodeprocessamentoenmerodeframesporsegundo,nmerodetringulos
e vrtices renderizados,memria de textura utilizada, entre outras.
Esta opo importante para a depurao do desempenho da simulao para
uma posterior otimizao,
casosejanecessrio.
Inspectorview
Najanela Inspector,
temseacessoaosvriosparmetrosdeumobjetopresentenocenrio,bem como aos
atributos de seus componentes (Components). Essa estrutura
utilizada
pelaUnityparaacomposiodeobjetossermelhorexplicadanaprximaseo.Aindanajanela
Inspector, podeseajustarosatributospblicos (parmetros)de cada
componente, inclusiveduranteaexecuodaaplicao.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
7
-
Figure5JanelaInspector
2CriaoeManipulaodeGameObjects
Muitosmotoresdejogosdegeraoanteriordisponveisnomercadosobaseadosnousodeespecializao/heranaparaasclassesqueirorepresentarobjetosdejogo.Nestaarquitetura,oselementosdeumjogoherdamdeumaclassebsica(normalmentealgocomoGameObject)
e as novas funcionalidades so acrescentadas. Assim como em
outras categorias
dedesenvolvimentodesoftwareorientadoaobjetos,ousodemasiadodeherananessetipodesituaotornouseobsoleto,principalmenteporsuapoucaflexibilidadequandoosobjetosde
jogopossuemmltiploscomportamentos,oqueexigiriaheranamltipla.
A Unity3D baseada em ummodelomaismoderno para a arquitetura de
objetos de
jogobaseadoemcomposio[Bilas2002,Stoy2006,Passosetal.2008].Nessemodelo,umobjetodejogoespecificadoatravsdacomposiodevriasfuncionalidades,quesoagregadas(ou
removidas). Cada funcionalidade implementadapor um componente
(classequeherdadeumcomponentebsico).EssecontainergenricoaindadenominadoGameObjectefuncionacomoumrepositriodefuncionalidades,oumaisespecificamente,componentes.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
8
-
Oscomponentessoentoresponsveispor
implementarosdiversoscomportamentos que
umGame Object pode ter. Um componente pode ser desde um script,
uma geometria
decoliso,ouatumatexturadeGUI.Ouseja,GameObjectspodemrepresentarqualquercoisanocenrio,sendocaracterizadoscomoumasimplescmeraouumpersonagemapenaspelos
diferentes componentes que agrega. Conforme observado no manual
de usurio da
Unity(traduolivre):GameObjectumapanelavaziaeoscomponentessoosingredientesqueirocriarsuareceitadejogabilidade.
Abaixo apresentamos a estrutura de umGame Object padro que
representa uma cmera
virtual. Nessa figura, a cmera umGameObject, porm, s definida
como cmera poispossui um componente com essa funcionalidade. Alm
disso, possui os
componentesauxiliaresGUILayer,FlareLayereAudioListener.
Figure6ComposiodeumGameObject(Camera)
UmaobservaoimportantesobreosGameObjectsquetodoselesjpossuempelomenosocomponenteTransform,responsvelpeloseuposicionamento,orientaoeescalanosistema
referencialdacena.Almdisso,essecomponenteresponsvelpeladefiniodahierarquiadetransformaes,permitindooefeitodetransformaorelativadeacordocomaestruturadeascendncia/descendnciadecadaGameObject.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
9
-
Figure7Estruturamnimadeumobjeto
Na Unity tambm temos o conceito de Prefab. Um Prefab
simplesmente ummodelo de
composiodeGameObject
jdefinido,oumaisprecisamente,umtemplatequedefineumelemento atravs
da composio dos vrios componentes. Podemos citar, por exemplo,
adefiniodeumhumanidequenecessitadeumscriptdemovimentaoeumcomponente
decoliso.Nessecaso,poderamoscriarumPrefabdessehumanideecriarvriascpiasdomesmo,
inclusivecomparmetrosdiferentes.Dessaforma,temosumganhoconsidervelde
tempopois issoevitariaque tivssemosque recriar essa composiopara
cada
instanciadehumanidepresentenocenrio.Prefabsseromaisdetalhadosnaseosobrescripting.
ImportaodeAssets
Geralmente,grandepartedodesenvolvimentodeumjogoestrelacionadocomautilizaoemanuseiodeAssetstaiscomotexturas,modelos3D,efeitosdesomescripts.Essesdiferentes
tiposdeartefatos sodesenvolvidosem
ferramentasexternas,especializadosna
construodecadaumdostiposdeAssets.Apssuacriaoouedio,Assetsprecisam,dealgumaforma,seremimportadosparadentrodeeditordecenasdomotordejogos.
AUnitypossuiumaformamuitosimpleserobustadeimportaodeAssetsparadentrodeum
projeto, bastando que os mesmos sejam arrastados para dentro de
uma pasta da
janelaProject.Aoefetuaresteprocedimento,aimportaofeitaautomaticamenteparaoprojeto,sem
nenhuma interveno do usurio, ficando imediatamente disponvel para
ser utilizada
dentrodaaplicao.AUnityaceitaformatosdedistribuiopopularesparamodelos3D(.FBX),udio(wav,mp3,etc)etexturas(jpg,png,bmpoumesmo.PSDdiretamente).
AlmdessasimplicidadedeimportaodosAssets,aUnitytambmofereceapossibilidadedavisualizao
em tempo real de qualquer alterao feita nos mesmos. Com isso, temse
um
ganho de produtividade, pois no precisase importar manualmente
novas verses paradentro da Unity a cada vez que desejarmos efetuar
uma alterao. A Unity verifica
cadaarquivomodificadoeautomaticamenteatualizaomesmonacena.
3MateriaiseShaders
Jogos3Dnormalmentepossuemumgrandeapelovisual,ondeacriatividadeecapacidadedos
artistas realiza um papel fundamental para o sucesso.
Atualmente, os dispositivos grficospermitemo uso de solues
sofisticadas para a exibio em tempo real dasmalhas 3D
doselementosdeumacena.Emespecial,fazseonipresenteousodeShadersprogramveis.
OmotordejogosUnity3DpermitetantoacriaodeShadersemlinguagensdeprogramao
comoCg ouGLSL, quanto o uso de funo fixa, almde incluir uma
verstil coleo desses
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
10
-
Shadersnainstalaopadro.OvinculoentreumShadereumamalha3Dsefazatravsdeum
Material, que funciona
comoumcontainerparaaspropriedadesvisuaisque
cadaobjetodacenapossui.AfiguraaseguirmostracomoaatribuiodessaspropriedadespodeserfeitanajanelaInspectordentrodoeditordecenas.
Figure8ManipulaodeumMaterial
AespecificaodeumShaderdefinequaissoaspropriedadesqueestenecessitapararealizar
a exibio do objeto, enquanto o Material define os valores para
essas propriedades.
Aprximafiguramostraumarepresentaoesquemticadessarelao.DoisShaderssousados:uma
para o corpo do carro e um para as rodas. Para o corpo do carro,
dois materiais so
criados utilizandose do mesmo Shader. Em um deles, o valor da
propriedade Color FX,especificadapeloShader, atribuda coma cor
vermelha, enquantonooutrousadaa
corazul.Dessaforma,podeseaplicaressesdiferentesmateriaisaobjetosnacena,comoilustrado
nafigura.
Figure9Relanaoentreshaders,materiaiseobjetos
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
11
-
Deformamaisespecfica,umShaderdefine:
* O mtodo de renderizao de um objeto. Isso inclui o uso de
diversas variaes,
dependendododispositivogrficodousurio;
*TodososVertexePixelShadersusadosnessarenderizao;
*Aspropriedadesqueseroatribuveisnasespecificaesdemateriais;
*Parmetrosnumricosoudecorquetambmseroatribuveisnosmateriais;
UmMaterialdefine:
*Quaistexturasusarparaarenderizao;
*Quaiscoresusar;
*OsvaloresdequaisqueroutrosAssetstaiscomoCubmaps,limiaresdeluminncia,etc.
ParasecriarumnovoMaterial,usaseAssets>Create>Materialnomenuprincipal.UmavezcriadooMaterial,podeseaplicloaumobjetoeexperimentarsealterarosvaloresdesuaspropriedades.
Para aplicar umMaterial a um objeto, basta de arrastar o mesmo da
janela
ProjectparaqualquerobjetonacenaounajanelaHierarchy.
ParaaespecificaodeShaders,tantodefunofixaquantoprogramveis,aUnity3Dpossuiuma
linguagem prpria chamada ShaderLab, que possui alguma semelhana com
osarquivos.FXdefinidosparaoMicrosoftDirectXouaespecificaoNVidiaCgFX.Essalinguagem
declarativapossuiumasintaxesimplese
incluicapacidadespoderosascomoreuso,mltiplospassos, criao
procedural de texturas, entre outras.Nas prximas sees ser
apresentadaumabreveintroduoaessalinguagem.
3.1IntroduoaShaderLab
ParasecriarumnovoShader,podeseescolherAssets>Create>Shaderdomenuprincipal,ou
duplicarumexistenteetrabalharapartirdomesmo.ShadersnaUnity3DsoarquivosdetextoepodemsereditadosfazendoseumduplocliquenosmesmosnajanelaProject.IniciaremosaexplicaocomumShaderbastantesimples:
Shader "Tutorial/Basic" { Properties { _Color ("Main Color",
Color) = (1.0,0.5,0.5,1.0) } SubShader { Pass { Material { Diffuse
[_Color] } Lighting On } } }
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
12
-
EsseShader simplesdemonstraumadas
formasmaissimplesdeserenderizarumobjetoda
cena. definida apenas uma propriedade de cor (_Color), cujo
valor padro
especificadoatravsdeseuscomponentesRGBA.Pararenderizao,existeumanicaopodeSubShadercomumpassoapenas,queatribuiocomponentedifusonapipelinedefunofixacomovalor
especificadoparaapropriedade_Coloreligandoaopodeiluminaoporvrtices.
OShaderaseguirdefineumarenderizaomaiscompleta,masaindabaseadaemiluminaoporvrtices:
Shader "VertexLit" { Properties { _Color ("Main Color", Color) =
(1,1,1,0.5) _SpecColor ("Spec Color", Color) = (1,1,1,1) _Emission
("Emmisive Color", Color) = (0,0,0,0) _Shininess ("Shininess",
Range (0.01, 1)) = 0.7 _MainTex ("Base (RGB)", 2D) = "white" { } }
SubShader { Pass { Material { Diffuse [_Color] Ambient [_Color]
Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] }
Lighting On SeparateSpecular On SetTexture [_MainTex] {
constantColor [_Color] Combine texture * primary DOUBLE, texture *
constant } } } }
Todo Shader deve iniciar com a palavra reservada Shader seguido
de uma string que
representaseunome.EsteseronomeexibidonajanelaInspector.TodoocdigodoShaderficardefinidodentrodeumblocodelimitadopor{}.
*interessantequeonomesejacurtoedescritivo,nosendonecessriocorrespondercomonomedoarquivo.shader;
* Para utilizarse submenus, basta que se use o caractere /, por
exemplo: um nome
"MeusShaders/Teste"iriaserorganizadoemumsubmenunoInspectordeumMaterialcomoMeusShaders>Teste.UmShadersemprecompostodeumblocodepropriedadesseguidoporumoumaisblocosdeSubShaders,queseroexplicadosaseguir.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
13
-
3.1.1Propriedades
As propriedades definidas no bloco inicial de um Shader sero
aquelas que podem ser
atribudas atravs da janela Inspector para os materiais. O
exemplo anterior apareceria daseguinteformanoeditordecena:
Figure10PropriedadesdeumShader(UNITYTECHNOLOGIES2009A)
A estrutura de uma declarao de uma propriedade mostrada na
figura que segue. Oprimeiro termo designa o nome interno (referncia
varivel), enquanto os valores entre
parnteses especificam a descrio (para a janela Inspector) e o
tipo, respectivamente. Oultimo termoespecifica o valor padropara a
propriedade. Encorajamoso leitor a buscar areferncia completa sobre
tipos de propriedades possveis no manual de usurio da
ferramenta.
Figure11Declaraodeumapropriedade(UNITYTECHNOLOGIES2009A)
3.1.2SubShaders
Dispositivosgrficosdiferentespossuemcapacidadesdiferentes.Porexemplo,amaioriadas
placasgrficasatuaisdosuporteaPixelShaders,masmuitasplacasembarcadasemplacasme
baratas no. Algumas suportam 4 texturas em um nico passo, enquanto
outrassuportamapenas2,eassimpordiante.Parapermitirofuncionamentodojogoparaqualquer
que seja o dispositivo do usurio, um Shader pode conter mltiplos
SubShaders. Pararenderizar um objeto, a Unity3D passa por todos os
SubShaders e usa o primeiro que
sejacompletamentesuportadopelohardwareemuso.Ocdigoaseguirilustraaestruturabsica
deumShaderdessetipo:
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
14
-
Shader "Structure Example" { Properties { /* ...shader
properties... } SubShader { // ...subshader com Vertex e
Pixel/fragment shaders... } SubShader { // ...subshader que usa 4
texturas por passo... } SubShader { // ...subshader que usa 2
texturas por passo... } SubShader { // ...subshader "feio" mas que
roda em qualquer hardware... :) } }
Cada SubShader composto por uma coleo de passos. Para cada
passo, a geometria doobjeto renderizada,
portantoaomenosumpassonecessrio.OexemploVertxLit
possuiapenasumpasso:
//... Pass { Material { Diffuse [_Color] Ambient [_Color]
Shininess [_Shininess] Specular [_SpecColor] Emission [_Emission] }
Lighting On SeparateSpecular On SetTexture [_MainTex] {
constantColor [_Color] Combine texture * primary DOUBLE, texture *
constant } } // ...
Todososcomandosemumpassoconfiguramohardwaregrficopararenderizarageometriade
algumamaneira especfica.No exemplo acima, o blocoMaterial vincula
as propriedades
definidaspeloShadercomosparmetrosdematerialdosistemadeiluminaoemfunofixa.O
comando Lighting On liga a funcionalidade de iluminao por vrtices,
enquantoSeparateSpecular On define o uso de uma cor separada para o
parmetro de reflectncia
especular.
Todos esses comandos so mapeados diretamente ao modelo de
pipeline de funo fixaOpenGL/Direct3D dos dispositivos grficos.O
comando SetTexture bastante importante,
eespecificaaformacomoaspropriedadesmapeadasparatexturassoaplicadasemconjunto
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
15
-
comomodelode
iluminaodapipeline.Essecomandoseguidoporumblococontendoa
frmula que define a equao de combinao das texturas para cada
pixel/fragmentorenderizado.Noexemploemquesto:
Combine texture * primary DOUBLE, texture * constant
Nessecomando,otermotexturereferentecorobtidapelomapeamentodatextura(nessecaso_MainTex).Estacormultiplicada(*)pelacorprimria(primary)dovrtice,computada
pelaequaodeiluminaodapipelinefixaeposteriormenteinterpoladaparacadapixel.Estevalorduplicado(DOUBLE)paraintensificara
iluminao.Ovalordetransparncia(alpha)opcionalmente especificado aps
a vrgula, onde computado pela multiplicao do valor
alpha da textura com a cor constante definida para a pipeline
(constantColor). Diferentesmodos de combinao de textura podem ser
especificados para a obteno dos resultadosdesejados.
3.2ShaderlabProgramvel
AUnitypermiteaodesenvolvedorousodeShadersprogramadosnalinguagemCgdaNVidia
ou em assembly. Tambm possvel a criao de Shaders com GLSL caso o
jogo
sejadisponibilizadoapenasparaMacOSX,umavezqueomduloderenderizaoparaWindowsusaDirectX,quenosuportatallinguagem.
Os Shaders programveis so includos diretamente em uma
especificao ShaderLab,
substituindo o papel de um passo de renderizao em um SubShader.
Essa integrao bastante interessante por dois motivos: simplifica a
passagem de parmetros de
materiaisparaessesShaders;permiteautilizaomistade funo fixa
comShaders programveisem
um mesmo objeto (com o uso de mltiplo passos de renderizao). O
cdigo a
seguirexemplificacomoumpassoderenderizaopodeserespecificadoatravsdeumcdigoemCg.
Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag //
Cdigo para Vertex e Pixel Shaders (funes vert e frag) ENDCG }
Oexemploaseguir,umaespecificaoShaderLabcompleta,usaainformaodanormaldosvrticesparacomporacorexibida.Omarcador#pragmavertexvertindicaafunoqueserexecutadacomooVertexShaderparaosobjetosqueusamdesseShaderpararenderizao.
Deformasimilar,podesedefiniroPixelShader.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
16
-
Shader "Debug/Normals" { SubShader { Pass { Fog { Mode Off }
CGPROGRAM #pragma vertex vert // parmetros de entrada para o Vertex
Shader struct appdata { float4 vertex; float3 normal; }; struct v2f
{ float4 pos : POSITION; float4 color : COLOR; }; v2f vert (appdata
v) { v2f o; o.pos = mul( glstate.matrix.mvp, v.vertex );
o.color.xyz = v.normal * 0.5 + 0.5; o.color.w = 1.0; return o; }
ENDCG } } }
Observase que nesse exemplo, no foi especificada uma funo para o
Pixel Shader, que
nessecasoserumaversopadroqueusainterpolaoparaexibirascorescomputadasporesseVextexShader.Afiguraaseguirmostraoresultadodessecdigoaplicadoaumobjeto.
Figure12Shaderqueexibenormais
Damesma formaqueosShaderde funo fixa,possvel
sepassarparmetrosdematerialquesoespecificadosnoeditordecena,usartexturas,mltiploscanaisdemapeamentoUV,
ouqualqueroutraopoquesejainteressanteparaseatingirosresultadosdesejados.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
17
-
4SistemadeFsica
A Unity3D utiliza internamente o popular motor de fsica PhysX da
NVidia para efetuar a
simulao fsicade corpos rgidoseo tratamentode colises.APhysX
ummotorde fsicautilizado em vrios jogos populares tais comoMass
Effect,Medal of Honor: Airbone,
entreoutros,sendoconsideradoumdosmaiscompletosdomercado,inclusivecomapossibilidade
deserexecutadoemGPUs,oquepodeacarretaremmaiordesempenho.Comessaintegrao,odesenvolvedortemacessosimplificadoaumsistemadesimulaofsicasofisticado.VriasdasfuncionalidadesoferecidaspelaPhysXsomanipuladasgraficamenteatravsdainterface
daUnity,permitindoquesimulaesfsicascomplexassejamdesenvolvidasempoucotempo,aumentandoaprodutividadedodesenvolvedor.
Colliders
Geometrias bsicas de coliso tais como esfera, cubo, cpsula, ou
precisas como umMeshCollider, so implementados como componentes
para objetos de jogo na Unity. Esses
componentes podem ser anexados a um objeto da cena, que passar a
fazer parte
dasimulaofsica.Osparmetrosdecadageometriadecolisoestodisponveisparaalteraopeloeditordecena.
Dessaforma,podesetratarasimulaofsicadevriosobjetosatravsdautilizaodeumageometria
envolvente ou, caso necessrio, at mesmo da geometria real do
objeto,geralmente sendo utilizado em cenrios estticos, que
necessitam de fidelidade de
representao. Alm disso, devido ao fato do cenrio ser esttico,
vrias otimizaes
soefetuadasafimdegarantirumbomdesempenhodasimulao.
Alm de sua funo principal na simulao fsica, estes componentes
tambm podem serutilizados como triggers, ou seja, elementos que
ativam o processamento de um trecho de
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
18
-
cdigo caso ocorra uma coliso com estes. Componentes definidos
como triggers no so
simuladoscomocomponentesdefsicanormaisduranteasimulao.
CharacterController
Adicionalmenteaoquejfoiapresentado,aUnitytambmofereceacessoaumtipoespecialde
objeto disponvel na PhysX: o Character Controller. Geralmente, o
controle preciso deobjetos que sofrem ao da fsica bastante
complicado de ser efetuado durante uma
simulao. Um exemplo desse tipo de preciso seria o controle de um
personagem. Comosabemos, esse tipo de simulao fsica bastante
complexo, pois alm do tratamento
dasforas,devesetratartambmoasrotaesindesejadas.
Uma soluo seria simplesmente ignorar a geometria de coliso do
personagem, porm
adotando essa soluo no teramos a interao do mesmo com os objetos
do
cenrio.UtilizandoocomponenteCharacterController,temseapossibilidadedecontrolaressetipodeobjetofacilmente,evitandotodasasoperaesindesejadasditasanteriormente,mantendoa
interao com os objetos do cenrio. Abaixo temse um exemplo da
configurao desseobjetoemumpersonagem.
Figure13Componenteparapersonagens
Ragdolls
AlmdoCharacterController, temse tambmapossibilidadedesimular
ragdolls comouso
do componente Character Joint. Este componente permite que
simulaes de personagensinanimados (mortos?) sejam realizadas mais
fielmente, tal como um boneco de pano.Utilizando umWizard, podese
especificar onde encontramse os pivs de rotao, almde
vriosoutrosparmetrosresponsveispelasimulaodessetipodeobjeto.Abaixotemosumaimagemdaconfiguraodessetipodesimulao.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
19
-
Figure14Sistemaderagdoll
WheelColliders
Um outro recurso bastante til oferecido pela PhysX atravs da
Unity um
componenteespecialparasimulaodeveculoschamadoWheelCollider.Comestecomponente,podesesimular
fora de trao, frico, entre outras caractersticas que ocorrem
normalmente em
rodasdeveculos.Nestecaso,omovimentodocarroefetuadoatravsdaaplicaodeforasnessescomponentes.Autilizaodestecomponentepermitesimulardesdeforasdefricoatocomportamentodeamortecedores,conformepodeserobservadoabaixo.
Figure15WheelColliders
Utilizando a hierarquia entreGameObjects daUnity, omovimento de
um veculo pode ser
simuladofacilmenteatravsdaconfiguraohierrquicadestescomponentescorretamente.
Joints
Umafuncionalidademuito
importantedisponvelnaUnityapossibilidadedousodeJoints,oujunes,devriostiposparaasimulaodeobjetosconectadosaoutroscomrestriesemseugraudeliberdade.OsseguintesJointsestodisponveisnaPhysXatravsdaUnity:
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
20
-
HingeJoint:permiteaconexodedoisobjetosatravsdasimulaodeumadobradia.Ideal
paraasimulaodeportas,pnduloseoutrosobjetosquenecessitemdestetipodeconexo.
Figure16HingeJoint
Spring
Joint:permiteaconexodedoisabjetosatravsdasimulaodeumamola.Objetosconectados
utilizando esse tipo de joint possuem uma distnciamxima de separao
que,apssoltos,tendemavoltarasuadistnciaderepouso.
Figure17SpringJoint
FixedJoint:permiteaconexoentredoisobjetosdeformaqueosmovimentosdeumobjetosejamdependentesdooutro.SimilarautilizaodashierarquiasdetransformaodaUnity,
porm,implementadoatravsdafsica.Idealparaobjetosquepossamserdesconectadosumdooutroduranteasimulao.
Figure18FixedJoint
Configurable Joint: esse tipo de joint oferece a possibilidade
de customizao de seu
comportamento. Aqui, vrios tipos de configurao podem ser
efetuadas como restrio demovimento e/ou rotao e acelerao
demovimento e rotao. Dessa forma, temos
comoconstruirumjointdeacordocomanecessidaderequerida.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
21
-
Por fim, a PhysX nos permite efetuar simulaes de superfcies de
contatos atravs dos
materiais fsicos. Com isso, temos a possibilidade de alterar a
forma como os objetosinteragem atravs do ajuste das propriedades
dosmateriais que estes objetos utilizam
taiscomofricoeoefeitodainteraoentreacolisodedoisobjetos.
5Scripting
OsistemadescriptingdaUnity3Dabrangenteeflexvel,oquepermiteodesenvolvimento
de jogos completos sem a necessidade do uso de C/C++.
Internamente, os scripts soexecutados atravs de uma versomodificada
da bibliotecaMono, uma implementao decdigo aberto para o sistema
.Net. Essa biblioteca, permite que os scripts sejam
implementadosemqualquerumadetrslinguagens,escolhadoprogramador:javascript,C#ouBoo(umdialetodePython).Noexistepenalidadeporseescolherumalinguagemououtra,sendo
inclusive possvel se usar mais de uma delas em um mesmo jogo. A
documentao
oficial,entretanto,utilizaJavascriptparaamaioriadosexemplos.
De forma consistente arquitetura desenvolvida, scripts na
Unity3D so acoplados comocomponentes de game objects. Dessa forma,
importante projetar os scripts de
maneiramodular,ganhandocomissoaflexibilidadedoreuso.Nessaseo,iremosdescreveralgumas
caractersticasimportantesdosistemadescriptingdaUnity3D.
5.1Criaodescripts
Paracriarumscript,bastaescolheraopoAssets>Create>Javascriptnomenuprincipal.Tambm
possvel se criar scripts usandoo boto direito domouse sobre a
janelaproject.Existeaopodesecriaroscriptemqualquerumadastrslinguagensdisponveis.
Figure19Criaodeumscript(UNITYTECHNOLOGIES2009A)
possvelseeditaroscriptclicandoduasvezessobreomesmonajanelaProject.Issoirabriroeditorpadro(UniScitenoWindowsouUnitronnoMacOSX).Aediodescriptssempre
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
22
-
feita emumprograma externo e no diretamente pelaUnity3D, que
pode ser alterado nas
prefernciasdeusurio.EsseocontedodeumJavascriptrecemcriadonaUnity3D:
function Update () { }
Um script novo no realiza tarefa alguma ainda, ento podese
adicionar funcionalidade
aomesmo.Ocdigoaseguirservecomoumexemplobsico:
function Update () { print("Hello World"); }
Aoserexecutado,essecdigoirexibiraexpresso"HelloWorld"noconsole.Masaindanoexistenadaquecausaaexecuodessecdigo.necessrioseacoplaressescriptaumGameObjectativonacenaparaqueissoocorra.Issopodeserfeitosearrastandooarquivodoscript
paraoobjeto escolhido tantona janelaHierarchy, quantodiretamente
aomesmona janelaScene. Tambmpodese selecionar o objeto escolhido e
adicionar o script atravs
domenuprincipal,comomostraafiguraaseguir.
Figure20Adiodeumscriptaumobjetoselecionado(UNITYTECHNOLOGIES2009A)
Ao se selecionar o objeto ao qual o script recmcriado foi
adicionado, ser possvel
sevisualizaromesmo,indicandosuacorretavinculao.
Figure21Scriptvinculadoaobjeto(UNITYTECHNOLOGIES2009A)
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
23
-
Afunoprint()bastantetilquandoseestdepurandoumscript,masnofaznadadetil
emtermosde jogabilidade.Ocdigoa seguiradicionaalguma
funcionalidadeaoobjetoquecontmoscript:
function Update () { transform.Rotate(0, 5*Time.deltaTime, 0);
}
Para quem novo em linguagens de script para jogos, o cdigo pode
parecer um pouco
confuso.Algunsconceitosimportantesquedevemseraprendidos:
1.functionUpdate(){}asobrescritadomtodoUpdate,queserexecutadopelaUnity3Dumavezacadaframe;
2.transformumarefernciaaocomponenteTransformdoGameObjectemquesto.
3.Rotate()ummtodoexistentenocomponenteTransform;
4.Osparmetrosdessemtodorepresentamosgrausderotaosobrecadaumdoseixos
emumespao3D:X,Y,andZ.
5. Time.deltaTime um atributo da classe Time que representa o
tempo que passou
(emsegundos)desdequeoltimoUpdateocorreu.Essavarivelserveparagarantirqueoobjetoem
questo seja rotacionado na mesma velocidade, independente da
capacidade de
processamento do computador no qual o cdigo ser executado. Dessa
forma, 5 *Time.deltaTimerepresenta5grausporsegundo.
J existem referncias como essa para alguns componentes que so
comuns de seremutilizadosemobjetos.Algunsdosmaisimportantesso:
transformrepresentaoposicionamento,orientaoeescaladoobjeto;
rigidbodyrepresentaocorporgidoparaosubsistemadefsica(quandoexistir);
animation utilizadoparaacionaros ciclosdeanimaodeummodelo
criadoemuma
ferramentadeanimaocomoo3DStudioMax;
renderercomponenteencarregadodaexibiodeumobjetonacena;
audiofontedeefeitodeudio,vinculadaaumobjetopara
incorporarposicionamento
deudio3D;
collidergeometriadecolisoparaosubsistemadefsicaouparautilizaocomoTrigger.
5.2Acessoaoutroscomponentesetrocademensagens
Entretanto, muitos outros componentes prexistentes, assim como
Scripts criadosespecificamente para cada jogo, no tm referncias
especiais includas. Para esses, necessria algumamaneira de se obter
uma referncia em tempode execuo. Isso feito
atravsdomtodoGetComponent()existenteemqualquerscript.Essemtodopodeserusadopara
se obter a referncia a qualquer componente vinculado ao objeto no
qual o script
emquestoestacoplado(ouaqualquerobjetoquesetenhaumarefernciaemumavarivel).O
exemploaseguirmostracomoobterarefernciaaumscriptchamado"Controlador":
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
24
-
var c : Controlador = GetComponent(Controlador);
c.MeuMetodo();
Nesse exemplo, a varivel "c" foi usada para se guardar a
referencia a instncia do script
Controlador vinculado aomesmo objeto de jogo em questo. Em
seguida, foi executado omtodo"MeuMtodo"nessamesmainstncia.
sempre prefervel, por questes de desempenho, guardar referncias
aos componentes
comoexemplificadoacima. Entretanto, existem situaesondepode
serdesejvel seenviaruma determinada mensagem a todos os componentes
de um determinado objeto. Isso possvel atravs do mtodo SendMessage
da classeGameObject. Todo script tem acesso
instncia deGameObject ao qual est vinculado. O seguinte exemplo
tenta executar
(casoexista)omtodo"Teste"emtodososcomponentesdoobjetoaoqualessescriptforvinculado:
gameObject.SendMessage("Teste");
UmexemplocomumparaousodeSendMessageaaplicaode"dano"aumpersonagemque
foi atingido por uma bala, bomba, ou qualquer outro objeto do jogo
que possa causar
algum efeito desse tipo. A soluo pode ser criar esse projtil
como um objeto comcomponentes de fsica (collider e rigidbody), e
incluir um script simples que envia
umamensagemassimqueesseprojtilatingiralgonacena:
function OnCollisionEnter(collision : Collision) {
collision.gameObject.SendMessage("AplicarDano");
Destroy(this.gameObject); }
Ocdigoacima serexecutadoassimqueoprojtil (objeto contendo
representao fsicaeesse script) colidir com outro objeto com fsica
na cena. Amensagem enviada ir causar a
execuodomtodo"AplicarDano"emtodososscriptsdoobjetoatingido,casoessemtodoexista.Alinhaseguinteremoveoprojtildacena.
5.3Acessoavariveis
Osscriptsderotaoapresentadosatagoragiramoobjeto5grausacadasegundo.Talvezseja
interessante rotacionar aumavelocidadeangular diferentedessa.Umaopo
alterar
esse valor no cdigo e salvlo, mas exige uma recompilao desse,
aomesmo tempo
queimpedequeusemosomesmoscriptcomdiferentesvelocidades.Existeumaformabemmaisrpida
para isso, que inclusive permite a alterao de parmetros como esse
em tempo de
execuonoeditordecena,ebastantesimplesdeserimplementada.
Em vez de digitar o valor 5 diretamente, podese criar um
atributo speed, do tipo float,
noscripteusaressenachamadaaomtodoRotate().Oexemploaseguirmostracomoissopodeserfeito:
var speed = 5.0; function Update () { transform.Rotate(0,
speed*Time.deltaTime, 0); }
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
25
-
Agoraobserveoobjeto contendoo script na janela Inspector.
Podesenotarqueo valordo
atributoaparecenoeditordecena,comomostraafiguraaseguir.
Figure22Alteraodovalordeumatributo(UNITYTECHNOLOGIES2009A)
EstevalorpodeagorasermodificadodiretamentepelajanelaInspector,damesmaformaque
podeserenomearumarquivo.Selecionandoseamesma,podesealterarseuvalor.Tambmpodesedeslizaros
valores
comomouseusandoobotodireito.Podesealterarovalordeatributoscomoesseaqualquermomento,inclusiveenquantoojogoestsendoexecutado.
Ao apertar o boto Play e modificarse o valor desse atributo, a
velocidade de rotao do
objeto ir ser alterada instantaneamente.Ao se
sairdomododeexecuo,o valor voltaaoanterior. Dessa forma, podese
experimentar a vontade e ao final decidir manter o
valoranterioroualterlodeformapermanente(semobotoPlaypressionado).
Essa formadealteraode valoresematributos tambm implicaquepossvel
seusarum
mesmo script em diversos objetos, cada um com um valor especfico
para omesmo.
Cadaalteraofeitairafetaravelocidadeapenasdoobjetonoqualamudanafoirealizada.
5.4PrefabseInstanciao
A criao de game objects atravs de composio bastante flexvel, mas
em
algunsmomentospodeserbastantetrabalhosorecriarcertasdessascomposiesqueprecisamser
usadasemdiversascenasdeummesmojogo,compartilhadascomoutrosdesenvolvedoresoumesmoinstanciadasinterativamenteduranteaexecuodojogo.
Um Prefab um tipo de asset um Game Object reusvel armazenado na
janela Project.Prefabs podem ser inseridos em diversas
cenas,mltiplas vezes em cada uma delas. Ao se
adicionar um Prefab a uma cena, est sendo criada uma instncia do
mesmo. Todas essasinstncias esto ligadas ao Prefab original e so no
fundo clones desse. Independente
dequantasinstnciasexistamnoprojeto,qualquermudanafeitaaoPrefaboriginalseraplicada
atodasessascpiasexistentesnascenas.
ParasecriarumPrefab,precisocriarumcontainervazioparaomesmousandoomenu.EssePrefabvazionocontmumGameObjectainda,eportantonopodeserinstanciadonacena
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
26
-
ainda.ApsserrecheadocomdadosdeumGameObject,issopodeserfeito.Afiguraaseguir
mostraumPrefab recmcriado,aindasemcontedo
(indicadopelaausnciadecoremseunomenajanelaProject).
Figure23CriaodeumPrefab(UNITYTECHNOLOGIES2009A)
Parapreencherumprefab,deveserusadoalgumobjetoexistentenacenaatual.Oseguinteroteiroexplicacomoesseprocessopodeserrealizado:
1.EscolhaAssets>Create>Prefabnomenuprincipaledumnomeaomesmo;
2.NajanelaHierarchy,selecioneoGameObjectquesedesejaguardarcomoumPrefab;
3.ArrasteesolteesseobjetodajanelaHierarchysobreonovoPrefabnajanelaProject.
Aps realizados esses passos, o objeto, todos os seus "filhos",
componentes e valores deatributos foram copiados noPrefab. Agora
possvel se criar diversas instncias domesmo
arrantandoseparacenaapartirdajanelaHierarchy.OprprioobjetousadoparaacriaodoPrefabfoitransformadoemumainstnciadomesmo.
Todas as instnciasdeumPrefab possuemamesmaestruturae,
originalmente, osmesmosvalores para os atributos de seus
componentes. Entretanto, possvel alterar diversas
instncias, ainda vinculadas aoPrefab original, os valores de
alguns atributos. As
alteraesfeitasaoPrefabaindaseropropagadasparaessas
instncias,apenasosatributosmarcadoscomoespecficos tero seus
valoresmantidos. A seguinte figuramostra esse procedimento,
que consiste em se marcar a caixa que fica a esquerda do nome do
atributo, na janelaHierarchy
(noexemploemquesto,oatributodenomeRepeatTriggernoseralteradodeacordocomasmodificaesnoPrefab).
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
27
-
Figure24AtributodesvinculadodoPrefab(UNITYTECHNOLOGIES2009A)
Emdiversassituaespodesernecessriose
instanciarobjetosemtempodeexecuo.Um
exemploque ilustraessecenriopodeseracriaode foguetesqueso
lanadosquandoojogadorpressionaumateclaouboto.Prefabssoumaferramentatilnessassituaes,poisacriaodecpiasdosmesmosatravsdescriptsbastantesimples,comoexplicadoaseguir.
AprimeiratarefaacriaodeumPrefabcontendooscomponentesevalorescalibradospara
osatributosdesejadosparaoreferidofoguete.Noiremosentraremdetalhessobreacriaodafuncionalidadedofogueteemsi,esimcomoprocessodeinstanciaodomesmo.ParaseterarefernciaaumPrefabatravsdeumscript,bastaquesecrieumatributocujotiposeja
umdoscomponentesexistentesnessePrefab.Nonossoexemplo,ofogueteserguiadopelosistema
de simulao fsica, e conseqentemente um dos componentes do mesmo
um
Rigidbody,dessaformaoscriptdeinstanciaodeveincluiraseguintelinha:
var rocket : Rigidbody;
IssoirpermitiraodesenvolvedorarrastaroPrefabdofoguetediretamentedajanelaProject
paraajanelaHierarchydeformaaestabelecerareferncianecessria.Ocdigoaseguircriauma
instncia do foguete em tempo de execuo, ao mesmo tempo que adiciona
umavelocidadeinicialaomesmo,referenteorientaodoobjetoqueocriou:
var r : Rigidbody = Instantiate(rocket, transform.position,
transform.rotation); rocket.velocity = transform.forward *
speed;
importanteobservarqueocdigoacimaindependedaestruturautilizadaparaoPrefabquerepresentao
foguete,desdequeomesmo incluaumcomponenteRigidbody.
Issopermitea
criaodeprottipossimplesefuncionaisbemantesdaexistnciadeAssetsdefinitivoscomomodelos3Dousistemasdepartculas.Osscriptscriadosinicialmenteaindaseropossveisdese
usar mesmo com a evoluo desse Prefab para uma verso mais bem
acabada para a
representaodessefoguete.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
28
-
6Concluso
EssetutorialapresentouumintroduosucintasobreomotordejogosUnity3D.Oobjetivofoi
expor de maneira simplificada as principais funcionalidades
dessa verstil ferramenta dedesenvolvimento de jogos. Esperase que o
leitor interessado busque um
maioraprofundamentonesseassuntoatravsdabibliografiasugeridanofinaldessetutorial.
Osautoresgostariamdeagradecerspessoasquediretaouindiretamentecontriburampara
a confeco desse material. Em especial gostaramos de agradecer s
nossas famlias, pelapacincia e apoio incondicional, e tambm
excelente comunidade de desenvolvedores
ecolaboradoresUnitypelasexcelentesinformaesetutoriaisdisponibilizados.
Finalmente,osautoresgostariamdeagradecerosleitoresdessetutorialeinformarqueatoda
aequipedoUFFMediaLabsecolocadisposioparacontatoatravsdosemailsinformadosnacapa.
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
29
-
Bibliografia
BILAS,S.2002.Adatadrivengameobjectsystem.TalkattheGameDevelopersConference02.
PASSOS, E. B., SILVA, J., NASCIMENTO, G. T., KOZOVITS, L. CLUA,
E. W. G. 2008. Fast and safe
prototypingofgameobjectswithdependencyinjection.AnaisdoSimpsioBrasileirodeGameseEntretenimentoDigital.SoLeopoldo,RS.2008
STOY,C.2006.Gameobjectcomponentsystem.
InGameProgrammingGems6,CharlesRiverMedia,M.Dickheiser,Ed.,Pginas393a403.
UNITY TECHNOLOGIES. 2009 (A). Unity 3D User Manual [online].
Disponvel em:
www.unity3d.com/support/documentation/Manual[Acessadoem20agostode2009].
UNITY TECHNOLOGIES. 2009 (B). Unity 3D Community Forum [online].
Disponvel em:forum.unity3d.com/[Acessadoem25agostode2009].
UNITY TECHNOLOGIES. 2009 (C). Unity 3D Online Tutorials
[online]. Disponvel
em:www.unity3d.com/support/documentation/tutorials[Acessadoem30agostode2009].
UNIFY COMMUNITY. 2009. Unity 3D Community Wiki [online].
Disponvel em:
www.unifycommunity.com/wiki[Acessadoem28agostode2009].
VIII Brazilian Symposium on Games and Digital Entertainment Rio
de Janeiro, RJ Brazil, October, 8th-10th 2009
30