Índice
- Automatizando fluxos de trabalho com Blueprints, C ++ e Python
- Por que o Unreal Engine é interessante
- Escrevendo nosso próprio script de limpeza de projeto automatizado usando Python
- Aprenda a automatizar e otimizar fluxos de trabalho com scripts no Udemy
Automatizando fluxos de trabalho com Blueprints, C ++ e Python
Todo trabalho possui tarefas e processos repetitivos que podem ser automatizados. Essas tarefas podem ocupar uma quantidade significativa de seu tempo.
Alguém com apenas conhecimento básico sobre scripts pode criar um script que reduza o tempo para executar essas tarefas no mínimo. A longo prazo, essa economia de tempo acumula-se em horas adicionais que podem ser usadas para um trabalho mais produtivo.
Aprender a automatizar as coisas, portanto, é um habilidade inestimável. Uma habilidade que pode ser adquirida em diferentes setores mais específicos e depois aplicada a outros setores mais gerais.
Especialmente considerando os tempos difíceis atuais, é essencial aprender uma nova habilidade que terá um impacto significativo em sua empregabilidade.
Neste artigo, queremos descrever a importância da automação ao trabalhar com software em tempo real como o Unreal Engine.
Por que o Unreal Engine é interessante
O Unreal Engine da Epic é um dos aplicativos 3D de jogos e em tempo real mais populares do mercado. É usado para a criação de conteúdo de entretenimento, como jogos e configurações interativas.
Disciplinas como realidade virtual e aumentada requerem o uso de processos sofisticados que, como qualquer outro pipeline, podem ser otimizados por meio da automação.
Ademais, o mercado de jogos e 3D em tempo real cresce continuamente, o que aumenta a demanda por talentos.
De acordo com um estudo realizado por Burning Glass Technologies, uma empresa de análise do mercado de trabalho, os salários médios dos desenvolvedores da Unreal aumentou 22% no ano passado, a salários para artistas, 51%.
Por que usar o Blueprints para fluxo de trabalho e até programação de jogos
Além da interface de programação geral em C ++, o Unreal Engine fornece um sistema de programação gráfica chamado Blueprints. Eles expõem toda a funcionalidade como código C ++, o que significa que tudo, incluindo os recursos do jogo, pode ser programado sem grandes inconvenientes de desempenho.
A interface gráfica nos permite compor rapidamente entidades em um fluxo para criar funcionalidade. Observando um exemplo que define o material para um ator de malha estática, podemos ver que o Blueprint é facilmente legível.
Por que usar C ++ para fluxo de trabalho e programação de jogos
A abordagem “nativa” da codificação para o mecanismo irreal é o C ++. É usado para criar lógica no jogo, simplificar a criação de níveis e fluxos de trabalho e melhorar o pipeline de desenvolvimento. É mais complexo e difícil aprender do que o Blueprints, mas pode adicionar um aumento adicional no tempo de execução e no desempenho.
Está vantagem de desempenho torna o idioma de escolha para operações essenciais de nível inferior, como renderização e física no desenvolvimento de jogos. Para desenvolvedores que já são proficientes em C ++, é uma adição conveniente poder automatizar processos sem aprender diretamente um idioma adicional.
Por que usar o Python para otimização do fluxo de trabalho
Comparado ao Blueprints ou C ++, o Python é um dos linguagens padrão de fato usadas para automatizar tarefas. É simples de aprender, compreensível e extremamente versátil, pois pode ser executado em praticamente qualquer plataforma sem esforço adicional.
A Epic lista o Python como uma das habilidades necessárias, por exemplo, para Data Pipeliners em seus Guia de campo do criador para carreiras emergentes em 3D interativo.
o O Unreal Engine tem suporte completo a scripts Python. Infelizmente, não é adequado para scripts em tempo real e no jogo, mas só pode ser usado para scripts do Unreal Editor. A simplicidade do Python, no entanto, o torna uma opção incrível para prototipagem rápida da automação de pipeline.
A Epic tenta promover o uso do Python usando o método documentação, Documentos da APIe até um webinar gravado sobre scripts Python para o Unreal Engine.
Escrevendo nosso próprio script de limpeza de projeto automatizado usando Python
Projetos maiores podem ficar confusos rapidamente. Ter um script em mãos que possa fazer uma limpeza examinando todos os ativos selecionados e movendo-os automaticamente para as pastas apropriadas nos ajuda a melhorar drasticamente nosso fluxo de trabalho.
O desenho esquemático abaixo explica a ideia por trás do script.
A partir de agora, a versão padrão do Python definida no Unreal é o Python 2.7. Se você deseja usar o Python 3, pode seguir o processo descrito aqui para mudar para o Python 3.
Para começar, primeiro precisamos importar a biblioteca irreal para o nosso escopo. Depois de fazer isso, podemos criar instâncias de classe das classes elementares. Por enquanto, precisamos apenas do EditorUtilityLibrary o que nos permite obter uma lista de todos os ativos selecionados.
Podemos obter o número de ativos selecionados usando o Python len() e use o método de log da Unreal para obter saída no log de depuração no Unreal Engine.
import unreal
# create unreal class instances
editor_util = unreal.EditorUtilityLibrary()
# get the selected assets
selected_assets = editor_util.get_selected_assets()
num_assets = len(selected_assets)
unreal.log(num_assets)O trecho de código acima imprimirá um único número no Debug Log. Para cada um dos ativos selecionados, agora queremos obter algumas informações, como o nome e a classe do ativo.
O irreal ObjectBase O objeto possui vários métodos auxiliares para obter o nome, a classe e outros atributos. Faremos uso do get_fname() e get_class() métodos.
for assets in selected_assets:
# get the class instance and the clear text name
asset_name = asset.get_fname()
asset_class = asset.get_class()
unreal.log("{} - {}".format(asset_name, asset_class))No entanto, isso nos dará apenas a definição da classe e não o nome de texto não criptografado da própria classe, que queremos usar para a criação da pasta.
Para obter o nome de exibição em vez da definição de classe, precisamos criar uma instância do SystemLibrary. Está get_class_display_name() O método pega uma definição de classe e retorna o nome da classe como String.
# create unreal class instances
editor_util = unreal.EditorUtilityLibrary()
system_lib = unreal.SystemLibrary()
...
for assets in selected_assets:
# get the class instance and the clear text name
asset_name = asset.get_fname()
asset_class = asset.get_class()
class_name = system_lib.get_class_display_name(asset_class)
unreal.log("Name: {} - Class: {}".format(asset_name, class_name))
Agora podemos ver algo como “Nome: NewMaterial – Class: Material” impresso em nosso log. Este é precisamente o tipo de informação que precisávamos.
A última etapa é “renomear” nossos ativos para um determinado local. Por exemplo, todo material será renomeado para "/Material/ que o moverá de acordo com as pastas.
Para “renomear” ativos, precisamos de uma classe adicional. o rename_loaded_asset() O método faz parte do EditorAssetLibrary, então precisamos criar uma instância dessa classe primeiro. Ademais, precisamos criar um novo local para o qual o ativo será realocado.
Para manter isso mais independente de plataforma, usaremos o os módulo e sua path.join() método.
Depois de criarmos o new_path variável, podemos usá-lo na chamada de método para rename_loaded_asset() realocar nosso ativo atual.
import os
import unreal
# create unreal class instances
editor_util = unreal.EditorUtilityLibrary()
system_lib = unreal.SystemLibrary()
editor_asset_lib = unreal.EditorAssetLibrary()
...
for assets in selected_assets:
# get the class instance and the clear text name
asset_name = asset.get_fname()
asset_class = asset.get_class()
class_name = system_lib.get_class_display_name(asset_class)
# assemble new path and relocate asset
new_path = os.path.join("/Game", class_name, asset_name)
editor_asset_lib.rename_loaded_asset(asset_name, new_path)
unreal.log("Moved {} to {}".format(asset_name, new_path))Executando este script no Unreal Engine, o log fornecerá uma mensagem: "Moved NewMaterial to /Game/Material/NewMaterial".
Observando nosso projeto, agora podemos ver que todos os ativos selecionados foram limpos em pastas nomeadas de acordo com suas classes.
Como você pode ver, a criação de um script básico é bastante simples. Obviamente, precisamos cuidar do tratamento de erros, registro adequado e uma interface amigável para ferramentas mais sofisticadas, mas mesmo scripts simples podem economizar muito tempo.
Mas vale a pena?
Para mostrar o quão grande é a demanda por automação neste setor, aqui está uma captura de tela do vendas mensais de uma ferramenta com funcionalidade contendo o script que criamos neste artigo.
Obviamente, é essencial entender as necessidades dos usuários e artistas que trabalham no Unreal Engine para saber quais tarefas são adequadas para automação.
Aprenda a automatizar e otimizar fluxos de trabalho com scripts no Udemy
Para ajudar a fechar a lacuna de recursos de script Unreal, criamos um curso abrangente sob demanda da Udemy para aprender a criar scripts do Unreal Engine Editor do zero.
Você pode usar o código promocional, AUTOMATEUNREAL20. Você pode obter o curso por apenas US $ 10 agora. São menos de três Frappuccinos da Starbucks!
Se você tiver alguma dúvida ou comentário, sinta-se à vontade para entrar em contato conosco no Twitter ou diretamente na seção de discussão do curso 🙂
