Escolar Documentos
Profissional Documentos
Cultura Documentos
Tutorialcomputing2 PDF
Tutorialcomputing2 PDF
Tutorialcomputing2 PDF
Tutorial:DesenvolvimentodeJogoscomUnity3D
ErickBaptistaPassos
epassos@ic.uff.br
JosRicardodaSilvaJr.
josericardo.jr@gmail.com
FernandoEmilianoCardosoRibeiro
one.fernando@gmail.com
PedroThiagoMouro
pedrothiago@hotmail.com
1
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.
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.
2
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.
3
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.
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.
4
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
5
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).
6
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
Figure4JanelaScene
Gameview
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.
7
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.
8
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.
9
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
Figure7Estruturamnimadeumobjeto
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:
*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
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)
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
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.
15
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
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.
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment 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
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.
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
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.
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)
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
24
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
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.
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:
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:
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.
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
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.
27
VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ Brazil, October, 8th-10th 2009
Figure24AtributodesvinculadodoPrefab(UNITYTECHNOLOGIES2009A)
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:
IssoirpermitiraodesenvolvedorarrastaroPrefabdofoguetediretamentedajanelaProject
paraajanelaHierarchydeformaaestabelecerareferncianecessria.Ocdigoaseguircria
uma instncia do foguete em tempo de execuo, ao mesmo tempo que adiciona uma
velocidadeinicialaomesmo,referenteorientaodoobjetoqueocriou:
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].
30