Sunteți pe pagina 1din 30

Programao em C# em Unity3D

Baseada em COMPONENTES
x
Orientada a OBJETOS
EN3617 Jogos Digitais, aspectos
Tcnicos e Aplicaes
Prof. Mrio Minami, 2Q15

OBJETIVOS
Revisitar Conceitos Bsicos de Programao
Orientada a Objeto (POO), em Games
Como usar a Linguagem C# no Motor de
Jogos Unity3D
Apresentar a Programao Baseada em
Componentes (PBC) no Unity3D

Breve Histria do C#
Bell Labs comeou em 1920
Em 1967 contratou Dennis Ritchie, Fsico e
Matemtico Aplicado de Harvard
Em 1974, junto com Kernighan, criou a
Linguagem C, e com Thompson, o SO Unix
Em 1983 surgiu o C++ (C com Classes), que
mantinha compatibilidade com C
Em 2001, a Microsoft lanou o C#, combinou
C, C++, LISP, Haskell e outras.

Paradigmas do C# (C-sharp)
Imperativo (operaes executadas em
ordem)
Orientado a Objeto: a cada objeto
permitido fazer aquilo que deseja
Permite gerenciamento de memria pelo
programador (por isso usado em
Embedded)
Por exemplo recolher o lixo

Motor de Jogos Unity3D


Motor de Jogos: SW que fornece funes
bsicas comuns num videogame 2D ou 3D
Integra-se com outros SW de edio de
imagem e animao como Blender, Maya, 3D
Studio Max
Permite escrever funes em C#, JavaScript e
Boo

Breve Histria do Unity3D


Incio de 90s o Intel 80486 (proc + coproc Math)
inaugurou jogos 3D, com polgonos
Quake 1 (1995) foi o primeiro com realismo 3D
GPUs final de 90s: 3dfx, nVidia, Maxtrox
Quake 2 (1998), John Carmack: spline, shadows, lighting
Unreal, Half-life, Counter-Strike (1998) Unreal e Valve
Engines
Sculo XXI: Popularizao das GPUs e baixo custo das
memrias fez nascer a tendncia de produtor Indie de
games
UNITY3D: Ambiente independente como Game Maker e
UDK

Classes em POO e num Game

Classes: combinao de dados e lgica num mesmo arquivo


Classes so usadas para criar objetos na memria e podem ser duplicados para
ter vida prpria
Classes constroem objetos, e peas de dados so parte do objeto, Membros da
Classe podem ser parte de dados ou de lgica (mtodos ou funes)
Num Game, com hordas de Zumbis, cada zumbi instanciado ou duplicado da
classe zumbi. Cada zumbi tem valores prprios e individuais, atributo na classe.
Cada objeto zumbi duplicado localiza-se e pode ser acertado de forma nica, ou
instancia.
Como nas famlias, objetos podem herdar propriedades uns dos outros. Um filho,
ou subclasse herda atributos de seu pai, como por exemplo um filho zumbi
gostar de crebros como seu pai. Tambm pode adicionar novos objetos aos
herdados, como tentculos, que o pai no tinha.
Objetos conversam por mensagens. Disparos em zumbis podem gerar um evento,
raises um evento. O impacto de um projtil avisa classe zumbi o que fazer
quando acertada por um projtil. Eventos comandam classe a agir com este
dado, ou o quais funes devem atuar: so as partes lgicas do programa.

Classes no Unity3D
Aparecem
com
extenso CS
(C-Sharp)

Aprendendo a Copiar e Colar


A good artist creates, a great artist steals
Copiar ou fazer download do que encontrar,
entender o que faz, analisar o cdigo, aprimorar o
prprio conhecimento, ajustar s minhas
necessidades.
Cclico!
Aprender truques: pode-se reescrever do meu
jeito
Encontrar as solues e ajust-las ao meu problema,
ou elabor-las de outros pontos prximos.

Ambiente Unity3D
Scene & Game

Toolbar

Hierarchy

Inspector

Project

Console

Inserindo um Objeto 3D
> GameObject > 3D Object > Cube

Editor MonoDevelop: cuidado com


Maisculas e Minsculas e pontuao

Comentrios
Linhas 1 e 2, bibliotecas do Unity3D
Linha 4, nome da Classe
MonoBehaviour a Classe Base
filho de Behaviour

Linhas 6 e 11, comentrios


Linha 7, mtodo Start (), primeiro a ser executado
pelo Unity3D
Linha 12, mtodo Update (), executado a cada
ciclo de atualizao do sistema

Objetos
Uma Classe possui moldes e instrues para construir um novo objeto.
Cada objeto criado deve ser instanciado dos moldes de uma Classe
Instancia: Quando construmos um objeto atravs de moldes e
instrues de uma Class. A Classe no em si mesma uma instancia
criada por ela.

Exemplo 1: podemos ter uma Classe com instrues para construir um objeto

Outros Exemplos de Objetos

Exemplo 2: Objetos instanciados de moldes


Instanciao
Podemos ter
mltiplas
instancias do
Objeto!

Exemplo 3: Objeto Construdo de Classes complexas, por


exemplo um SuperVilo, com comportamentos e planos
para dominar o mundo

POO em Videogames
Classes individuais podem
enderear diferentes aspectos
do Game
Uma Classe zumbi pode ser
instanciada vrias vezes para
criar uma horda de zumbis
errantes
Uma Classe pode gerenciar
como movimentar o seu Jogador
com as setas
Uma outra Classe pode
gerenciar o inventrio de itens
no Game

Interao entre Objetos


Monstros, balas, cmeras, luzes vieram de
Classes das quais eles foram criados
Cada Objeto no Unity3D deve ser instanciada
de uma Classe
Uma instancia de um Objeto comunica-se com
outro Objeto atravs de mensagens e eventos

Interao entre Objetos 2


Para usar um eletrodomstico (como uma torradeira) no precisamos
mexer com tudo o que h nele, s no o fabricante deixou disponvel, os
controles e o local de colocar o po.
Em POO, abstrao equivale a trabalhar s com o que o programador
disponibiliza no Objeto, nunca com os componentes internos.
Como na torradeira, a caixa protege as peas internas, em POO
encapsulagem proteger a Classe touster, e usamos apenas a interface.

Interao entre Objetos 3


Colocar po num liquidificador
resulta em po picado,
diferente de po torrado

Podemos ( recomendvel) reutilizar


cdigo de programa, para fazer coisas
diferentes (mas de mesma natureza),
com os mesmos componentes. Esta
capacidade de mudar o contedo de
uma operao o Polimorfismo.
Herana permite que Classes
compartilhem atributos comuns e
comportamentos.
Juntar diferentes Classes numa nica Classe o processo de Agregagem (p.ex. O
SmartPhone que muito mais que um telefone mvel)

Programao Baseada em
Componentes (PBC)
COMPONENTES Unidades de produo, aquisio e
processos independentes que interagem para o
funcionamento do Sistema
Similar ao que ocorre na terceirizao na Indstria
Automotiva e os Carros Mundiais
Arquitetura Baseada em Componentes (ABC):
Abordagem de Engenharia de Software (ESW) que
foca na decomposio do projeto em Componentes
Funcionais e individuais ou em Componentes
Lgicos com interfaces de comunicao bem
definidas em mtodos, eventos e propriedades.
Maior nvel de abstrao que OO, e no foca em
protocolos ou estados compartilhados.

Exemplo de Componentes

Controle do XBOX com vrios Botes e Joysticks

No Ambiente Unity3D - Inspector

Mostra propriedades do Componente selecionado

Componentes so:

Reutilizveis. Componentes so usualmente projetados para serem reutilizados


em diferentes cenrios e aplicaes. Entretanto, alguns componentes podem ser
projetados para uma tarefa especfica.
Substituveis. Componentes podem ser prontamente substituidos por outros
componentes similares.
Sem contexto especfico. Componentes so projetados para operar em diferentes
ambientes e contextos. Informaes Epecficas, como dados de estado, devem ser
passados ao componente ao invs de ser includo ou acessado no componente.
Extensveis. Um componente pode ser extendido de um componente existente
para fornecer um novo comportamento.
Encapsulados. Componentes expe interfaces as quais permitem que o chamador
use-as, e no revela detalhes dos processos internos, das variveis ou estados.
Independentes. Componentes so projetados para ter dependncias mnimas com
outros componentes. Assim, componentes podem trabalhar em um ambiente
adequado sem afetar os outros componentes.

Adicionando Componentes no Unity3D

Add Component

Exemplos de Componentes e Atributos


Ridigid Body
Dimenses em 3D
Atrado pela gravidade

Sphere Collider
Pode ser atingido por um projtil

Mesh Collider
Pode fundir primitivas grficas

Audio
Associa som a um pulo, a um disparo de arma laser,
ou a uma morte

Por Exemplo, os Inimigos

Alguns andam ou correm,


Outros s Pulam,
Outros podem voar.
Outros fazem tudo isso!

O Unity3D
Foi Desenvolvido para trabalhar com
Componentes
um pouco diferente da arquitetura OO,
necessita acostumar-se com a ideia
Para testar o que se faz (desenvolver o jogo)
MUITO VERSTIL!

Alguns benefcios da PBC


Implementao mais fcil de novas verses.
Reduo de custo. Principalmente quando h muitos fornecedores
Facilidade de desenvolvimento. Componentes implementam
interfaces bem conhecidas com definidas functionalidades,
permitindo desenvolvimento sem impactar outras partes do
sistema.
Reutilizao. O reuso de componentes significa que eles podem
servir como difuso de novas aplicaes ou sistemas.
Diminuio da complexidade tcnica. Componentes mitigam a
complexidade atravs de palets de componentes e seus servios.
Por examplo ativao de componentes, gerenciamento do tempo
de vida, temporizao dos mtodos, eventos e transaes.

Principal mudana para o


Desenvolvedor no Unity3D e na PBC
Abordagem voltada para EVENTOS
Flexibilidade para modelar Caracteres (jogador,
inimigos) atravs de mquinas de estados
A transio dos estados depender dos eventos
selecionados:

Levou um tiro;
Pulou;
Morreu;
Etc.

Referncias
Introduo ao Desenvolvimento de Games, Rabin, S., vol. 2,
Cengage Learning, 2013.
Learning C# Programming with Unity 3D, Okita, A., CRC Press,
2014.
Unity: Now You're Thinking With Components, Porter, Oct
2013, in:
http://gamedevelopment.tutsplus.com/articles/unity-nowyoure-thinking-with-components--gamedev-12492
Architectural Patterns and Styles, Ch.3, MS Developers
Network, in: https://msdn.microsoft.com/enus/library/ee658117
Designing Components versus Objects: A Transformational
Approach, Lorenz, D. H. and Vlissides, J., Proc. ICSE, pp 253-262, Toronto, Canada, May 12-19, 2001.