Skip to content

Instantly share code, notes, and snippets.

@gilzoide
Last active November 22, 2022 12:32
Show Gist options
  • Save gilzoide/bbf56aaff51a90e69d4dae055c4d2d9b to your computer and use it in GitHub Desktop.
Save gilzoide/bbf56aaff51a90e69d4dae055c4d2d9b to your computer and use it in GitHub Desktop.
Notas sobre Epic Online Services na Unity

A integração com Unity se dá por meio do SDK C#, que pode ser baixado diretamente do portal da Epic.

Como fazer funcionar na Unity pra builds Android/iOS:

  • É necessário remover ou ignorar a pasta Samples, pois eles definem classes C# com nomes duplicados.

  • Se estiver usando a Unity num computador macOS, é necessário comentar a linha #define EOS_DYNAMIC_BINDINGS no arquivo SDK/Source/Generated/Bindings.cs, pois a biblioteca nativa do macOS não foi compilada com suporte a carregamento dinâmico. Como os bindings dinâmicos já foram desligados, não precisamos fazer o Hook dinâmico no editor no Windows como recomenda a documentação.

  • As bibliotecas xaudio2_9redist.dll são para Windows e precisam ser configuradas de acordo, para não serem consideradas nas builds Android e iOS e quebrá-las.

  • O framework nativo do iOS precisa da flag Add to embedded binaries marcada, ou a aplicação não inicializa corretamente

  • É necessário escolher somente uma das versões da biblioteca nativa para Android e apagar as outras. Minha sugestão é utilizar o arquivo .aar ao invés dos arquivos .so diretamente. Num teste rápido, eu só consegui fazer a build com a versão “static-stdc++”, mas deve ser possível utilizar a versão “dynamic-stdc++” se linkar a libstdc++ na invocação do ndk. A diferença de tamanho nas bibliotecas nativas é bem pequena, então parece ok usar qualquer uma das versões.

  • Na build Android, é necessário importar a biblioteca nativa androidx.security:security-crypto:1.0.0. Minha sugestão é utilizar External Dependency Manager for Unity para essa inclusão. Exemplo de arquivo de configuração:

    <dependencies>
      <androidPackages>
        <androidPackage spec="androidx.security:security-crypto:1.0.0" />
      </androidPackages>
    </dependencies>
  • Na build Android, é necessário fazer uma inicialização nativa do SDK manualmente para que ele consiga utilizar o keychain do dispositivo. Referência: https://eoshelp.epicgames.com/s/question/0D54z00006ufJBNCA2/cant-get-createdeviceid-to-work-in-unity-android-c-sdk

Tamanho das builds

No Android, o EOS SDK aumentou em ~10MB por arquitetura o tamanho dos APKs gerados. Ou seja, o APK universal ARMv7 + ARM64 aumentou ~20MB.

No iOS, o pacote IPA aumentou em ~8MB e o app descomprimido ~20MB.

Outras notas:

  • O SDK C# é autogerado a partir do SDK C, então o uso é um tanto quanto baixo nível. Todos os métodos recebem ref structs como parâmetros, então tem que sempre ficar criando uma variável com a struct e depois passando via ref nas chamadas. Pelo menos os callbacks todos aceitam delegates de C# direto.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment