This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
O arquivo game.project contém todas as configurações globais do projeto. Ele deve permanecer na pasta raiz do projeto e deve se chamar game.project. A primeira coisa que a engine faz ao iniciar e lançar seu jogo é procurar esse arquivo.
Toda configuração no arquivo pertence a uma categoria. Quando você abre o arquivo, o Defold apresenta todas as configurações agrupadas por categoria.

As configurações em game.project geralmente são alteradas dentro do Defold, mas o arquivo também pode ser editado em qualquer editor de texto padrão. O arquivo segue o padrão de formato de arquivo INI e se parece com isto:
[category1]
setting1 = value
setting2 = value
[category2]
...
Um exemplo real é:
[bootstrap]
main_collection = /main/main.collectionc
o que significa que a configuração main_collection pertence à categoria bootstrap. Sempre que uma referência de arquivo é usada, como no exemplo acima, o caminho precisa receber um caractere ‘c’ no final, o que significa que você está referenciando a versão compilada do arquivo. Observe também que a pasta que contém game.project será a raiz do projeto, por isso há uma ‘/’ inicial no caminho da configuração.
É possível ler qualquer valor de game.project em tempo de execução usando sys.get_config_string(key), sys.get_config_number(key) e sys.get_config_int(key). Exemplos:
local title = sys.get_config_string("project.title")
local gravity_y = sys.get_config_number("physics.gravity_y")
A chave é uma combinação da categoria e do nome da configuração, separados por ponto, escrita em letras minúsculas com quaisquer espaços substituídos por underscores. Exemplos: o campo “Title” da categoria “Project” se torna project.title e o campo “Gravity Y” da categoria “Physics” se torna physics.gravity_y.
Abaixo estão todas as configurações disponíveis, organizadas por categoria.
O título da aplicação.
A versão da aplicação.
Nome do publisher.
Nome do desenvolvedor.
Controla quando a engine grava um arquivo de log. Opções:
Se mais de uma instância estiver sendo executada a partir do editor, o arquivo será chamado instance_2_log.txt, com 2 sendo o índice da instância. Se uma única instância estiver sendo executada, ou se estiver sendo executada a partir de um pacote, o arquivo será chamado log.txt. O local do arquivo de log será um dos seguintes caminhos (tentados em ordem):
NSDocumentDirectoryContext.getExternalFilesDir()NSApplicationSupportDirectoryCSIDL_APPDATA (por exemplo, C:\Users\<username>\AppData\Roaming)Context.getFilesDir()HOMEEspecifica o nível mínimo de log para o sistema de logging. Somente logs nesse nível ou acima dele serão mostrados.
Habilita compressão de arquivos ao empacotar. Observe que isso atualmente se aplica a todas as plataformas exceto Android, onde o apk já contém todos os dados comprimidos.
Uma lista de URLs para os Library URLs do projeto. Consulte o manual de Bibliotecas para mais informações.
custom_resources
Custom resources são incluídos no arquivo principal do jogo usando o campo Custom Resources em game.project.
O campo Custom Resources deve conter uma lista separada por vírgulas de recursos que serão incluídos no arquivo principal do jogo. Se diretórios forem especificados, todos os arquivos e diretórios dentro desse diretório serão incluídos recursivamente. Você pode ler os arquivos usando sys.load_resource().
O carregamento de recursos personalizados é abordado em mais detalhes no manual de Acesso a Arquivos.
bundle_resources
Bundle resources são arquivos e pastas adicionais localizados como parte do bundle da sua aplicação usando o campo Bundle Resources em game.project.
O campo Bundle Resources deve conter uma lista separada por vírgulas de diretórios com arquivos e pastas de recursos que devem ser copiados como estão para o pacote resultante ao empacotar. Os diretórios devem ser especificados com um caminho absoluto a partir da raiz do projeto, por exemplo /res. O diretório de recursos deve conter subpastas nomeadas por platform, ou architecture-platform.
As plataformas suportadas são ios, android, osx, win32, linux, web, switch. Uma subpasta chamada common também é permitida, contendo arquivos de recursos comuns a todas as plataformas. Exemplo:
res
├── win32
│ └── mywin32file.txt
├── common
│ └── mycommonfile.txt
└── android
├── myandroidfile.txt
└── res
└── xml
└── filepaths.xml
Você pode usar sys.get_application_path() para obter o caminho onde a aplicação está armazenada. Use esse caminho base da aplicação para criar o caminho absoluto final para os arquivos que você precisa acessar. Depois de ter o caminho absoluto desses arquivos, você pode usar as funções io.* e os.* para acessá-los.
O carregamento de recursos de pacote é abordado em mais detalhes no manual de Acesso a Arquivos.
bundle_exclude_resources
Uma lista separada por vírgulas de recursos que não devem ser incluídos no pacote. Ou seja, eles são removidos do resultado da coleta da etapa bundle_resources.
Referência de arquivo da coleção a usar para iniciar a aplicação, /logic/main.collection por padrão.
Qual arquivo de configuração de renderização usar, que define o pipeline de renderização, /builtins/render/default.render por padrão.
Uma lista de diretórios separados por espaço que devem ser compartilhados a partir do seu projeto via compartilhamento de biblioteca. Consulte o manual de Bibliotecas para mais informações.
Marque para compartilhar um único estado Lua entre todos os tipos de script.
Permite que a engine continue em execução enquanto a janela da aplicação está iconificada (somente plataformas desktop).
A frequência de atualização da função de ciclo de vida fixed_update(self, dt). Em Hertz.
Se o passo de tempo ficar grande demais durante um único frame, ele será limitado a este valor máximo. Em segundos.
A largura em pixels da janela da aplicação.
A altura em pixels da janela da aplicação.
Cria um back buffer high dpi em displays que oferecem suporte a isso. Normalmente o jogo será renderizado no dobro da resolução definida nas configurações Width e Height, que ainda serão a resolução lógica usada em scripts e propriedades.
Quantas amostras usar para anti-aliasing por superamostragem. Isso define a hint de janela GLFW_FSAA_SAMPLES. Um valor de 0 significa que anti-aliasing está desativado.
Marque se a aplicação deve iniciar em tela cheia. Se desmarcado, a aplicação roda em janela.
A taxa de quadros desejada em Hertz. Defina como 0 para taxa de quadros variável. Um valor maior que 0 resultará em uma taxa de quadros fixa, limitada em tempo de execução em relação à taxa de quadros real (o que significa que você não pode atualizar o loop do jogo duas vezes em um frame da engine). Use sys.set_update_frequency(hz) para alterar esse valor em tempo de execução. Essa configuração também funciona em builds headless.
Este valor inteiro controla como a aplicação lida com vsync. 0 desabilita vsync, e o valor padrão é 1. Ao usar um adaptador OpenGL, esse valor define o número de frames entre trocas de buffer da janela. Para Vulkan, não há conceito integrado de swap interval; em vez disso, o valor controla se vsync deve ser habilitado ou não.
Depende do vsync de hardware para o timing dos frames. Pode ser sobrescrito dependendo do driver gráfico e das especificidades da plataforma. Para o comportamento obsoleto de ‘variable_dt’, desmarque esta configuração e defina o limite de frames como 0.
Especifica qual arquivo de perfis de exibição usar, /builtins/render/default.display_profilesc por padrão. Saiba mais no manual de Layouts de GUI.
Marque se o app deve alternar dinamicamente entre retrato e paisagem na rotação do dispositivo. Observe que o aplicativo de desenvolvimento atualmente não respeita essa configuração.
Emite informações da GPU no console durante a inicialização.
Canal vermelho da cor de limpeza, usado pelo script de renderização e quando a janela é criada.
Canal verde da cor de limpeza, usado pelo script de renderização e quando a janela é criada.
Canal azul da cor de limpeza, usado pelo script de renderização e quando a janela é criada.
Canal alfa da cor de limpeza, usado pelo script de renderização e quando a janela é criada.
Usa geração de fonte em tempo de execução.
Número máximo de objetos de colisão.
Qual tipo de física usar, 2D ou 3D.
Gravidade do mundo ao longo do eixo x. Em metros por segundo.
Gravidade do mundo ao longo do eixo y. Em metros por segundo.
Gravidade do mundo ao longo do eixo z. Em metros por segundo.
Marque se a física deve ser visualizada para depuração.
Valor do componente alfa para física visualizada, 0–1.
Número máximo de mundos de física simultâneos, 4 por padrão. Se você carregar mais de 4 mundos simultaneamente por meio de proxies de coleção, precisa aumentar esse valor. Esteja ciente de que cada mundo de física aloca uma quantidade considerável de memória.
Diz à engine de física como escalar os mundos de física em relação ao mundo do jogo para precisão numérica, 0.01–1.0. Se o valor for definido como 0.02, isso significa que a engine de física verá 50 unidades como 1 metro ($1 / 0.02$).
Marque se a engine de física deve aplicar a transformação de um objeto de jogo a quaisquer componentes de objeto de colisão anexados. Isso pode ser usado para mover, escalar e rotacionar formas de colisão, mesmo as dinâmicas.
Marque se a engine de física deve usar atualizações fixas e independentes da taxa de quadros. Use esta configuração em combinação com a função de ciclo de vida fixed_update(self, dt) e a configuração de projeto engine.fixed_update_frequency para interagir com a engine de física em intervalos regulares. Para novos projetos, a configuração recomendada é true.
O tamanho para desenhar objetos unitários em física, como tríades e normais.
Quantas colisões serão relatadas de volta aos scripts.
Quantos pontos de contato serão relatados de volta aos scripts.
Ignora impulsos de contato com valores menores que esta configuração.
O número máximo de requisições de ray cast 2d por frame.
O número máximo de requisições de ray cast 3d por frame.
O número máximo de gatilhos de física sobrepostos.
Velocidade mínima que resultará em colisões elásticas.
Número máximo de passos na simulação ao usar timestep fixo (somente 3D).
Especifica qual filtragem usar para filtragem de minificação.
Especifica qual filtragem usar para filtragem de magnificação.
O número máximo de chamadas de renderização.
O número de caracteres pré-alocados no buffer de renderização de texto, isto é, o número de caracteres que podem ser exibidos a cada frame.
O número máximo de batches de texto que podem ser exibidos a cada frame.
O número máximo de vértices de depuração. Usado para renderização de formas de física, entre outras coisas.
O arquivo de perfis de textura a usar para este projeto, /builtins/graphics/default.texture_profiles por padrão.
Verifica o valor de retorno após cada chamada gráfica e relata quaisquer erros no log.
Hint de versão de contexto OpenGL. Se uma versão específica for selecionada, ela será usada como a versão mínima exigida (não se aplica ao OpenGL ES).
Define a hint de perfil OpenGL ‘core’ ao criar o contexto. O core profile remove todos os recursos obsoletos do OpenGL, como renderização em modo imediato. Não se aplica ao OpenGL ES.
Não compila shaders para dispositivos executando OpenGLES 2.0 / WebGL 1.0.
Segundos a aguardar antes que uma entrada mantida pressionada comece a se repetir.
Segundos a aguardar entre cada repetição de uma entrada mantida pressionada.
Referência de arquivo do arquivo de configuração de gamepads, que mapeia sinais de gamepad para o SO, /builtins/input/default.gamepads por padrão.
Referência de arquivo do arquivo de configuração de entrada, que mapeia entradas de hardware para ações, /input/game.input_binding por padrão.
Marque para fazer a engine receber eventos de entrada do acelerômetro a cada frame. Desabilitar a entrada do acelerômetro pode trazer algum ganho de desempenho.
Se marcado, um cache HTTP é habilitado para carregar recursos mais rapidamente pela rede na engine em execução no dispositivo.
Onde encontrar os dados de build do projeto, em formato URI.
O número máximo de recursos que podem ser carregados ao mesmo tempo.
O timeout HTTP em segundos. Defina como 0 para desabilitar timeout.
O número de worker threads para o serviço HTTP.
Marque para habilitar o cache HTTP para requisições de rede (usando http.request()). O cache HTTP armazenará a resposta associada a uma requisição e reutilizará a resposta armazenada em requisições posteriores. O cache HTTP oferece suporte aos cabeçalhos de resposta HTTP ETag e Cache-Control: max-age.
Arquivo contendo certificados raiz SSL a usar ao verificar a cadeia de certificados durante handshakes SSL.
Número máximo de instâncias de objetos de jogo em uma coleção, 1024 por padrão. (Veja informações sobre otimizações de contagem máxima de componentes).
Número máximo de objetos de jogo na pilha de entrada.
Ganho global (volume), 0–1.
Se habilitado, o ganho é linear. Se desabilitado, usa uma curva exponencial.
Número máximo de recursos de som, isto é, o número de arquivos de som únicos em tempo de execução.
(Atualmente não usado) Número máximo de buffers de som simultâneos.
(Atualmente não usado) Número máximo de sons tocando simultaneamente.
Número máximo de instâncias de som simultâneas, isto é, sons reais reproduzidos ao mesmo tempo.
Número máximo de componentes de som por coleção.
Número de amostras usadas para cada atualização de áudio. 0 significa automático (1024 para 48 kHz, 768 para 44,1 kHz).
Se marcado, o sistema de som usará threads para reprodução de som para reduzir o risco de engasgos quando a thread principal estiver sob carga elevada.
Se marcado, o sistema de som usará streaming para carregar arquivos-fonte.
O tamanho máximo do cache de chunks de som contendo todos os chunks. 2097152 bytes por padrão.
Esse número deve ser maior que o número de arquivos de som carregados multiplicado pelo tamanho do chunk de stream.
Caso contrário, você corre o risco de expulsar novos chunks a cada frame.
O tamanho em bytes de cada chunk transmitido por streaming.
Determina o tamanho em bytes do chunk inicial para arquivos de som lidos do archive.
Número máximo de sprites por coleção. (Veja informações sobre otimizações de contagem máxima de componentes).
Marque para permitir que sprites apareçam desalinhados em relação aos pixels.
Número máximo de tile maps por coleção. (Veja informações sobre otimizações de contagem máxima de componentes).
Número máximo de tiles visíveis simultâneos por coleção.
Número máximo de componentes de modelo spine. (Veja informações sobre otimizações de contagem máxima de componentes).
Número máximo de componentes de mesh por coleção. (Veja informações sobre otimizações de contagem máxima de componentes).
Número máximo de componentes de modelo por coleção. (Veja informações sobre otimizações de contagem máxima de componentes).
Divide meshes com mais de 65536 vértices em novas meshes.
Largura máxima da textura de matriz de ossos. Apenas o tamanho necessário para animações é usado, arredondado para a potência de dois mais próxima.
Altura máxima da textura de matriz de ossos. Apenas o tamanho necessário para animações é usado, arredondado para a potência de dois mais próxima.
Número máximo de componentes GUI. (Veja informações sobre otimizações de contagem máxima de componentes).
O número máximo de partículas simultâneas na GUI.
O número máximo de animações ativas na gui.
Número máximo de rótulos. (Veja informações sobre otimizações de contagem máxima de componentes).
Marque para permitir que rótulos apareçam desalinhados em relação aos pixels.
O número máximo de emissores simultâneos. (Veja informações sobre otimizações de contagem máxima de componentes).
O número máximo de partículas simultâneas.
Número de iterações de velocidade para o solver de física Box2D 2.2.
Número de iterações de posição para o solver de física Box2D 2.2.
Número de subpassos para o solver de física Box2D 3.x.
Número máximo de proxies de coleção. (Veja informações sobre otimizações de contagem máxima de componentes).
Número máximo de fábricas de coleção. (Veja informações sobre otimizações de contagem máxima de componentes).
Número máximo de fábricas de objetos de jogo. (Veja informações sobre otimizações de contagem máxima de componentes).
Arquivo de imagem (.png) a usar como ícone da aplicação nas dimensões de largura e altura fornecidas W × H.
Arquivo Storyboard (.storyboard). Saiba mais sobre como criar um no manual de iOS.
O arquivo de asset de ícones (.car) contendo ícones do app.
(iOS 6 e anteriores) Marque se seus ícones são pré-renderizados. Se isso estiver desmarcado, os ícones receberão automaticamente um destaque brilhante.
O bundle identifier permite que o iOS reconheça quaisquer atualizações do seu app. Seu bundle ID deve ser registrado na Apple e ser único para seu app. Você não pode usar o mesmo identificador para apps iOS e macOS. Deve consistir em dois ou mais segmentos separados por ponto. Cada segmento deve começar com uma letra. Cada segmento deve consistir apenas em letras alfanuméricas, underscore ou hífen (-) (veja CFBundleIdentifier)
O nome curto do bundle (15 caracteres) (veja CFBundleName).
A versão do bundle, seja um número ou x.y.z. (veja CFBundleVersion)
Se especificado, usa este arquivo info.plist ao empacotar seu app.
O Apple Privacy Manifest da aplicação. O campo usará /builtins/manifests/ios/PrivacyInfo.xcprivacy como padrão.
Se especificado, os entitlements no provisioning profile fornecido (.entitlements, .xcent, .plist) serão mesclados com os entitlements do provisioning profile fornecido ao empacotar a aplicação.
O idioma usado se a aplicação não tiver o idioma preferido do usuário na lista Localizations (veja CFBundleDevelopmentRegion). Use o padrão ISO 639-1 de duas letras se o idioma preferido estiver disponível ali, ou o ISO 639-2 de três letras.
Este campo contém strings separadas por vírgula que identificam o nome do idioma ou designador ISO de idioma das localizações suportadas (veja CFBundleLocalizations).
Arquivo de imagem (.png) a usar como ícone da aplicação nas dimensões de largura e altura fornecidas W × H.
Arquivos de imagem (.png) a serem usados como ícone personalizado de notificação push no Android. Os ícones serão usados automaticamente para notificações push locais e remotas. Se não definido, o ícone da aplicação será usado por padrão.
Especifica qual campo JSON do payload deve ser usado como título da notificação. Deixar esta configuração vazia faz com que os pushes usem o nome da aplicação como título por padrão.
Especifica qual campo JSON do payload deve ser usado como texto da notificação. Se deixado vazio, o texto no campo alert é usado, assim como no iOS.
Um valor inteiro que indica a versão do app. Aumente o valor a cada atualização subsequente.
O API Level mínimo necessário para a aplicação executar (android:minSdkVersion).
O API Level que a aplicação tem como alvo (android:targetSdkVersion).
Identificador do pacote. Deve consistir em dois ou mais segmentos separados por ponto. Cada segmento deve começar com uma letra. Cada segmento deve consistir apenas em letras alfanuméricas ou no caractere underscore.
Google Cloud Messaging Sender Id. Defina isto como a string atribuída pelo Google para habilitar notificações push.
Firebase Cloud Messaging Application Id.
Se definido, usa o arquivo XML de manifesto Android especificado ao empacotar.
Especifica qual loja usar. As opções válidas são Amazon e GooglePlay. Consulte extension-iap para mais informações.
Especifica qual método usar para obter entrada de teclado em dispositivos Android. As opções válidas são KeyEvent (método antigo) e HiddenInputField (novo).
Se definido, oculta as barras de navegação e status e permite que seu app capture todos os eventos de toque na tela.
Estende até o recorte da tela.
Se a aplicação pode ou não ser depurada usando ferramentas como GAPID ou Android Studio. Isso definirá a flag android:debuggable no manifesto Android (documentação oficial).
Arquivo ProGuard personalizado para ajudar a remover classes Java redundantes do APK final.
Especifica se o instalador do pacote extrai bibliotecas nativas do APK para o sistema de arquivos. Se definido como false, suas bibliotecas nativas são armazenadas sem compressão no APK. Embora seu APK possa ficar maior, sua aplicação carrega mais rápido porque as bibliotecas são carregadas diretamente do APK em tempo de execução. Isso definirá a flag android:extractNativeLibs no Android Manifest (documentação oficial).
Arquivo de ícone do bundle (.icns) a usar como ícone da aplicação no macOS.
Se definido, usa o arquivo info.plist especificado ao empacotar.
O Apple Privacy Manifest da aplicação. O campo usará /builtins/manifests/osx/PrivacyInfo.xcprivacy como padrão.
O bundle identifier permite que o macOS reconheça atualizações do seu app. Seu bundle ID deve ser registrado na Apple e ser único para seu app. Você não pode usar o mesmo identificador para apps iOS e macOS. Deve consistir em dois ou mais segmentos separados por ponto. Cada segmento deve começar com uma letra. Cada segmento deve consistir apenas em letras alfanuméricas, underscore ou hífen (-).
O idioma usado se a aplicação não tiver o idioma preferido do usuário na lista Localizations (veja CFBundleDevelopmentRegion). Use o padrão ISO 639-1 de duas letras se o idioma preferido estiver disponível ali, ou o ISO 639-2 de três letras.
Este campo contém strings separadas por vírgula que identificam o nome do idioma ou designador ISO de idioma das localizações suportadas (veja CFBundleLocalizations).
Arquivo de imagem (.ico) a usar como ícone da aplicação no Windows. Leia mais sobre como criar um arquivo .ico no manual de Windows.
Consulte o manual da plataforma HTML5 para mais informações sobre muitas dessas opções.
Tamanho do heap em megabytes para o Emscripten usar.
Usa o arquivo HTML de template especificado ao empacotar. Por padrão, /builtins/manifests/web/engine_template.html.
Usa o arquivo CSS de tema especificado ao empacotar. Por padrão, /builtins/manifests/web/light_theme.css.
Se definido, usa a imagem splash especificada na inicialização ao empacotar, em vez do logo Defold.
Ao empacotar para HTML5, os dados do jogo são divididos em um ou mais arquivos de dados de archive. Quando a engine inicia o jogo, esses arquivos de archive são lidos para a memória. Use esta configuração para especificar a localização dos dados.
Sufixo a ser anexado aos arquivos de archive. Útil, por exemplo, para forçar conteúdo sem cache de uma CDN (?version2, por exemplo).
Lista de argumentos que serão passados à engine.
Habilita streaming do arquivo wasm (mais rápido e usa menos memória, mas exige o tipo MIME application/wasm).
Habilita Fullscreen Button no arquivo index.html.
Habilita o link Made With Defold no arquivo index.html.
Quando habilitada, esta opção imprimirá informações sobre a engine e a versão da engine no console do navegador (usando console.log()) quando a engine iniciar.
Especifica qual método usar para escalar o canvas do jogo.
O número de tentativas de baixar um arquivo quando a engine inicia (veja Retry Time).
O número de segundos a aguardar entre tentativas de baixar um arquivo quando o download falha (veja Retry Count).
Marque se você quer que o contexto gráfico tenha um fundo transparente.
Marque para finalizar automaticamente transações IAP. Se desmarcado, você precisa chamar explicitamente iap.finish() após uma transação bem-sucedida.
Arquivo de recurso de configurações Liveupdate a usar durante o empacotamento.
Habilita montagem automática de recursos montados anteriormente quando a aplicação inicia.
Se definido, usa o app manifest para personalizar a build da engine. Isso permite remover partes não usadas da engine para diminuir o tamanho final do binário. Aprenda como excluir recursos não usados no manual de manifesto da aplicação.
Habilita o perfilador dentro do jogo.
Se marcado, habilita profiling de CPU em versões release das builds. Normalmente, você só pode acessar informações de profiling em builds de depuração.
Número de milissegundos a dormir entre atualizações do servidor.
Habilita a timeline de desempenho no navegador (somente HTML5).
Quando a engine inicia, é possível fornecer valores de configuração pela linha de comando que sobrescrevem as configurações de game.project:
# Especifica uma coleção bootstrap
$ dmengine --config=bootstrap.main_collection=/my.collectionc
# Define dois valores de configuração personalizados
$ dmengine --config=test.my_value=4711 --config=test2.my_value2=foobar
Valores personalizados podem, assim como qualquer outro valor de configuração, ser lidos com sys.get_config_string() ou sys.get_config_number():
local my_value = sys.get_config_number("test.my_value")
local my_value2 = sys.get_config_string("test.my_value2")
O arquivo de configurações game.project contém muitos valores que especificam o número máximo de determinado recurso que pode existir ao mesmo tempo, geralmente contado por coleção carregada (também chamada de mundo). A engine Defold usará esses valores máximos para pré-alocar memória para essa quantidade, evitando alocações dinâmicas e fragmentação de memória enquanto o jogo está em execução.
As estruturas de dados do Defold usadas para representar componentes e outros recursos são otimizadas para usar o mínimo de memória possível, mas ainda é preciso tomar cuidado ao definir os valores para evitar alocar mais memória do que realmente é necessário.
Para otimizar ainda mais o uso de memória, o processo de build do Defold analisará o conteúdo do jogo e substituirá as contagens máximas se for possível saber com certeza a quantidade exata:
É possível definir configurações personalizadas para o projeto principal ou para uma extensão nativa. Configurações personalizadas para o projeto principal devem ser definidas em um arquivo game.properties na raiz do projeto. Para uma extensão nativa, elas devem ser definidas em um arquivo ext.properties ao lado do arquivo ext.manifest.
O arquivo de configurações usa o mesmo formato INI de game.project, e atributos de propriedade são definidos usando notação com ponto e um sufixo:
[my_category]
my_property.private = 1
...
O meta arquivo padrão que é sempre aplicado está disponível aqui
Os seguintes atributos estão disponíveis atualmente:
[my_extension]
// `type` - usado para analisar a string de valor
my_property.type = string // um dos seguintes valores: bool, string, number, integer, string_array, resource
// `help` - usado como dica de ajuda no editor (não usado por enquanto)
my_property.help = string
// `default` - valor usado como padrão se o usuário não definiu valor manualmente
my_property.default = string
// `private` - valor privado usado durante o processo de empacotamento, mas removido do próprio pacote
my_property.private = 1 // valor booleano 1 ou 0
// `label` - rótulo de entrada no editor
my_property.label = My Awesome Property
// `minimum` e/ou `maximum` - faixa válida para propriedades numéricas, validada na UI do editor
my_property.minimum = 0
my_property.maximum = 255
// `options` - opções de menu suspenso para a UI do editor, pares valor[:rótulo] separados por vírgula
my_property.options = android: Android, ios: iOS
// apenas tipo `resource`:
my_property.filter = jpg,png // extensões de arquivo permitidas para o diálogo seletor de recursos
my_property.preserve-extension = 1 // usa a extensão original do recurso em vez de uma gerada
// depreciação
my_property.deprecated = 1 // marca a propriedade como obsoleta
my_property.severity-default = warning // se a propriedade obsoleta for especificada, mas definida para um valor padrão
my_property.severity-override = error // se a propriedade obsoleta for especificada e definida para um valor não padrão
Além disso, você pode definir os seguintes atributos em uma categoria de configuração:
[my_extension]
// `group` - grupo de categoria de game.project, por exemplo, Main, Platforms, Components, Runtime, Distribution
group = Runtime
// `title` - título exibido da categoria
title = My Awesome Extension
// `help` - ajuda exibida da categoria
help = Settings for My Awesome Extension
No momento, meta properties são usadas apenas em bob.jar ao empacotar a aplicação, mas futuramente serão analisadas pelo editor e representadas no visualizador de game.project.