Upload
gerke-max-preussner
View
418
Download
8
Embed Size (px)
Citation preview
Plug-ins & Third-Party SDKs in UE4Yes, there will be funny cats, too
Gerke Max [email protected]
@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