Escolar Documentos
Profissional Documentos
Cultura Documentos
Unity PDF
Unity PDF
Tutorial:DesenvolvimentodeJogoscomUnity3D
ErickBaptistaPassos
epassos@ic.uff.br
JosRicardodaSilvaJr.
josericardo.jr@gmail.com
FernandoEmilianoCardosoRibeiro
one.fernando@gmail.com
PedroThiagoMouro
pedrothiago@hotmail.com
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.
Guiadeleitura
1Introduo
BreveapresentaodosmdulosdaUnity3Dedetalhamentodainterfacedoeditordecenas.
2CriaoeManipulaodeGameObjects
ExplicaodomodelodeobjetosdaUnity3Deasformasbsicasdecriao,composioe
alteraodosmesmos.
3MateriaiseShaders
BreveintroduolinguagemdeespecificaodeShadersdaUnity3D:ShaderLab.So
demonstradosexemplosparapipelinedefunofixa,bemcomoShadersprogramveis.
4SistemadeFsica
IntroduoaoscomponentesrelacionadosaosubsistemaPhysXdesimulaofsica.
5Scripting
Apresentao,atravsdeexemplos,dosprincipaisconceitosparaaprogramaodescripts
comaUnity3D.
6Concluso
Consideraesfinaisdosautores.
Bibliografia
Leiturasrecomendadasparaaquelesinteressadosemummaioraprofundamento.
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.
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
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).
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.
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.
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.
Figure7Estruturamnimadeumobjeto
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
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
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
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
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
15
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
nessecasoserumaversopadroqueusainterpolaoparaexibirascorescomputadaspor
esseVextexShader.Afiguraaseguirmostraoresultadodessecdigoaplicadoaumobjeto.
Figure12Shaderqueexibenormais
Da mesma forma que os Shader de funo fixa, possvel se passar parmetros de material
quesoespecificadosnoeditordecena,usartexturas,mltiploscanaisdemapeamentoUV,
ouqualqueroutraopoquesejainteressanteparaseatingirosresultadosdesejados.
17
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
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
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
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
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
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
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
25
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
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
Figure24AtributodesvinculadodoPrefab(UNITYTECHNOLOGIES2009A)
28
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
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