programação orientada a objeto vs baseada em componentes

30
Programação em C# em Unity3D Baseada em COMPONENTES x Orientada a OBJETOS EN3617 – Jogos Digitais, aspectos Técnicos e Aplicações Prof. Mário Minami, 2Q15

Upload: mario-minami

Post on 15-Apr-2016

24 views

Category:

Documents


1 download

DESCRIPTION

Slides de EN3617 para introduzir programação para Jogos Digitais em C#

TRANSCRIPT

Programação em C# em Unity3DBaseada em COMPONENTES

xOrientada a OBJETOS

EN3617 – Jogos Digitais, aspectos Técnicos e Aplicações

Prof. Mário Minami, 2Q15

OBJETIVOS

• Revisitar Conceitos Básicos de Programação Orientada a Objeto (POO), em Games

• Como usar a Linguagem C# no Motor de Jogos Unity3D

• Apresentar a Programação Baseada em Componentes (PBC) no Unity3D

Breve História do C#

• Bell Labs começou em 1920

• Em 1967 contratou Dennis Ritchie, Físico e Matemático 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 lançou o C#, combinou C, C++, LISP, Haskell e outras.

Paradigmas do C# (C-sharp)

• Imperativo (operações executadas em ordem)

• Orientado a Objeto: a cada objeto é permitido fazer aquilo que deseja

• Permite gerenciamento de memória pelo programador (por isso é usado em Embedded)

– Por exemplo “recolher o lixo”

Motor de Jogos Unity3D

• Motor de Jogos: SW que fornece funções básicas comuns num videogame 2D ou 3D

• Integra-se com outros SW de edição de imagem e animação como Blender, Maya, 3D Studio Max

• Permite escrever funções em C#, JavaScript e Boo

Breve História do Unity3D

• Início de 90’s o Intel 80486 (proc + coproc Math) “inaugurou” jogos 3D, com polígonos

• Quake 1 (1995) foi o primeiro com realismo 3D• GPUs final de 90’s: 3dfx, nVidia, Maxtrox• Quake 2 (1998), John Carmack: spline, shadows, lighting• Unreal, Half-life, Counter-Strike (1998) – Unreal e Valve

Engines• Século XXI: Popularização das GPU’s e baixo custo das

memórias fez nascer a tendência de produtor “Indie” de games

• UNITY3D: Ambiente “independente” como Game Maker e UDK

Classes em POO e num Game• Classes: combinação de dados e lógica num mesmo arquivo

• Classes são usadas para criar objetos na memória e podem ser duplicados para ter vida própria

• Classes constroem objetos, e peças de dados são parte do objeto, Membros da Classe podem ser parte de dados ou de lógica (métodos ou funções)

• Num Game, com hordas de Zumbis, cada zumbi é instanciado ou duplicado da classe zumbi. Cada zumbi tem valores próprios e individuais, atributo na classe. Cada objeto zumbi duplicado localiza-se e pode ser acertado de forma única, ou instancia.

• Como nas famílias, objetos podem herdar propriedades uns dos outros. Um filho, ou subclasse herda atributos de seu pai, como por exemplo um filho zumbi gostar de cérebros como seu pai. Também pode adicionar novos objetos aos herdados, como tentáculos, que o pai não tinha.

• Objetos conversam por mensagens. Disparos em zumbis podem gerar um evento, “raises” um evento. O impacto de um projétil avisa à classe zumbi o que fazer quando acertada por um projétil. Eventos comandam à classe a agir com este dado, ou o quais funções devem atuar: são as partes lógicas do programa.

Classes no Unity3D

Aparecem com

extensão 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 código, aprimorar o próprio conhecimento, ajustar às minhas necessidades.

– Cíclico!

– Aprender “truques”: pode-se reescrever do meu jeito

– Encontrar as soluções e ajustá-las ao meu problema, ou elaborá-las de outros pontos próximos.

Ambiente Unity3D

Project

Hierarchy

Scene & Game

Console

Toolbar

Inspector

Inserindo um Objeto 3D

• > GameObject > 3D Object > Cube

Editor MonoDevelop: cuidado com Maiúsculas e Minísculas e pontuação

Comentários

• Linhas 1 e 2, bibliotecas do Unity3D

• Linha 4, nome da Classe

• MonoBehaviour é a Classe Base– filho de Behaviour

• Linhas 6 e 11, comentários

• Linha 7, método Start (), primeiro a ser executado pelo Unity3D

• Linha 12, método Update (), executado a cada ciclo de atualização do sistema

ObjetosUma Classe possui moldes e instruções para construir um novo objeto.

Instancia: Quando construímos um objeto através de moldes e instruções de uma Class. A Classe não é em si mesma uma instanciacriada por ela.

Cada objeto criado deve ser instanciado dos moldes de uma Classe

Exemplo 1: podemos ter uma Classe com instruções para construir um objeto

Outros Exemplos de Objetos• Exemplo 2: Objetos instanciados de moldes

Exemplo 3: Objeto Construído de Classes complexas, por exemplo um SuperVilão, com comportamentos e planos para dominar o mundo

InstanciaçãoPodemos ter múltiplas instancias do Objeto!

POO em Videogames• Classes individuais podem

endereçar diferentes aspectos do Game

• Uma Classe zumbi pode ser instanciada várias 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 inventário de itens no Game

Interação entre Objetos

• Monstros, balas, câmeras, 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 através de mensagens e eventos

Interação entre Objetos 2• Para usar um eletrodoméstico (como uma torradeira) não precisamos

mexer com tudo o que há nele, só no o fabricante deixou disponível, os controles e o local de colocar o pão.

• Em POO, abstração equivale a trabalhar só com o que o programador disponibiliza no Objeto, nunca com os componentes internos.

• Como na torradeira, a caixa protege as peças internas, em POO encapsulagem protegerá a Classe touster, e usamos apenas a interface.

Interação entre Objetos 3• Colocar pão num liquidificador

resulta em pão picado, diferente de pão torrado

Podemos (é recomendável) reutilizar código de programa, para fazer coisas diferentes (mas de mesma natureza), com os mesmos componentes. Esta capacidade de mudar o conteúdo de uma operação é o Polimorfismo.

Herança permite que Classescompartilhem atributos comuns e comportamentos.

Juntar diferentes Classes numa única Classe é o processo de Agregagem (p.ex. O SmartPhone que é muito mais que um telefone móvel)

Programação Baseada em Componentes (PBC)

COMPONENTES – Unidades de produção, aquisição e processos independentes que interagem para o funcionamento do Sistema

Arquitetura Baseada em Componentes (ABC):• Abordagem de Engenharia de Software (ESW) que

foca na decomposição do projeto em ComponentesFuncionais e individuais ou em ComponentesLógicos com interfaces de comunicação bemdefinidas em métodos, eventos e propriedades.

• Maior nível de abstração que OO, e não foca emprotocolos ou estados compartilhados.

Similar ao que ocorre na terceirização na Indústria Automotiva e os Carros Mundiais

Exemplo de Componentes

Controle do XBOX com vários Botões e Joysticks

No Ambiente Unity3D - Inspector

Mostra propriedades do Componente selecionado

Componentes são:• Reutilizáveis. Componentes são usualmente projetados para serem reutilizados

em diferentes cenários e aplicações. Entretanto, alguns componentes podem serprojetados para uma tarefa específica.

• Substituíveis. Componentes podem ser prontamente substituidos por outros componentes similares.

• Sem contexto específico. Componentes são projetados para operar em diferentesambientes e contextos. Informações Epecíficas, como dados de estado, devem serpassados ao componente ao invés de ser incluído ou acessado no componente.

• Extensíveis. Um componente pode ser extendido de um componente existentepara fornecer um novo comportamento.

• Encapsulados. Componentes expõe interfaces as quais permitem que o chamadoruse-as, e não revela detalhes dos processos internos, das variáveis ou estados.

• Independentes. Componentes são projetados para ter dependências mínimas com outros componentes. Assim, componentes podem trabalhar em um ambienteadequado sem afetar os outros componentes.

Adicionando Componentes no Unity3D

Add Component

Exemplos de Componentes e Atributos

• Ridigid Body– Dimensões em 3D– Atraído pela gravidade

• Sphere Collider– Pode ser atingido por um projétil

• Mesh Collider– Pode “fundir” primitivas gráficas

• 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 VERSÁTIL!

Alguns benefícios da PBC

• Implementação mais fácil de novas versões.

• Redução de custo. Principalmente quando há muitos fornecedores

• Facilidade de desenvolvimento. Componentes implementaminterfaces bem conhecidas com definidas functionalidades, permitindo desenvolvimento sem impactar outras partes do sistema.

• Reutilização. O reuso de componentes significa que eles podemservir como difusão de novas aplicações ou sistemas.

• Diminuição da complexidade técnica. Componentes mitigam a complexidade através de palets de componentes e seus serviços. Por examplo ativação de componentes, gerenciamento do tempo de vida, temporização dos métodos, eventos e transações.

Principal mudança para o Desenvolvedor no Unity3D e na PBC

• Abordagem voltada para EVENTOS

• Flexibilidade para modelar Caracteres (jogador, inimigos) através de máquinas de estados

• A transição dos estados dependerá dos eventos selecionados:

– Levou um tiro;

– Pulou;

– Morreu;

– Etc.

Referências• Introdução 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-now-youre-thinking-with-components--gamedev-12492

• Architectural Patterns and Styles, Ch.3, MS DevelopersNetwork, in: https://msdn.microsoft.com/en-us/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.