Desenvolvendo e testando aplicações do Unity para iOS

Com a distribuição da versão básica do Unity para iOS de graça (lembrando que as versões de iOS e Android estão de graça até dia 8/4), eu resolvi fazer uns testes para ver como o Unity funciona nesta plataforma.

De cara, a decepção foi grande com a trabalheira que é configurar tudo pra fazer um simples Hello World rodar, mesmo no emulador. Comparado com o que eu fazia antes, que é desenvolver e testar direto pelo Xcode, essa complicação toda atrapalha, mas dá pra entender seus motivos, já que o iOS é uma plataforma bem fechada e o Unity meio que tem que dar uma volta pra fazer tudo funcionar (enquanto no Windows, por exemplo, toda essa parte fica transparente na hora de compilar o projeto).

Enfim, meu primeiro objetivo era colocar uma cena vazia rodando no emulador e em um iPod que eu uso aqui para testes. Aí já aparece uma questão importante: antes de gerar um build pelo Unity, é preciso configurar em Player Settings onde este build irá rodar, isto é, se ele vai ser executado no emulador do Xcode ou num dispositivo real. Essa configuração é simples, basta escolher o tipo em “SDK Version”, mas é bem importante pra evitar dores de cabeça, já que um projeto feito pro emulador não compila pro dispositivo e vice-versa.

Diferente de quando estamos desenvolvendo pra Mac ou Windows, esse build do Unity não gera realmente um executável. Ele compila uns arquivos do Unity (gera um pacote com os assets, se não me engano) e cria um projeto para ser aberto no Xcode. Aí sim, a partir do Xcode podemos compilar e fazer debug no emulador ou no iPod, iPhone ou iPad.

Já deu pra perceber que é inviável ficar gerando builds e compilando no Xcode a cada novo teste, não é? Mas, a principio, essa é a única forma de testar o programa no emulador ou em um dispositivo, algo vai ter que ser feito a todo momento por causa do input diferenciado da plataforma (salvo casos onde inputs de mouse e teclado podem ser mapeados posteriormente pra input de toque e acelerômetro). Pra facilitar, o pessoal do Unity lançou o Unity Remote, que nada mais é que um aplicativo rodando no iOS que se comunica com o Unity através de uma rede wifi ou pelo cabo USB. A saída gráfica da aba “Game” do Unity é jogada para o dispositivo e os inputs realizados no dispositivo são enviados de volta para o Unity.

É claro que com esta solução não dá pra ter uma noção exata do desempenho do programa porque ele ainda está rodando no Mac, mas quebra um galho enorme pra fazer todo o tratamento do input. Os testes no aparelho e eventuais otimizações vão mesmo ter que passar pelo caminho tortuoso descrito acima.

Pra fechar, resolvi fazer uma demo com um cubo que tem um rigidbody e um script que aplica uma força neste corpo quando a tela é tocada, justamente pra testar o input através do Unity Remote e do aplicativo rodando no iPod. Os métodos de input são descritos aqui e o que eu fiz foi basicamente aplicar uma força para cima a cada vez que a tela for tocada. O código (em C#) ficou assim:

public class InputTest : MonoBehaviour
{
    void Update ()
    {
        foreach (Touch touch in Input.touches)
        {
            if (touch.phase == TouchPhase.Began)
            {
                rigidbody.AddForce(Vector3.up * 500);
            }
        }
    }
}

O projeto é bem básico, mas estou anexando ele no post de qualquer forma para o caso de alguém se interessar. Inclui só a parte do Unity e não coloquei nada do projeto gerado para o Xcode por dois motivos: eu não tenho certeza, mas é possível que o Unity adicione alguma informação de licença e do perfil de desenvolvimento no projeto que faria com que ele não funcionasse diretamente em outra máquina e, mais importante, o projeto do Xcode ficou com mais de 300MB, enquanto este do Unity tem uns poucos KB. O aqui para download está aqui.

Bookmark the permalink.

Comments are closed