Přesun obsahu a funkcionality mezi Unreal Engine projekty

Datum publikace

Jistě to znáte - pracujete na projektu, když zjistíte, že do něj potřebujete implementovat funkcionalitu, kterou jste již někdy dříve vytvořili v rámci jiného projektu. Jak na to?

Migrate funkce

Jde-li o obsahové věci a čistý Blueprint kód, přenos do dalších projektů je jednoduchý - lze použít funkci na kliknutí pravým tlačítkem myši na assetu v "Content" okně “Asset Actions → Migrate”.


Co ovšem dělat, když vaše Blueprint funkce je Blueprint instancí C++ / nebo jde o čistou C++ komponentu, kde migrování nefunguje?

Ruční kopírování jako krajní řešení

C++ classy přiřazené k projektu jsou vázané 2ma identifikátory, viz obrázek níže:

C++ class Ukázka C++ classy typu Actor
  1. Názvem projektu (NAZEVPROJEKTU_API)
  2. Názvem classy (ANazevActoru)

Z toho vyplývá následující - překopírujete-li C++ soubory v rámci “Source” složky do aktuálního projektu, stále budete muset přepsat veškeré CLASS_API názvy na název současného projektu. Ještě méně praktickým řešením je vytváření totožných C++ class v aktuálním projektu a plněním jejich těl překopírováváním kódu ze souborů starého projektu / git repozitáře.

Pluginy v Unreal Engine

Pravděpodobně jste si všimli, že Unreal Engine obsahuje pluginy. Pointou je, že plugin není vázán na konkrétní projekt - je dostupný nezávisle od projektu. Jde o repoužitelnou komponentu, kdy si určujete, zda v daném konkrétním projektu má být povolen, či nikoliv. Pluginy si můžete projít, aktivovat a deaktivovat v okně dostupném pod v toolboxu pod možností “Edit → Plugins”.

Pluginy v Unreal Engine Pluginy v Unreal Engine

V základu v okně “Plugins” vidíte pouze tzv. “Built-in” pluginy, tedy pluginy, které jsou základní součástí Unreal Enginu. Tuto nabídku lze ovšem rozšiřovat o “neoficiální” Projektové (Projects) pluginy, které si můžete sami napsat, případně použít nějaké stažené z internetu.

Přesun pluginů mezi projekty je poté velmi jednoduché - stačí zkopírovat složku pluginu do složky “Plugins” Unreal Projektu. Nic víc není potřeba, a to ani v případě, že daný plugin je typu C++ a váš projekt nikoliv (Blueprint projekt bez C++ kompilace). Pokud by jste nechtěli ani to, lze použít symlink ze složky konkrétního projektu do složky současného projektu.

Tvorba pluginu v Unreal Engine

Pluginy v Unreal Engine lze zakládat prostřednictvím Toolbox nabídky Edit → Plugins, kdy se v zobrazeném okně “Plugins” zvolí možnost “+ Add”.

Zakládání nového pluginu v Unreal Engine Zakládání nového pluginu v Unreal Engine

Nově otevřené okno “New Plugin” poté nabízí několik předdefinovaných šablon Pluginu. Jestliže pracujete z Blueprint Projektu, je k dispozici pouze možnost “Content Only”. V případě, že Váš projekt umožňuje psaní C++ funkcí, nabídka je shodná s obrázkem výše.

Po zvolení šablony (pro běžnou funkcionalitu používám "Blank") a vyplnění základních informací o pluginu (název, autor, popis) dále stačí kliknout na tlačítko "Create Plugin" vpravo dole a Unreal Projekt bude rozšířen / doplněn o složku daného pluginu lokalizovanou ve složce "Plugins" aktuálního Unreal projektu.

Zakládání nového pluginu v Unreal Engine Složka vytvořeného pluginu v Unreal Engine Projektu

Tvorba C++ class pluginu

Postup tvorby C++ class, které jsou obsahem pluginu, je identická s tvorbou běžných class (Tools → New C++ class), kdy po zvolení typu dané classy se v rámci okna definice zvolí cíl uložení vážící se k pluginu namísto projektu.

Tvorba C++ classy Unreal Engine pluginu Tvorba C++ classy Unreal Engine pluginu

Práce s pluginy v rámci vývoje a projektů

Assety tvořené jako pluginy jsou v rámci Unreal Engine dostupné stejným způsobem jako běžné assety projektu - jen je najdeme v rámci hiearchie složky “Plugins” namísto “Content”. Z hlediska práce již velký rozdíl není, maximálně v možnostech, v závislosti od cílené funkce daného pluginu.

Kdy tedy tvořit C++ classy jako classy projektu a kdy jako pluginu? To vždy záleží na struktuře projektů, které běžně vyvíjíte. V principu, veškeré repoužitelné komponenty je vhodné mít ve formě pluginů, projektově-specializované komponenty poté přiřazeny k projektu.

Co do struktury pluginů, je to obdobné jako u Class. Obecně je lepší pracovat s více pluginy, které se liší “kategorii” funkcí, než tvořit veškeré obecné funkce v rámci jediného pluginu. Ve Vrealmatiku tak mám samostatný pluginy (= knihovny) pro obecné komponenty, oborové komponenty, fyziku, interakce, apod.

Jestliže nepoužíváte jeden zdroj kódu pluginu pro všechny projekty (forma symlinku / zástupců), samozřejmostí je možnost poupravovat kód pluginu pro potřebu individuálních projektů - a to jak na úrovni class pluginu tak projektových class pomocí override funkcí.

Postup přesunu pluginu z projektu do projektu

Soubory vážící se k pluginu jsou ve složce konkrétního Unreal Engine projektu (na obrázku níže “VrealmaticLibrary”), a to v podsložce “Plugins”. Jestliže najedete prostřednictvím jakéhokoli průzkumníku složek do této složky, uvidíte výpis pluginů. V případě obrázku výše jde jen o jeden plugin, a to “VrealmaticComponents”.

Obsah složky Plugins Unreal Engine projektu Obsah složky Plugins Unreal Engine projektu

Pro přenos pluginu do dalšího projektu jednoduše stačí složku pluginu zkopírovat do složky “Plugins” jiného projektu. Jestliže složka Plugins u jiného projektu neexistuje, jednoduše ji vytvořte. Jestliže Plugin nebude po spuštění projektu viditelný, můžete zkusit projekt vypnout a opětovně spustit prostřednictvím pravého tlačítka myši a volby “Generate Visual Studio project files”.