Přesun obsahu a funkcionality mezi Unreal Engine projekty

Přesun obsahu a funkcionality mezi Unreal Engine projekty Tagy: Vývoj aplikací
| Publikováno dne

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:

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

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

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.

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

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

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”.