SlideShare uma empresa Scribd logo
1 de 66
Desafios técnicos
no mercado mobile
Know your engine
A Unity...
...é uma ótima engine. Mas…
...não resolve tudo sozinha.
...é extensa.
...tem bugs.
Know your engine
Estude a engine
Entenda o que ela faz e não faz por você
Conheça cada canto e comportamento que puder
Conheça os bugs e aprenda a contorná-los
Como?
Documentação
Learning materials
Forums
UnityAnswers
Google
...e usando!
O caso dos bugs
Software tem bugs. Unity não é exceção.
O que fazer ao encontrar um bug?
Investigar
Isolar
Reportar
Contornar
Multiplayer
Multiplayer
Online - Photon Cloud
Wi-Fi local - UNET
Código comum + camada de abstração
Muito pouco código específico
Online - Photon Cloud
Bom histórico
Fácil de usar com Unity
Não requer gerenciamento
Servidores em várias regiões
Online - Photon Cloud
Photon Realtime
Seleção automática de região
Conexão e matchmaking invisíveis ao jogador
(exceto Play with Friends)
Matchmaking por fora (!!)
Wi-Fi Local - UNET
Integrado na engine
Simples de usar
Suporta descoberta automática
API similar ao Photon Realtime
Facilita abstração
Wi-Fi Local - UNET
Low-Level API
Descoberta automática de partidas
Lobby (create + join)
Código genérico
(De)serialização de mensagens
Thrift (exceto player state)
Matchmaking
Eventos de gameplay
Player state interpolation/extrapolation
Como lidar com lag?
Minta!
Sincronização perfeita é impossível
Faça o possível para parecer certo
Exemplo: Tackle
Jogador A
Jogador A Jogador B
Backend
Features
User Accounts
Club Tournaments
Matchmaking
Casual/Ranked
Play with Friends
Tecnologia
AWS
Docker
Node.js
DynamoDB
Redis
AWS Stack
Aplicação
Node.js em cima de ECS + ELB
Users + Clubs
DynamoDB + Dynamic DynamoDB
Matchmaking + Ranking + Play with Friends
ElastiCache (Redis)
Usem Redis para leaderboards!
Bruno “Tinnus” Ferreira - Unite 2016 São Paulo
Otimização
Fazendo seu jogo rodar no celular da sua avó
Otimização de assets (na autoração)
Quantidade e duração de sons
Tamanho das malhas e texturas
Simplificação de Shaders
Texture Atlas
Batching, batching, batching
Otimização de assets (na importação)
Compressão de texturas
Compressão de animações
Compressão de sons
Em mobile, quase sempre mono é ok ;)
Otimização de tamanho do build
Log de build é seu amigo
Veja quem está ocupando mais espaço
Descubra assets “fantasmas”
Duplicatas
Placeholders
Features incompletas/removidas
Otimização de código
Não alocar nada no Update
“new” = alocação (exceto Vector3, Quaternion etc)
Reutilizar estruturas de dados
API da Unity suporta esta ideia
Exemplo: GetComponentsInChildren(list)
Usem o maldito Profiler!
Bruno “Tinnus” Ferreira - Unite 2016 São Paulo
Mais?
Palestra na Unite 2014
bit.ly/pcdasuaavo
Desafios técnicos no
desenvolvimento de muito conteúdo
● Memória em runtime + Separação de
cenas;
● Tamanho da build;
● Gera conteúdo em runtime (RTT);
● Carregamento dinâmico.
Resumo de conteúdo
● 144 personagens;
● 6 cenários;
● 16 capitães;
● 2 uniformes por capitão;
● UI baseada em ilustrações;
Assuntos
● Cenário
● FX
● Personagens
● UI
Cenários
● Existem 6 estádios no Goleadores,
cada um com um estilo diferente
atrelado ao cartoon que está
referenciando;
● Ainda assim, cenários otimizados
com pixel shader bem simples.
Matcap
Créditos: Jean Moreno
FX
https://www.behance.net/gdacas
FX
Objetivo: Estética cartoon, sprite sheet;
Problema com sprite sheet: Produção,
memória e resolução;
FX: Soluções
Um canal com múltiplos frames!
FX: Soluções
FX: Soluções
RGB
R G B
RGB
R G B
RGB
R G B
Personagens
Personagens:
3 Categories
3 Body shapes
16 Captains
Personagens:
3 Categories
3 Body shapes
16 Captains
144 meshes?
144 textures???
Nope
UV1 UV2
Personagens:
UI - tips and tricks
● Jogos atuais possuem MUITA UI;
● Picota!
● Canais diferentes pra shapes
diferentes;
● Custom Shader pra Soft Mask;
UI - tips and tricks
UI - tips and tricks
UI - Soft Mask
● Shader customizado de UI com um
segundo input de textura grayscale
multiplicando no alpha.
● Essa textura não tem repeat, recebe
mapeamento em screenspace com
offset alimentado por um
componente.
Contato
Bruno “Tinnus” Ferreira
Programador
bruno.ferreira@aquiris.com.br
@BrunoTinnus
Juliano Silveira
Artista Técnico
juliano@aquiris.com.br
@3dju
jobs@aquiris.com.br

Mais conteúdo relacionado

Semelhante a Desafios técnicos no mercado mobile

Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2sagostinho
 
Internet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine LearningInternet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine LearningAlvaro Viebrantz
 
Memorias das trincheiras
Memorias das trincheirasMemorias das trincheiras
Memorias das trincheirasElton Minetto
 
Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinalAlmerindo Rehem
 
Treinamento básico de Android
Treinamento básico de AndroidTreinamento básico de Android
Treinamento básico de AndroidTiago Barreto
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeAlessandro Binhara
 
Framework de GameAnalytics para Jogos Moveis 2D Tipo Plataforma
Framework de GameAnalytics para Jogos Moveis 2D Tipo PlataformaFramework de GameAnalytics para Jogos Moveis 2D Tipo Plataforma
Framework de GameAnalytics para Jogos Moveis 2D Tipo PlataformaBeatriz Vaz Pinto
 
Programação de jogos eletrônicos
Programação de jogos eletrônicosProgramação de jogos eletrônicos
Programação de jogos eletrônicosguest8ff100
 
Horizon chase: Design para multiplayer local
Horizon chase: Design para multiplayer localHorizon chase: Design para multiplayer local
Horizon chase: Design para multiplayer localBruno Ferreira
 
Memorias das trincheiras - 2015
Memorias das trincheiras - 2015Memorias das trincheiras - 2015
Memorias das trincheiras - 2015Elton Minetto
 

Semelhante a Desafios técnicos no mercado mobile (20)

Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2
 
Internet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine LearningInternet das Coisas com Android things e Machine Learning
Internet das Coisas com Android things e Machine Learning
 
OpenKinect, o Kinect para todos
OpenKinect, o Kinect para todosOpenKinect, o Kinect para todos
OpenKinect, o Kinect para todos
 
Memorias das trincheiras
Memorias das trincheirasMemorias das trincheiras
Memorias das trincheiras
 
Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinal
 
Treinamento básico de Android
Treinamento básico de AndroidTreinamento básico de Android
Treinamento básico de Android
 
Curso Unity3D
Curso Unity3DCurso Unity3D
Curso Unity3D
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
 
Mt Lab
Mt LabMt Lab
Mt Lab
 
Framework de GameAnalytics para Jogos Moveis 2D Tipo Plataforma
Framework de GameAnalytics para Jogos Moveis 2D Tipo PlataformaFramework de GameAnalytics para Jogos Moveis 2D Tipo Plataforma
Framework de GameAnalytics para Jogos Moveis 2D Tipo Plataforma
 
Unity3d
Unity3dUnity3d
Unity3d
 
Programação de jogos eletrônicos
Programação de jogos eletrônicosProgramação de jogos eletrônicos
Programação de jogos eletrônicos
 
Introdução ao .NET
Introdução ao .NETIntrodução ao .NET
Introdução ao .NET
 
Game programming
Game programmingGame programming
Game programming
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 
Horizon chase: Design para multiplayer local
Horizon chase: Design para multiplayer localHorizon chase: Design para multiplayer local
Horizon chase: Design para multiplayer local
 
Game Engine Unity 3D | Workshop
Game Engine Unity 3D | WorkshopGame Engine Unity 3D | Workshop
Game Engine Unity 3D | Workshop
 
Memorias das trincheiras - 2015
Memorias das trincheiras - 2015Memorias das trincheiras - 2015
Memorias das trincheiras - 2015
 
Aplicações do Python na escola e no mercado de trabalho
Aplicações do Python na escola e no mercado de trabalhoAplicações do Python na escola e no mercado de trabalho
Aplicações do Python na escola e no mercado de trabalho
 
E Books MBV - Livro1
E Books MBV - Livro1E Books MBV - Livro1
E Books MBV - Livro1
 

Desafios técnicos no mercado mobile