Implementando In-App Purchases para BlackBerry 10

BlackBerry, Tutorials, Unity

Neste tutorial, explicarei como implementar o plugin de In-App Purchases para BlackBerry em jogos feitos no Unity.
Leia o tutorial INTEIRO com atenção, e dê atenção especial aos parágrafos em VERMELHO, que podem te dão informações vitais e te poupar futuras dores de cabeça.

Este tutorial será explicado na seguinte ordem:
-Criação dos produtos no Vendor Portal
-Importação do plugin de In-App Purchases no projeto do Unity
-Implementação do plugin utilizando a cena Demo como exemplo
-Teste da implementação

Criação dos Produtos no Vendor Portal

1.1 – Faça login no Vendor Portal
1.2 – Clique em “Manage Products”
1.3 – Pressupondo que você já criou seu aplicativo no Vendor Portal, clique no sinal de + da aba Goods (marcada em vermelho na imagem abaixo)

Vendor Portal-Goods

Você verá a tela “Add a Virtual Good”:

Vendor Portal - Add Virtual Good

1.4 – Preencha este formulário, e se estiver na dúvida sobre algum dos campos, veja esta explicação:

Name é o nome mostrado apenas no seu Vendor Portal
SKU é o código de identificação do produto que você usará no seu script, costumo usar o formato “NomeDoJogo_NomeDoProduto” (o SKU equivale ao Product ID da App Store e do Google Play, padronizá-lo pode ser útil)
License Type, preste bem atenção às diferenças das licenças:
*Non-consumable: serve para produtos duradouros, que ficarão salvos na conta do jogador, por exemplo, um pacote de Personagens.
*Consumable: serve para produtos consumíveis, que podem ser usados apenas 1 vez, por exemplo, um pacote de moedas.
*Subscription: serve para assinaturas, dá ao usuário o direito de gozar de determinado produto dentro do prazo especificado (7 ou 30 dias)
Price define o preço do produto
US Withholding Tax Classification você deve escolher como será feita a coleta de impostos sob o produto nos EUA, para produtos consumable/non-consumable recomendo usar o formato “One-time”
Canada Withholding Tax Classification eu sigo o mesmo modelo da US Withholding Tax Classification, ou seja “One-time”
License Model for BlackBerry OS and PlayBook eu recomendo escolher “Static”, que é o formato mais comum (o mesmo que se usa no Google Play e App Store) e eu particularmente não faço ideia de como se usa os outros formatos, então não me arrisco a recomendá-los.

1.5 – Para completar a criação deste produto, clique em Save. Se quiser criar mais um antes de continuar o tutorial, clique em “Save and Add Another” e preencha o formulário novamente.

Importando o Plugin de In-App Purchases no Unity

2.1 – Acesse a Asset Store dentro do Unity (CTRL+9 no Windows, Command+9 no Mac)
2.2 – Procure por “BlackBerry” na busca da Asset Store
2.3 – Selecione o plugin BlackBerry In-App Purchasing
2.4 – Clique em Import, para importar o plugin no seu projeto

BlackBerry In-App Purchasing Plugin

2.5 – Importe TODOS os arquivos do plugin para o seu projeto

Implementação do Plugin

Após ter importado o plugin no seu projeto:
3.1 – Abra a cena demo do plugin, chamada “BlackBerryIAPTestScene”, que se encontra dentro da pasta BlackBerry/IAP
3.2 – Selecione o gameobject chamado “UI” e abra o script BlackBerryIAPTest.cs que está nele

3.4 – As primeiras variáveis do script são strings onde você deve colocar a SKU do produto que você criou no Vendor Portal, se você tiver criado 3 produtos, pode preencher as 3 strings com os 3 SKUs desses produtos, por exemplo:


 string ITEM_1_SKU = "NomeDoJogo_NomeDoProduto01";
 string ITEM_2_SKU = "NomeDoJogo_NomeDoProduto02";
 string ITEM_3_SKU = "NomeDoJogo_NomeDoProduto03";

3.5 – Em seguida, vem a variável localTesting, que deve ser definida como TRUE quando você quiser testar os IAPs em modo local/offline.
*a variável localTesting deve estar FALSE quando você for gerar a build Submission

3.6 – Na função Start se atribuem funções aos eventos do BlackBerryIAP.cs (que é uma classe atribuída ao gameobject BlackBerryIAP da cena de demonstração). Por exemplo: a função PurchaseSuccessful está atribuída ao evento PurchaseSuccesfulEvent, que é disparado toda vez que uma compra for concluída.

3.7 – Na função OnGui, se encontram os botões da cena de demonstração (“Purchase SKU 1”, “Purchase SKU2”, etc).

3.8 – Quando um botão de “Purchase SKU” da função OnGui é acionado, ele chama a função BuySKU (que está logo abaixo da OnGui), que por sua vez, solicita a compra do produto através do método BlackBerryIAP.Purchase(sku, null, null, null, null, null, null)

3.9 – Quando a compra for completada, o evento PurchaseSuccessfulEvent do BlackBerryIAP.cs vai ser disparado, e consequentemente, a função PurchaseSuccessful será chamada.

3.10 – Dentro da função PurchaseSuccessful, você deve dizer O QUE acontece quando a compra do produto for completada. A variável args.DigitalGoodSku desta função, é a string do SKU do produto que acabou de ser comprado.

Existem outros eventos que podem ser úteis, por exemplo:
-ExistingPurchasesSuccessfulEvent, que carrega a lista de todos os produtos comprados pela conta do usuário.
-GetPriceSuccessfulEvent, que puxa o preço do produto.

Use esses eventos conforme suas necessidade.
É só isso que você precisa, agora veja as maneiras de testar.

Testando as In-App Purchases

Existem 2 métodos de teste de In-App Purchases:

Local Testing: não requer que você faça upload do jogo no Vendor Portal. Para utilizá-lo, você precisa:
-Definir a variável localTesting da classe BlackBerryIAPTest.cs como TRUE.
-Instalar o jogo no seu celular
-Tentar comprar algum produto

Sandbox: é o método mais seguro de teste, pois abre o diálogo de compra padrão da BlackBerry, solicitando login e dados de compra do usuário. Para utilizá-lo, você deve passar por 2 processos, 1 no computador e outro no seu smartphone/tablet BlackBerry. Ambos explicados abaixo:

1. No computador:
-Gerar uma build com a variável localTesting da classe BlackBerryIAPTest.cs definida como FALSE
-Fazer upload dessa build/release do seu jogo na página Manage Products no Vendor Portal, podendo deixá-la no status Draft
-Clicar em Sandbox, no Vendor Portal
-Clicar em “Add New User”
-Cadastrar o e-mail de uma conta da BlackBerry World que será utilizada para testar o jogo e as In-App Purchases

2. No celular/tablet:
-Abrir o aplicativo BlackBerry World no seu aparelho BlackBerry.
-Abrir as “Configurações” do BlackBerry World, deslizando o dedo a partir do TOPO da tela
-Clicar em “Modo de Desenvolvimento”
-Digitar o ID do seu jogo (que se encontra na página “Edit Product” do seu aplicativo)Edit Product

-SE o BlackBerry World já tiver atualizado, você verá a página de download do seu jogo, e você poderá baixar. Mas isso pode demorar em torno de 2 horas após você ter feito o upload do jogo, então, se ainda não estiver disponível, não se desespere.
-Após baixar o jogo no seu celular, basta realizar as compras de IAP utilizando a conta que você cadastrou no Sandbox, você não receberá despesa nenhuma na fatura do seu cartão de crédito.

LEMBRE-SE: a classe BlackBerryIAP.cs SEMPRE deve estar adicionada a um gameobject com o nome BlackBerryIAP (não pode ser diferente), que SEMPRE deve estar presente na cena em que houver compras(in-app purchases), caso o contrário, o evento PurchaseSuccessful não vai funcionar, e o usuário não receberá o produto que ele comprou.

Espero ter ajudado muitas pessoas, pois sei que tem sido difícil lucrar nesta plataforma.
A BlackBerry disponibiliza um ótimo plugin gratuito, mas uma fraquíssima documentação.

Suporte aos controles MOGA Pro para BlackBerry (Unity)

BlackBerry, Tutorials

Aqui vai uma maneira simples de implementar o controle MOGA ou SteelSeries no seu jogo para BlackBerry.

Lembrando que o controle que utilizei foi o MOGA Pro, e ao utilizar outros controles, não obtive resultados satisfatórios (as funções dos botões ficaram “embaralhadas”).
Primeiramente, vou explicar como conectar o controle ao seu aparelho, se você já sabe fazer isso, pode pular este primeiro ítem e ir direto ao segundo (Implementação):

Conectando o MOGA ao seu BlackBerry

1- Ligue a chave do controle na posição “B”, para Blackberry (como no exemplo abaixo):

moga

2- No seu aparelho BlackBerry:
– Vá em Definições -> Conexões de Rede -> Bluetooth
– Ative o Bluetooth.
– Aguarde até que apareça o “Moga Pro HID” na lista de aparelhos bluetooth (como na imagem abaixo)

BBbluetooth

– Clique no “Moga Pro HID” para conectar seu Blackberry ao gamepad e aguarde o nome do controle ficar verde
– Pronto! Seu Blackberry está conectado ao controle.

Implementação no código

Antes do código, uma observação: os botões L2 e R2 do controle NÃO funcionam no Blackberry
Para começar seu código, recomendo utilizar esta função do Unity logo no começo:

Input.GetJoystickNames()

Esta função retorna um array de strings com os nomes dos controles conectados. Eu utilizo ela para detectar se há algum controle conectado, como no exemplo abaixo:


 void Awake ()
 {
 if ( Input.GetJoystickNames() == null )
 print( "Nenhum controle conectado" );
 }

E agora, o mais importante… um código detectando o Input de todos os botões do controle e dando Print


void Update ()
{
  if ( Input.GetKey(KeyCode.Joystick1Button2) ) // BOTAO X DO MOGA
  print ("Pressionou o botao X");

  if( Input.GetKey(KeyCode.Joystick1Button3) ) // BOTAO Y DO MOGA
  print ("Pressionou o botao Y");

  if( Input.GetKey(KeyCode.Joystick1Button0) ) // BOTAO A DO MOGA
  print ("Pressionou o botao A");

  if( Input.GetKey(KeyCode.Joystick1Button1) ) // BOTAO B DO MOGA
  print ("Pressionou o botao B");

  if( Input.GetKey(KeyCode.Joystick1Button4) ) // BOTAO L1 DO MOGA
  print ("Pressionou o botao L1");

  if( Input.GetKey(KeyCode.Joystick1Button5) ) // BOTAO R1 DO MOGA
  print ("Pressionou o botao R1");

  if( Input.GetKey(KeyCode.Joystick1Button6) ) // BOTAO SELECT DO MOGA
  print ("Pressionou o botao SELECT");

  if( Input.GetKey(KeyCode.Joystick1Button7) ) // BOTAO START DO MOGA
  print ("Pressionou o botao START");

  if( Input.GetAxisRaw("6th axis") > 0 ) // EIXO HORIZONTAL DO DIRECIONAL DIGITAL DO MOGA
  print ("Pressionou o Direcional Digital para direita");

  if( Input.GetAxisRaw("7th axis") > 0 ) // EIXO VERTICAL DO DIRECIONAL DIGITAL DO MOGA
  print ("Pressionou o Direcional Digital para cima");
  if( Input.GetAxisRaw("4th axis") < 0 ) // EIXO HORIZONTAL DO DIRECIONAL ANALOGICO DO MOGA
  print ("Moveu o Direcional Analogico para esquerda");

  if( Input.GetAxisRaw("5th axis") < 0 ) // EIXO VERTICAL DO DIRECIONAL ANALOGICO DO MOGA
  print ("Moveu o Direcional Analogico para baixo");
}

Lembrando que os direcionais não vão funcionar se você não criar estes inputs “4th axis”, “5th axis”, “6th axis” e “7th axis” na lista de Inputs do seu projeto.
Para isso, siga o exemplo abaixo

Configurando Input dos Direcionais

-No Unity, vá em: Edit -> Project Settings -> Input
-Crie um input com o nome de cada eixo utilizado no código acima (“4th axis”, “5th axis”, “6th axis” e “7th axis”)
-Configure cada input igual ao exemplo abaixo:

MOGAinput

Lembre-se que o campo “Axis” é definido de acordo com o eixo que você quer mexer (não vá colocar “6th axis” nos 4 inputs).

Com a lista de inputs configurada e os códigos  “na mão”, de agora em diante, é com você 😉

Adaptando NGUI para BlackBerry e Windows Phone (Unity)

BlackBerry, Tutorials, Windows Phone 8

Cada plataforma mobile usa um estilo de “scaling” diferente no NGUI.
Esse “scaling”, é o que garante que a interface se adapte ao formato da tela.

Para alterar o tipo de scaling, você deve procurar pelo gameobject “UIRoot (2D)” na hierarquia do seu projeto:

UIRoot

Confira se o gameobject possui a classe “UIRoot” no inspector:

UIRoot-inspector

No Android e iOS, a variável “ScalingStyle” do UIRoot deve ser “FixedSizeOnMobiles”.
No BlackBerry10 e no WindowsPhone8, você deve mudar o Scaling Style para “FixedSize”:

UIRoot-scalingstyle

É simples, mas fazer isso manualmente pode ser muito trabalhoso quando seu jogo possui muitas cenas.
Por isso, criei a classe “UIAdapter”, que sempre coloco junto ao “UIRoot(2D)” das minhas cenas e que faz esse trabalho automaticamente:


using UnityEngine;
using System.Collections;

public class UIAdapter : MonoBehaviour {

private UIRoot UiRoot;

void Awake ()
 {
 UiRoot = GetComponent&amp;amp;lt;UIRoot&amp;amp;gt; ();

#if UNITY_BLACKBERRY || UNITY_WP8
 UiRoot.scalingStyle = UIRoot.Scaling.FixedSize;
 #endif
 #if UNITY_ANDROID || UNITY_IPHONE
 UiRoot.scalingStyle = UIRoot.Scaling.FixedSizeOnMobiles;
 #endif
 }
}

Retro Runners, o primeiro e bem sucedido jogo

Countryside Games

Retro Runners Logo
Antes de continuar a falar sobre o Retro Runners, vou deixar os links de download para quem não quer ler o post, haha.

Google Play: https://play.google.com/store/apps/details?id=com.CountrysideGames.RetroRunners

iTunes: https://itunes.apple.com/us/app/retro-runners/id693042806

BlackBerry: http://appworld.blackberry.com/webstore/content/35534890/?countrycode=BR&lang=en

Windows Phone 8: http://www.windowsphone.com/en-us/store/app/retro-runners/d655d41e-a482-4284-bd4f-65beb143b1ab

Voltando ao jogo…
O Arthur fez toda a parte visual do game e dos materiais de divulgação (posters, banners, etc).
Eu fiz a programação, sound design, música e obviamente… game design. Coisas bem distintas, mas que eu já tinha alguma prática, com exceção da programação.

Fiz um post explicando sobre o processo de desenvolvimento no forum do Unity (esse post contem screenshots épicas, haha)
http://forum.unity3d.com/threads/189764-Retro-Runners-a-mobile-quot-endless-runner-quot-(our-first-project)

Passamos 3 meses desenvolvendo o Retro Runners, cometemos muitos erros, mas conseguimos lidar com todos eles, fiz porting para todas as plataformas de smartphones do mercado e terminamos com um jogo muito bem avaliado nas principais app stores.

Ficamos “featured” (em destaque) tanto no Google Play (sessão “Melhores da Semana”) quanto na App Store (o jogo está sempre visível na lista “Populares” do gênero Arcade).
Foi a primeira vez que programei na minha vida, e me dediquei integralmente a isso. Se isso não for motivo para se ter orgulho, então eu não sei o que é, haha.

Houveram dezenas ou centenas de reviews em sites estrangeiros, mas um muito especial, foi o do Touch Arcade, que incrementou consideravelmente o nosso número de downloads no iOS:
http://toucharcade.com/2013/09/22/retro-runners-review/

Como só fiz esse post MESES depois de ter publicado o jogo, não tenho muito ânimo para falar sobre o jogo, apenas posso dizer que passamos dos 300.000 downloads, que eu não sabia programar… e que isso é sensacional, hahaha.

Fundando a Countryside Games

Countryside Games
Jogos do interiorrr...

Jogos do interiorrr…

Cansei de grupos independentes sem dedicação, cansei das promessas não cumpridas e decidi desenvolver meus jogos sozinho, mesmo sabendo que seria uma grande empreitada. Voltei a morar com meus pais no interior, comecei a estudar programação e decidi criar a Countryside Games.

Passei apenas 2 semanas programando meu primeiro game sozinho (aquele de futebol do último post), mas interrompi o projeto quando meu amigo Arthur Ciappina (com quem trabalhei anteriormente na Glu Mobile) me desafiou a programar um jogo de corrida infinita. Depois de alguns testes, ele quis fazer a arte e é aí que consideramos o início oficial da  Countryside Games.

O resultado foi bom, e vou detalhar melhor no próximo post, junto com o link do jogo.

Novo grupo indie – Dicas

Velharia

Bastou chegar em Indaiatuba, e fui chamado para um grupo (dessa vez com programador, ALELUIA!) para fazer uns joguinhos para mobile.

Não vou dar detalhes dos games, pois não posso avacalhar nos spoilers. Mas vou postar a primeira cena e uma breve explicação de algumas técnicas que estou usando para deixar o game bem leve e rodar numa gama maior de celulares/tablets:

Em desenvolvimento - ignore as sombras e outras coisas.

Em desenvolvimento – ignore as sombras e outras coisas.

Bom, primeiramente, devo dizer que, esta cena só possui 3 texturas de resolução 512 x 512 e não terá mais que isso em hipótese alguma, pois quero deixar tudo realmente leve.
A primeira textura, cobre  arena, o gramado, as muretas e as traves.
A segunda textura, cobre os objetos externos à área de gameplay (bancos, postes, arquibancadas, etc). Novos objetos serão acrescentados no lado externo da arena, e continuarão usando essa mesma textura.
A terceira textura será um .PNG, e ela servirá para TODOS os objetos com transparência (redes, alambrados, etc). Nesta cena só a rede está usando esta textura, mas na seguinte, vocês verão esta textura sendo utilizada em outros objetos.

Nessa aí o bicho vai pegar

Nessa aí o bicho vai pegar

A arquibancada

Quando fui fazer a arquibancada, a primeira coisa que me veio na cabeça foi “Como vou economizar polígonos?”, afinal, a escada precisava ter uma quantidade considerável de degraus.
Aí pensei “A câmera do jogo é estática”, ou seja, em nenhum momento o jogador verá este cenário por outros angulos. O que significa até mesmo, que TALVEZ seja conveniente fazer o cenário todo pré-renderizado (mas ainda é cedo para tomar uma medida tão drástica).

Então o que fiz?
Fiz um plano retangular na diagonal, de frente para a câmera, e fiz uma textura que cria a ILUSÃO de que existem degraus ali.

Veja esta cena por outros ângulos, para entender melhor:

Que bom que a câmera é fixa, não? haha

Que bom que a câmera é fixa, não? haha

Veja uma parte da textura da arquibancada (para vocês terem noção do ângulo):

A parte de cima é a arquibancada

A parte de cima é a arquibancada

Estou vendo que será bem legal trabalhar as texturas desse projeto e estou animado.

Em breve posto novos updates!

Work in Progress – Commandos 2 remake

Velharia

Ano passado, foi um ano tenso.
O concurso da Square miou, e uns outros 2 ou 3 projetos falharam por falta de programador (como sempre).
Pouca coisa boa rolou.
Minha oportunidade de voltar para a Glu Mobile miou com o fim da empresa e minha ida para a Best Cool & Fun Games também miou com o encerramento da empresa.

Mas, já foi né…
Um dia desses, estava re-lembrando um jogo que sempre curti muito, Commandos.

E lá fui eu… tentar modelar o cenário da terceira fase do jogo.

Fiquei bastante empolgado com a idéia, vou modelar mais uns assets e gerar uns mapas de textura bacana para testar em alguma engine nova.

 

 

Concurso da Square

Velharia

Ano passado, foi anunciado o concurso da Square de jogos para plataformas mobile.

Meu grupo, mais uma vez, foi afetado pela falta de um programador. E fatores externos acabaram atrapalhando todo mundo.
Já havíamos praticamente desistido de participar, quando, faltando 2 semanas para o término do concurso, conseguimos um grupo e tentamos fazer o jogo em 2 semanas.
Obviamente, só deu pra fazer uma fase e o jogo ficou muito bugado. Isso minou as chances de o jogo prosseguir no concurso, mas pelo menos deu pra tirar alguns screenshots que valessem a pena.

Neste projeto, fiz os assets de cenário. Os personagens foram feitos por Vilson Martins e a arte gráfica foi feita por Thais Amanda Matsufugi.

Uma pena que não tenha ido para frente, ainda estou disposto a terminá-lo.

Menu do jogo

Screenshot de gameplay

Estudo – Sci-fi Corridor

Velharia

Eu sempre quis fazer alguma coisa com tema SCI-FI, e um belo dia, resolvi fazer o clássico “corredor de ficção científica”.

Eu quis deixar um clima meio Alien e Tron (sim, coisas bem diferentes), que servisse para um jogo de suspense, algum lugar que o Darth Vader habitaria, haha.

Gostei da experiência, mas agora quero fazer outro (com outras referências e estilo) e testar no UDK.

Corredor sci-fi

Corredor sci-fi

Porta do corredor

Porta do corredor

Depois, pensei no quanto seria bacana se tivesse algum jogo de estratégia, com a câmera por cima, acabei gostando deste render:

Corredor visto de cima

Corredor visto de cima

TCC – Evil Lord: Clash & Wars

Velharia

A faculdade de Design de Games não foi fácil.

Se por um lado a grande quantidade de trabalhos era necessária pra testarmos o conhecimento prático, por outro lado, nunca dava brecha para nos dedicarmos melhor a 1 coisa só.
Muitas vezes acabei fazendo a parte de game design, roteiro, e até mesmo arte promocional, e no fim das contas, nunca saíam trabalhos com um nível de qualidade (visual) dignos de ir para um portfolio de arte 3D.
O TCC foi a grande chance de conseguir isso, porque mesmo ainda tendo que se preocupar com outras áreas, consegui uns 2/3 meses para fazer o level design e modelar e texturizar os cenários.

Tiramos 8,5 e pensamos seriamente em desenvolver um modo multiplayer para publicar no Steam, mas a ausência de um programador dedicado no grupo impediu que isso se concretizasse.

Aí vão alguns screenshots. Todos os elementos do cenário de todas as fases foram modelados e texturizados por mim. Por isso mesmo, não tive também tempo pra fazer concept e foi tudo direto no 3D.

Fase na neve

Fase na neve

Chalés da fase do campo e neve

Chalés da fase do campo e neve

Placas da cidade

Placas da cidade

Fase do deserto

Fase do deserto

Entrada da Fortaleza

Entrada da Fortaleza

Fase do campo

Fase do campo