Tudo sobre GameDev

Plugins Unreal Engine

Tabela de conteúdo

Dando continuidade a postagem anterior sobre módulos, desta vez gostaria de abordar a criação de plugins na Unreal Engine.

 

Diferença entre plugins e módulos

Um plugin pode ter vários módulos internos, além de poder possuir uma pasta de conteúdo onde você poderá incluir por exemplo, blueprints, texturas, vídeos, imagens, mapas e etc.

Eles podem ser compartilhados e reutilizados com facilidade.

Pessoalmente, eu gosto de usar plugins como bibliotecas de funcionalidades. Sempre que preciso de algo que vou utilizar regularmente em diversos projetos, eu o faço em forma de plugin. Assim não preciso reescrever meu código quando voltar a precisar destas funcionalidades.

Plugins de projeto Vs. Plugins de engine

Plugins de projeto são instalados na pasta Plugins de nosso projeto e só estarão disponíveis neste projeto em particular. Sempre que você compilar seu projeto, quaisquer Plugins que tenham código-fonte disponível também serão compilados como uma dependência do seu jogo.

Já os plugins a nível de engine estarão disponíveis em qualquer projeto e são instalados em: Pasta de instalação da Unreal\Engine\Plugins. Eles também precisam ser pré-compilados e são uma ótima oportunidade para adicionar ou modificar alguma funcionalidade na engine sem precisar modificar o seu código-fonte.

Criando um Plugin utilizando o assistente

Felizmente, a Unreal possui um assistente que facilita a criação de nossos plugins.

Em seu projeto, clieque em Edit > Plugins e em seguida, no botão New Plugin:

Uma tela de configuração simples será exibida. Ela é auto descritiva, então, não entraremos em detalhes aqui.

Clique em Create Plugin e pronto, seu plugin estará criado. Você pode visualizá-lo na sessão Other na aba plugins.

Criando Plugins na Unreal Engine

Ao clicar em Edit, você poderá editar propriedades adicionais do plugin. Elas são auto descritivas,  mas devo frisar aqui, que também podemos configurar as dependências de outros plugins, se este é uma versão beta e se ele terá uma pasta de conteúdo.

Criando Plugins na Unreal Engine
Clique na imagem para ampliar.

Depois de o plugin criado e compilado, se você marcou a opção Can Contain Content, notará uma pasta NomeDoSeuPlugin Content no navegador de conteúdo. Esta é a pasta que poderá conter Blueprints, mapas e etc.

Criando Plugins na Unreal Engine

Olhando um pouco mais de perto

A estrutura de um plugin

Seguindo o nosso exemplo, se olhar-mos para a pasta do plugin recém-criado, teremos uma estrutura parecida com a da imagem ao lado. Abaixo uma breve descrição sobre elas.

  • Binaries: Conterá os binários do plugin quando ele for compilado para distribuição.
  • Content: Como visto anteriormente, esta pasta conterá os ativos deste plugin.
  • Intermediate: Os arquivos de compilação temporários estarão aqui.
  • Resources: Conterá a imagem responsável pelo ícone do plugin.
  • Source: Conterá o código dos módulos de nosso plugin. É exatamente a mesma estrutura que usamos quando criamos nossos módulos de jogo.
Estrutura de pastas do plugin.
O descritor do Plugin
				
					{
	"FileVersion": 3,
	"Version": 1,
	"VersionName": "1.0",
	"FriendlyName": "MeuPrimeiroPlugin",
	"Description": "Plugin de testes",
	"Category": "Other",
	"CreatedBy": "Renan Fernandes",
	"CreatedByURL": "https://artplayergames.com",
	"DocsURL": "",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": true,
	"IsBetaVersion": false,
	"IsExperimentalVersion": false,
	"Installed": false,
	"Modules": [
		{
			"Name": "MeuPrimeiroPlugin",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		}
	]
}
				
			

O descritor do Plugin é um arquivo com o nome do seu plugin e com a extensão .uplugin . No nosso caso:  MeuPrimeiroPlugin.uplugin. Ele contém as configurações básicas incluindo as dependências de módulos. 

No exemplo ao lado, o descritor do nosso plugin.

Compilando um plugin para distribuição

Como vimos acima, um plugin de projeto tem seu código compilado juntamente com o jogo, mas em plugins a nível de engine ele precisa ser pré-compilado. Além disso, você pode querer distribuir os seus plugins sem necessariamente distribuir o código fonte.

A maneira recomendada para compilarmos o código do nosso plugin é utilizando a ferramenta de automação da Unreal. Para fazer isso no windows, execute o arquivo RunUAT.bat que fica localizado em [Pasta de instalação da Unreal/Engine/Build/BatchFiles] e a maneira de utilizá-lo é semelhante a esta:

				
					RunUAT.bat BuildPlugin -Plugin=[Pasta/Do/Plugin/Plugin.uplugin] -Package=[Diretorio/de/saída] -VS2019
				
			

Abaixo, de maneira prática como utilizei em minha máquina:

				
					RunUAT.bat BuildPlugin -Plugin="D:/Projetos Unreal/Blog Projects/Project_01/Plugins/MeuPrimeiroPlugin/MeuPrimeiroPlugin.uplugin" -Package=C:/Users/Renan/Desktop/PluginBuild/MeuPrimeiroPlugin -VS2019
				
			

Algumas informações são necessárias:

  • No caminho para a pasta do plugin utilizei aspas, pois umas das pastas do caminho possui espaços. Caso contrário, eu receberia erros de path. Isso não seria necessário se não houvessem espaços nos nomes das pastas.
  • O último parâmetro (-VS2019) refere-se a versão do Visual Studio instalada em minha máquina. Se não especificarmos a versão do VS, o compilador irá tentar utilizar o VS 2017 (pelo menos até a UE 4.27.2).
FilterPlugin.ini

Depois de compilado, você poderá notar que no diretório /Config do plugin de origem um arquivo chamado FilterPlugin.ini foi gerado. Este arquivo pode ser utilizado para listar os arquivos adicionais que deverão ser empacotados com o seu plugin. O arquivo possui exemplos de sintaxe e é facilmente compreensível.

Conclusão

Além modularizar nosso código e facilitar a distribuição e reutilização de funcionalidades, os plugins também fornecem uma maneira de reduzir o tempo de compilação do projeto quando utilizamos código que não é alterado com frequência em um plugin com somente binários.

Sucesso!

Deixe uma resposta