75
Plug-ins & Third-Party SDKs in UE4 Yes, there will be funny cats, too Gerke Max Preussner [email protected] @gmpreussner

Plug-ins & Third-Party SDKs in UE4

Embed Size (px)

Citation preview

Page 1: Plug-ins & Third-Party SDKs in UE4

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

Gerke Max [email protected]

@gmpreussner

Page 2: Plug-ins & Third-Party SDKs in UE4

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/

Page 3: Plug-ins & Third-Party SDKs in UE4

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

Page 4: Plug-ins & Third-Party SDKs in UE4

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

Page 5: Plug-ins & Third-Party SDKs in UE4

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

Page 6: Plug-ins & Third-Party SDKs in UE4

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

Page 7: Plug-ins & Third-Party SDKs in UE4

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

Page 8: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Module initialization

Page 9: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Module initialization

Page 10: Plug-ins & Third-Party SDKs in UE4

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

Page 11: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Pre-compiled Headers

Page 12: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Pre-compiled Headers

Page 13: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Pre-compiled Headers

Page 14: Plug-ins & Third-Party SDKs in UE4

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

Page 15: Plug-ins & Third-Party SDKs in UE4

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

Page 16: Plug-ins & Third-Party SDKs in UE4

https://github.com/ue4plugins/NdiMedia

Structure of Modules

The BasicsModulesPlug-insProjects

Page 17: Plug-ins & Third-Party SDKs in UE4

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

Page 18: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Build Rules

Page 19: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Build Rules

Page 20: Plug-ins & Third-Party SDKs in UE4

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

Page 21: Plug-ins & Third-Party SDKs in UE4

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

Page 22: Plug-ins & Third-Party SDKs in UE4

1

2

3

Page 23: Plug-ins & Third-Party SDKs in UE4

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

Page 24: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

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

https://github.com/ue4plugins/NdiMedia

Page 25: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

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

https://github.com/ue4plugins/NdiMedia

Page 26: Plug-ins & Third-Party SDKs in UE4

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

Page 27: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

Page 28: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

Page 29: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

Page 30: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

Page 31: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

Page 32: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

Page 33: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

Page 34: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Plug-in Descriptor

1

Page 35: Plug-ins & Third-Party SDKs in UE4

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

ModulesPlug-insProjects

Page 36: Plug-ins & Third-Party SDKs in UE4

The BasicsModulesPlug-insProjects

Project Descriptor

Page 37: Plug-ins & Third-Party SDKs in UE4

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

Page 38: Plug-ins & Third-Party SDKs in UE4

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

Page 39: Plug-ins & Third-Party SDKs in UE4

Third-Party LibrariesEnginePlug-insUPLPlatformsDistribution

Page 40: Plug-ins & Third-Party SDKs in UE4

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

Page 41: Plug-ins & Third-Party SDKs in UE4

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

Page 42: Plug-ins & Third-Party SDKs in UE4
Page 43: Plug-ins & Third-Party SDKs in UE4
Page 44: Plug-ins & Third-Party SDKs in UE4

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

More Build Rules

Page 45: Plug-ins & Third-Party SDKs in UE4

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

Page 46: Plug-ins & Third-Party SDKs in UE4

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

EnginePlug-insPlatformsUPLDistribution

Page 47: Plug-ins & Third-Party SDKs in UE4

Third-Party LibrariesEnginePlug-insPlatformsUPLDistribution

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

Page 48: Plug-ins & Third-Party SDKs in UE4

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

Page 49: Plug-ins & Third-Party SDKs in UE4

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!

Page 50: Plug-ins & Third-Party SDKs in UE4

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

Page 51: Plug-ins & Third-Party SDKs in UE4

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

Page 52: Plug-ins & Third-Party SDKs in UE4

GearVR_APL.xml

Page 53: Plug-ins & Third-Party SDKs in UE4

GearVR_APL.xml

Page 54: Plug-ins & Third-Party SDKs in UE4

GearVR_APL.xml

Page 55: Plug-ins & Third-Party SDKs in UE4

GearVR_APL.xml

Page 56: Plug-ins & Third-Party SDKs in UE4

GearVR_APL.xml

Page 57: Plug-ins & Third-Party SDKs in UE4

GearVR_APL.xml

Page 58: Plug-ins & Third-Party SDKs in UE4

GearVR_APL.xml

Page 59: Plug-ins & Third-Party SDKs in UE4

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.

Page 60: Plug-ins & Third-Party SDKs in UE4

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.

Page 61: Plug-ins & Third-Party SDKs in UE4

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

Page 62: Plug-ins & Third-Party SDKs in UE4

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

Page 63: Plug-ins & Third-Party SDKs in UE4

Case StudiesLogiLedVlcMediaGearVR

https://github.com/ue4plugins/LogiLed

Page 64: Plug-ins & Third-Party SDKs in UE4

Case StudiesLogiLedVlcMediaGearVR

Page 65: Plug-ins & Third-Party SDKs in UE4

Case StudiesLogiLedVlcMediaGearVR

Page 66: Plug-ins & Third-Party SDKs in UE4

Case StudiesLogiLedVlcMediaGearVR

https://github.com/ue4plugins/VlcMedia

Page 67: Plug-ins & Third-Party SDKs in UE4

VlcMedia.Build.cs

Page 68: Plug-ins & Third-Party SDKs in UE4

Vlc.cpp

Page 69: Plug-ins & Third-Party SDKs in UE4

Vlc.cpp

Page 70: Plug-ins & Third-Party SDKs in UE4

Case StudiesLogiLedVlcMediaGearVR

GearVR_APL.xml

Page 71: Plug-ins & Third-Party SDKs in UE4

Case StudiesLogiLedVlcMediaGearVR

Java Code Injection via UPL GearVR_APL.xml

Page 72: Plug-ins & Third-Party SDKs in UE4

Case StudiesLogiLedVlcMediaGearVR

GameActivity.java

Page 73: Plug-ins & Third-Party SDKs in UE4

Case StudiesUEDeployAndroid.cs

Page 74: Plug-ins & Third-Party SDKs in UE4
Page 75: Plug-ins & Third-Party SDKs in UE4

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