Plug-ins & Third-Party SDKs in UE4

Post on 07-Jan-2017

416 views 8 download

transcript

Plug-ins & Third-Party SDKs in UE4Yes, there will be funny cats, too

Gerke Max Preussnermax.preussner@epicgames.com

@gmpreussner

Funny cat videos have been removed to keepthese slides at a reasonable download size.

You can find those videos (and many more) athttps://www.reddit.com/r/thecatdimension/

The BasicsModulesPlug-insProjects

Modules Overview•Two methods to implement features in UE4: Blueprint & C++•Most projects use a combination of both•All C++ code resides in modules•Modules bundle type declarations and implementations•Each module has a particular purpose or responsibility•Most modules are generic and reusable•UE4 ships with hundred of modules•Can be compiled into DLLs or static libs

The BasicsModulesPlug-insProjects

Module Types•Developer – for development only•Editor – for Unreal Editor only•Runtime – for anything•Programs – for standalone programs•Third Party – for external code & libs

Note: The UE4 EULA prohibits inclusion ofEditor modules in shipping games

The BasicsModulesPlug-insProjects

Structure of Modules•Private folder

• Internal implementation• Module initialization• Pre-compiled header

•Public folder• Interfaces• Exported Types

•Build.cs file

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Structure of Modules•Private folder

• Internal implementation• Module initialization• Pre-compiled header

•Public folder• Interfaces• Exported Types

•Build.cs file

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Structure of Modules•Private folder

• Internal implementation• Module initialization• Pre-compiled header

•Public folder• Interfaces• Exported Types

•Build.cs file

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Module initialization

The BasicsModulesPlug-insProjects

Module initialization

The BasicsModulesPlug-insProjects

Structure of Modules•Private folder

• Internal implementation• Module initialization• Pre-compiled header

•Public folder• Interfaces• Exported Types

•Build.cs file

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Pre-compiled Headers

The BasicsModulesPlug-insProjects

Pre-compiled Headers

The BasicsModulesPlug-insProjects

Pre-compiled Headers

The BasicsModulesPlug-insProjects

Structure of Modules•Private folder

• Internal implementation• Module initialization• Pre-compiled header

•Public folder• Interfaces• Exported Types

•Build.cs file

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Structure of Modules•Private folder

• Internal implementation• Module initialization• Pre-compiled header

•Public folder• Interfaces• Exported Types

•Build.cs file

https://github.com/ue4plugins/NdiMedia

https://github.com/ue4plugins/NdiMedia

Structure of Modules

The BasicsModulesPlug-insProjects

The BasicsModulesPlug-insProjects

Structure of Modules•Private folder

• Internal implementation• Module initialization• Pre-compiled header

•Public folder• Interfaces• Exported Types

•Build rules

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Build Rules

The BasicsModulesPlug-insProjects

Build Rules

The BasicsModulesPlug-insProjects

PrivateIncludePaths•Sub-folders inside your module’s Private folderPublicIncludePaths•Sub-folders inside your module’s Public folder (not needed)PrivateIncludePathModuleNames•Modules whose public headers your module’s private implementation includes, but doesn’t link toPublicIncludePathModuleNames•Modules whose public headers your module’s publicinterface includes, but doesn’t link to

The BasicsModulesPlug-insProjects

PrivateDependencyModuleNames•Modules that your module’s private implementation requires for compiling and linkingPublicDependencyModuleNames•Modules that your module’s public interface requires for compiling and linkingDynamicallyLoadedModuleNames•Modules that are loaded at run-time via ModuleManager (this is to ensure that they get compiled)

More options in RulesCompiler.cs

1

2

3

The BasicsModulesPlug-insProjects

Structure of Plug-ins•One or more modules•Plug-in descriptor•Content (optional)•Resources (optional)

Configuration files for plug-ins are notyet supported, so any settings shouldbe stored in Engine or project INI files(set default values in constructors)

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Structure of Plug-ins•One or more modules•Plug-in descriptor•Content (optional)•Resources (optional)

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Structure of Plug-ins•One or more modules•Plug-in descriptor•Content (optional)•Resources (optional)

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Plug-in Descriptor•Json file {PluginName.uplugin}•Inside root of plug-in directory•Contains:

• Version information• User friendly description• Module loading rules

https://github.com/ue4plugins/NdiMedia

The BasicsModulesPlug-insProjects

Plug-in Descriptor

The BasicsModulesPlug-insProjects

Plug-in Descriptor

The BasicsModulesPlug-insProjects

Plug-in Descriptor

The BasicsModulesPlug-insProjects

Plug-in Descriptor

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

The BasicsStructure of Projects•Configuration files•Content (optional)•Plug-ins (optional)•Modules (optional)•Target Rules•Project descriptor

ModulesPlug-insProjects

The BasicsModulesPlug-insProjects

Project Descriptor

The BasicsModulesPlug-insProjects

Project Generation•UBT searches entire solution for *.Build.cs files•GenerateProjectFiles.bat invokes UBT to generateVisual Studio solution files containing all modules

The BasicsModulesPlug-insProjects

Project Compilation•Visual Studio invokes UBT to...

• find all *.Build.cs files• compile and instantiate them• create a module dependency graph• generate compiler and linker settings• compile all C++ modules

•A module is compiled if it is...• a dependency of another module• required by an enabled plug-in, or the project itself

Third-Party LibrariesEnginePlug-insUPLPlatformsDistribution

Third-Party LibrariesEnginePlug-insUPLPlatformsDistribution

Structure of Engine Dependencies•Located in /Engine/Source/ThirdParty•Each has its own Build.cs file

• Just like any other module• Public includes (for headers to be

compiled into dependent modules)• Public libraries (for libraries to be

linked into dependent modules)• Optional pre-processor definitions

Third-Party LibrariesEnginePlug-insUPLPlatformsDistribution

Building Engine Dependencies•Source code is often included, but…

• We provide pre-compiled libs for everything• UBT never compiles them when building your

projects•Internally, we pre-compile the libraries using…

• BuildThirdPartyLibs UAT script (automated)• Batch files and shell scripts (manual)• Specialized UAT scripts (i.e. for PhysX)

•Sometimes there are text files with instructions

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

More Build Rules

Third-Party LibrariesPublicLibraryPaths•Paths to folders containing additional librariesPublicAdditionalLibraries•Additional libraries (.lib or .a files) to link againstPublicFrameworks•Additional XCode frameworks (iOS, macOS only)PublicWeakFrameworks•Weak frameworks (for OS transition)

EnginePlug-insPlatformsUPLDistribution

Third-Party LibrariesPublicAdditionalShadowFiles•Files that need to be copied for remote compilationRuntimeDependencies•Runtime dependencies to be staged for a packaged build

EnginePlug-insPlatformsUPLDistribution

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

Structure of Plug-in Dependencies•Same as Engine third-party dependencies•Same build rules

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

Linux: Building libs that require STL•Use our bundled libc++ (offers most independence, because then your plug-in works wherever UE4 works)•Modules built within UE4 are automatically linkedwith libc++•We support CentOS 7 and newer (4.14)and CentOS 6 (4.13)•We don’t target any particular version of Ubuntu•Most other Linux versions should also be covered

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

Linux: Locating Libs at Runtime• On macOS we update RPATH via

RuntimeDependencies•On Linux you have to hack LinuxToolchain.cs •Or use FPlatformProcess::GetDllHandle•At some point we will fix this

On Linux we always use weaksymbol resolution by default!

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

Android• One lib subfolder per architecture• You list all of them in the Build.cs• Tool chain filters out unused architectures

Third-Party LibrariesEnginePlug-insUPLPlatformsDistribution

Unreal Plug-in Language• Used to be Android Plug-in Language (APL)• XML based scripting system for building UE4 plug-ins• Interpreter implemented in UnrealPluginLanguage.cs•Can be used for iOS as well (for modifying Plists)•Other platforms not implemented yet•Often used for:• Staging additional files• Stripping out files• Injecting Java code

GearVR_APL.xml

GearVR_APL.xml

GearVR_APL.xml

GearVR_APL.xml

GearVR_APL.xml

GearVR_APL.xml

GearVR_APL.xml

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

Marketplace Submissions•http://publish.unrealengine.com/welcome

Our current web form sucksa little, so we’ll communicatewith you over email, too.

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

Submission Audit•Plug-in / project descriptor files must be complete•Payment information must be correct•Automated test builds for all platforms & versions•Basic code review & light runtime testing•Virus scan

We don’t enforce UE4 coding guidelines, but we look for common bad practices that may break in the future.

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

Third-party Libs (permissive license)•Can be included with submission•Must provide web links to library origin•Must include license copies

Third-party Libs (non-permissive license)•Must be a separate download from the vendor•Must include instructions on how to install

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

What else?•Plug-ins will be installed in /Engine/Plugins•We include pre-compiled binaries for all supported platforms•We include source code, so they can be used in custom UE4

• You can put your secret sauce into static libraries•You must resubmit for every new UE4 version

Case StudiesLogiLedVlcMediaGearVR

https://github.com/ue4plugins/LogiLed

Case StudiesLogiLedVlcMediaGearVR

Case StudiesLogiLedVlcMediaGearVR

Case StudiesLogiLedVlcMediaGearVR

https://github.com/ue4plugins/VlcMedia

VlcMedia.Build.cs

Vlc.cpp

Vlc.cpp

Case StudiesLogiLedVlcMediaGearVR

GearVR_APL.xml

Case StudiesLogiLedVlcMediaGearVR

Java Code Injection via UPL GearVR_APL.xml

Case StudiesLogiLedVlcMediaGearVR

GameActivity.java

Case StudiesUEDeployAndroid.cs

Questions?Documentation, Tutorials and Help at:

• Answer Hub:• Documentation:• Forums:• Issue Tracker: • Wiki: • UE4 Road Map• YouTube Tutorials:• Community Discord:• Community IRC:

https://answers.unrealengine.comhttps://docs.unrealengine.comhttps://forums.unrealengine.comhttps://issues.unrealengine.comhttps://wiki.unrealengine.com

https://trello.com/b/gHooNW9I/ue4-roadmaphttps://www.youtube.com/user/UnrealDevelopmentKithttp://unrealslackers.org#unrealengine on FreeNode