Overview of the basics of modules, plug-ins and projects in UE4, and a deep dive into integrating third-party dependencies. Presented at MIGS 2016 in Montreal.
講演動画:https://youtu.be/jykrWtBQEz0
2019年10月6日に行われた「UNREAL FEST EAST 2019」における「メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例」の登壇資料です。
●公式サイト
https://unrealengine.jp/unrealfest/
===
Nintendo Switch用ソフト『DAEMON X MACHINA(デモンエクスマキナ)』の開発について、エンジニアからはUE4をどのように活用しメカアクションを実現したか、また、アーティストからは本作の特徴的なルックの一つであるVFXをメインに、お伝えします。
East Coast DevCon 2014: The Slate UI Framework - Architecture & ToolsGerke Max Preussner
The document discusses the Slate UI framework in Unreal Engine, which provides tools for building user interfaces. It is written in C++ and works across platforms. Slate includes a widget library, tools for styling and input handling, and allows composing UI hierarchies through declarative syntax. It is used for interfaces like the Unreal Editor, games, and other applications. The document also covers Slate architecture, concepts, and provides an example of a custom button widget.
講演動画:https://youtu.be/jykrWtBQEz0
2019年10月6日に行われた「UNREAL FEST EAST 2019」における「メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例」の登壇資料です。
●公式サイト
https://unrealengine.jp/unrealfest/
===
Nintendo Switch用ソフト『DAEMON X MACHINA(デモンエクスマキナ)』の開発について、エンジニアからはUE4をどのように活用しメカアクションを実現したか、また、アーティストからは本作の特徴的なルックの一つであるVFXをメインに、お伝えします。
East Coast DevCon 2014: The Slate UI Framework - Architecture & ToolsGerke Max Preussner
The document discusses the Slate UI framework in Unreal Engine, which provides tools for building user interfaces. It is written in C++ and works across platforms. Slate includes a widget library, tools for styling and input handling, and allows composing UI hierarchies through declarative syntax. It is used for interfaces like the Unreal Editor, games, and other applications. The document also covers Slate architecture, concepts, and provides an example of a custom button widget.
East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...Gerke Max Preussner
This document discusses concurrency and parallelism techniques in Unreal Engine 4 (UE4). It covers synchronization primitives like atomics, locking, signaling, and waiting. It also discusses high level constructs like thread-safe containers and helpers. For parallelization, it discusses threading using runnables, task graphs, processes, and messaging. The goal is to provide tips for programming UE4 to take advantage of multiple CPU cores.
West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...Gerke Max Preussner
Overview of the Unreal Motion Graphics (UMG) framework in Unreal Engine 4. Presented at West Coast Unreal Engine DevCon 2014 in San Francisco and Seattle.
East Coast DevCon 2014: Programming in UE4 - A Quick Orientation for CodersGerke Max Preussner
Overview of basic concepts and common blockers when programming for Unreal Engine 4. Presented at East Coast Unreal Engine DevCon 2014 in Montreal and Boston.
West Coast DevCon 2014: Programming in UE4 - A Quick Orientation for CodersGerke Max Preussner
Overview of basic concepts and common blockers when programming for Unreal Engine 4. Presented at West Coast Unreal Engine DevCon 2014 in San Francisco and Seattle.
West Coast DevCon 2014: The Slate UI Framework (Part 1) - IntroductionGerke Max Preussner
Overview of the Slate user interface framework and low-level UI capabilities in Unreal Engine 4. Presented at West Coast Unreal Engine DevCon 2014 in San Francisco and Seattle.
East Coast DevCon 2014: Extensibility in UE4 - Customizing Your Games and the...Gerke Max Preussner
This document discusses extensibility in Unreal Engine 4 (UE4) through custom plugins. It explains that plugins allow customizing games and the editor for specific needs not supported out of the box by UE4. Plugins can extend both the engine and editor through C++ code, blueprints, UI customization, and more. The document provides examples of how to build plugins and highlights plugins for VR support, movie playback, and integration with source control software.
West Coast DevCon 2014: Engine Overview - A Programmers Glimpse at UE4Gerke Max Preussner
This document provides an overview of the Unreal Engine, including its directory structure, configuration files, modular design, and project templates. It describes the main directories for code, content, binaries, and more. Configuration is handled through INI files in a hierarchy. The engine uses a modular design to promote reusability, extensibility, and decoupling. Common module types include runtime, editor, plugins, and programs. Project templates help users get started with genres like shooters, side scrollers, and more.
The document provides an overview of Unreal Engine's message bus system. It discusses how the message bus allows for exchanging data between endpoints using messages. It describes creating message types, endpoints that send and receive messages, and how publish-subscribe and request-response patterns work. The document also discusses using message bridges to connect message buses across processes and machines.
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & InfrastructureGerke Max Preussner
Overview of build tools, build automation, source code management and automated testing infrastructure at Epic Games. Presented at West Coast Unreal Engine DevCon 2014 in San Francisco and Seattle.
Introductory slides for our live coding demonstration at GDC Europe on August 4th, 2015. We are creating a hover component in Blueprint and converting it to a C++ plug-in. The corresponding Visual Studio project files are available at https://headcrash.industries/vault/presentations/gdc-europe/
FMX 2017: Extending Unreal Engine 4 with Plug-ins (Master Class)Gerke Max Preussner
Overview on creating code projects and plug-ins, and introduction on how to add new asset types to UE4 and customize their look & feel via asset actions and custom asset editors. The corresponding source code is available at https://headcrash.industries/vault/presentations/fmx/
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...Gerke Max Preussner
A high-level overview of Unreal Engine 4, its game framework, the Slate user interface library, Unreal Motion Graphics, and Editor and Engine extensibility. Presented at GDC Europe in Cologne, Germany.
Also includes bonus slides on concurrency and parallelism features, general tips for programmers and Epic's build and automation infrastructure.
Software development is more than just writing code. Learn about organizing and packaging projects to be more accessible to other developers in this talk presented by SuprTEK. Discover what makes an easy-to-compile and distributable code base.
Blisstering drupal module development ppt v1.2Anil Sagar
1. Implement hook_form() to define the form structure using Form API elements like #type, #title, etc.
2. Add validation and submission handlers to validate form data and process form submission.
3. In the validation handler, validate the form data and use drupal_set_message() to display errors.
4. In the submission handler, save the form values and use drupal_set_message() to display success messages.
This allows you to create a basic configuration form, validate the submitted data, and save the configuration values on successful validation using Drupal's Form
This document provides an introduction to developing Drupal 7 modules. It explains what modules are, why code should be modularized, and the basic components of a module, including the info file, module file, and hook system. Modules are building blocks that encapsulate functionality and enable/disable code. The hook system provides access points to Drupal's response cycle and is used by modules and themes.
OpenEmbedded and BitBake are open source tools used to build Linux distributions for embedded systems. BitBake controls the build process by executing tasks based on recipes. It collects build descriptions from recipes and dependencies to compile packages in the proper order. OpenEmbedded contains metadata like build classes, machine configurations, and recipes that define how to cross-compile, package, and install software for complete embedded Linux distributions.
In this session, you will learn how to extend and customize a ContentBox application. Get a deep understanding of leveraging custom modules and dynamic pages to create highly customized and engaging ContentBox apps.
Sometimes there are things that we need to customize to fill our business needs, and ContentBox allows you to create custom modules to take care of those special needs.
WordPress Under Control (Boston WP Meetup)Matt Bernhardt
This was a presentation I gave at the Boston WordPress Meetup on October 30, 2017. It focuses on a set of development tools that we have used at the MIT Libraries that includes Waffle.io, Travis, and CodeClimate. I also discuss some alternatives that we tried, and some thoughts on replacements for aspects of this approach.
ZF2 takes a different approach to services; there are several services out there and you should be providing the ability for ZF2 to integrate with this. ZF2 marries services with composer and a different packaging mechanism to ensure that services can be released without a specific framework version. This not only helps the framework but helps you prevent an API changing in between framework releases without having an issue of awaiting a framework release.
Stefano Cordibella - An introduction to Yocto Projectlinuxlab_conf
If you heard something about Yocto, bitbake, openembedded, layers, recipes and you want to know more about that, this talk is for you. In this presentation you will be introduced to the Yocto Project build system starting from the basic concepts of metadata up to the use of the build system “tasks” in order to create your own embedded linux distribution. I will start speaking about the pros and cons of the Yocto Project compared to the other embedded linux build systems. Then we go deep into the framework components: poky, openembedded core and bitbake. The practical use of the recipes, packagegroups, images and machines files will be explained by examples. Finally an example on how to integrate an extra layer will be showed demonstrating the ease of use and the modularity of the build system.
The Latest Status of CE Workgroup Shared Embedded Linux Distribution ProjectYoshitake Kobayashi
The CE workgroup of Linux Foundation has started a project to share the work of maintaining long-term support for an embedded distribution, by leveraging the work of the Debian and Debian LTS project. Debian gives you pre-compiled binary packages but the meta-debian layer enables to install customized packages to create similar or smaller images. If both usecases are able to share the source code, it is good to share the maintenance effort.
In this talk, Yoshitake will describe the details of meta-debian which provides a meta layer for the Poky build system. This talk will to gives the latest status, technical details and lessons learned from its development.
All source code are available on GitHub and related document also available on Github and elinux wiki.
Symfony under control. Continuous Integration and Automated Deployments in Sy...Max Romanovsky
This document discusses continuous integration and automated deployments for Symfony projects. It covers setting up dependencies with Composer, building projects with Phing, implementing continuous integration with Jenkins CI, and deploying projects using Capifony. While many aspects are covered in detail, such as build targets, plugins, and rollback procedures, it notes that the full implementation is not yet available online and will be released to GitHub in 1-2 months.
В продолжение темы непрерывной интеграции, Макс расскажет о своем подходе организации непрерывной интеграции и деплоймента в Symfony проектах. Рассказ включает следующие темы:
- Управления зависимостями
- Процесс и инструменты для сборки
- Сервера непрерывной интеграции и в частности Jenkins, плагины к нему, jobs
- Процесс разработки в git
- Процесс выгрузки релиза
- Миграция БД
- Откат релиза
IoT: Contrasting Yocto/Buildroot to binary OSesMender.io
Drew Moseley gave a presentation comparing the workflows of using binary operating systems versus build systems like Yocto Project and Buildroot for embedded and IoT development. He outlined the steps in a typical development workflow and discussed the advantages and disadvantages of each approach. He also touched on security best practices, the potential uses of containers in embedded/IoT, and concluded with recommendations to define applications early, use a reproducible build system, consider OTA updates, monitor containers, and contact Mender for additional information and resources.
Luca Ceresoli - Buildroot vs Yocto: Differences for Your Daily Joblinuxlab_conf
This document discusses the differences between Buildroot and Yocto/Bitbake for embedded Linux development. It begins by explaining that Buildroot and Yocto both use a dependency graph and actions to build each node, but are based on different underlying tools - Buildroot uses Kconfig and Make while Yocto uses Kconfig, Bitbake, and other OpenEmbedded tools. It also notes that Buildroot focuses on generating a root filesystem while Yocto focuses on generating packages and entire Linux distributions.
Dojo given at ESEI, Uvigo.
The slides include a set of great slides from a presentation made by Elvin Sindrilaru at CERN.
Docker is an open platform for building, shipping and running distributed applications. It gives programmers, development teams and operations engineers the common toolbox they need to take advantage of the distributed and networked nature of modern applications.
Gradle is a build automation tool that builds upon concepts from Ant and Maven. It introduces a Groovy-based DSL for declaring project configuration instead of XML. The document discusses using Gradle to build Android apps, including setting up dependencies between projects, signing release builds, creating free/paid flavor variants, and integrating testing. Continuous integration is mentioned as a way to continuously measure code quality.
.NET is a platform that allows developers to create software using .NET languages and technologies. It includes class libraries and namespaces contained in DLL files that implement object-oriented programming concepts. .NET supports many features including being platform independent, language interoperability, pure object-oriented programming, and predefined functionality. Developers can use .NET to create both desktop applications and web applications.
eZ Publish 5: from zero to automated deployment (and no regressions!) in one ...Gaetano Giunta
1. The workshop will cover Docker, managing environments, database changes, and automated deployments for eZPublish websites.
2. A Docker stack is proposed that includes containers for Apache, MySQL, Solr, PHP, and other tools to replicate a production environment for development. Configuration and code are mounted as volumes.
3. Managing environments involves storing settings in the code repository and using symlinks to deploy different configurations. Database changes should be managed via migration scripts rather than connecting directly to a shared database.
4. Automating deployments is important and involves tasks like updating code, the database, caches and reindexing content. The same deployment script should be used for development and production. Testing websites is also recommended.
The document provides an overview of Qt C++ programming basics, including creating Qt C++ projects, the project file format, building projects, and using shared libraries. It also introduces C++ object-oriented programming concepts like classes, objects, memory management, and pointers/references. Finally, it covers some core Qt features like implicit sharing of data objects, Qt's object model, and connecting signals and slots.
FL Studio Producer Edition Crack 2025 Full Versiontahirabibi60507
Copy & Past Link 👉👉
http://drfiles.net/
FL Studio is a Digital Audio Workstation (DAW) software used for music production. It's developed by the Belgian company Image-Line. FL Studio allows users to create and edit music using a graphical user interface with a pattern-based music sequencer.
Adobe Photoshop CC 2025 Crack Full Serial Key With Latestusmanhidray
Copy & Past Link👉👉💖
💖http://drfiles.net/
Adobe Photoshop is a widely-used, professional-grade software for digital image editing and graphic design. It allows users to create, manipulate, and edit raster images, which are pixel-based, and is known for its extensive tools and capabilities for photo retouching, compositing, and creating intricate visual effects.
Who Watches the Watchmen (SciFiDevCon 2025)Allon Mureinik
Tests, especially unit tests, are the developers’ superheroes. They allow us to mess around with our code and keep us safe.
We often trust them with the safety of our codebase, but how do we know that we should? How do we know that this trust is well-deserved?
Enter mutation testing – by intentionally injecting harmful mutations into our code and seeing if they are caught by the tests, we can evaluate the quality of the safety net they provide. By watching the watchmen, we can make sure our tests really protect us, and we aren’t just green-washing our IDEs to a false sense of security.
Talk from SciFiDevCon 2025
https://www.scifidevcon.com/courses/2025-scifidevcon/contents/680efa43ae4f5
Agentic AI Use Cases using GenAI LLM modelsManish Chopra
This document presents specific use cases for Agentic AI (Artificial Intelligence), featuring Large Language Models (LLMs), Generative AI, and snippets of Python code alongside each use case.
Societal challenges of AI: biases, multilinguism and sustainabilityJordi Cabot
Towards a fairer, inclusive and sustainable AI that works for everybody.
Reviewing the state of the art on these challenges and what we're doing at LIST to test current LLMs and help you select the one that works best for you
Microsoft AI Nonprofit Use Cases and Live Demo_2025.04.30.pdfTechSoup
In this webinar we will dive into the essentials of generative AI, address key AI concerns, and demonstrate how nonprofits can benefit from using Microsoft’s AI assistant, Copilot, to achieve their goals.
This event series to help nonprofits obtain Copilot skills is made possible by generous support from Microsoft.
What You’ll Learn in Part 2:
Explore real-world nonprofit use cases and success stories.
Participate in live demonstrations and a hands-on activity to see how you can use Microsoft 365 Copilot in your own work!
How to Batch Export Lotus Notes NSF Emails to Outlook PST Easily?steaveroggers
Migrating from Lotus Notes to Outlook can be a complex and time-consuming task, especially when dealing with large volumes of NSF emails. This presentation provides a complete guide on how to batch export Lotus Notes NSF emails to Outlook PST format quickly and securely. It highlights the challenges of manual methods, the benefits of using an automated tool, and introduces eSoftTools NSF to PST Converter Software — a reliable solution designed to handle bulk email migrations efficiently. Learn about the software’s key features, step-by-step export process, system requirements, and how it ensures 100% data accuracy and folder structure preservation during migration. Make your email transition smoother, safer, and faster with the right approach.
Read More:- https://www.esofttools.com/nsf-to-pst-converter.html
Exploring Wayland: A Modern Display Server for the FutureICS
Wayland is revolutionizing the way we interact with graphical interfaces, offering a modern alternative to the X Window System. In this webinar, we’ll delve into the architecture and benefits of Wayland, including its streamlined design, enhanced performance, and improved security features.
Copy & Past Link 👉👉
http://drfiles.net/
When you say Xforce with GTA 5, it sounds like you might be talking about Xforce Keygen — a tool that's often mentioned in connection with cracking software like Autodesk programs.
BUT, when it comes to GTA 5, Xforce isn't officially part of the game or anything Rockstar made.
If you're seeing "Xforce" related to GTA 5 downloads or cracks, it's usually some unofficial (and risky) tool for pirating the game — which can be super dangerous because:
Avast Premium Security Crack FREE Latest Version 2025mu394968
🌍📱👉COPY LINK & PASTE ON GOOGLE https://dr-kain-geera.info/👈🌍
Avast Premium Security is a paid subscription service that provides comprehensive online security and privacy protection for multiple devices. It includes features like antivirus, firewall, ransomware protection, and website scanning, all designed to safeguard against a wide range of online threats, according to Avast.
Key features of Avast Premium Security:
Antivirus: Protects against viruses, malware, and other malicious software, according to Avast.
Firewall: Controls network traffic and blocks unauthorized access to your devices, as noted by All About Cookies.
Ransomware protection: Helps prevent ransomware attacks, which can encrypt your files and hold them hostage.
Website scanning: Checks websites for malicious content before you visit them, according to Avast.
Email Guardian: Scans your emails for suspicious attachments and phishing attempts.
Multi-device protection: Covers up to 10 devices, including Windows, Mac, Android, and iOS, as stated by 2GO Software.
Privacy features: Helps protect your personal data and online privacy.
In essence, Avast Premium Security provides a robust suite of tools to keep your devices and online activity safe and secure, according to Avast.
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...Ranjan Baisak
As software complexity grows, traditional static analysis tools struggle to detect vulnerabilities with both precision and context—often triggering high false positive rates and developer fatigue. This article explores how Graph Neural Networks (GNNs), when applied to source code representations like Abstract Syntax Trees (ASTs), Control Flow Graphs (CFGs), and Data Flow Graphs (DFGs), can revolutionize vulnerability detection. We break down how GNNs model code semantics more effectively than flat token sequences, and how techniques like attention mechanisms, hybrid graph construction, and feedback loops significantly reduce false positives. With insights from real-world datasets and recent research, this guide shows how to build more reliable, proactive, and interpretable vulnerability detection systems using GNNs.
Download Wondershare Filmora Crack [2025] With Latesttahirabibi60507
Copy & Past Link 👉👉
http://drfiles.net/
Wondershare Filmora is a video editing software and app designed for both beginners and experienced users. It's known for its user-friendly interface, drag-and-drop functionality, and a wide range of tools and features for creating and editing videos. Filmora is available on Windows, macOS, iOS (iPhone/iPad), and Android platforms.
Join Ajay Sarpal and Miray Vu to learn about key Marketo Engage enhancements. Discover improved in-app Salesforce CRM connector statistics for easy monitoring of sync health and throughput. Explore new Salesforce CRM Synch Dashboards providing up-to-date insights into weekly activity usage, thresholds, and limits with drill-down capabilities. Learn about proactive notifications for both Salesforce CRM sync and product usage overages. Get an update on improved Salesforce CRM synch scale and reliability coming in Q2 2025.
Key Takeaways:
Improved Salesforce CRM User Experience: Learn how self-service visibility enhances satisfaction.
Utilize Salesforce CRM Synch Dashboards: Explore real-time weekly activity data.
Monitor Performance Against Limits: See threshold limits for each product level.
Get Usage Over-Limit Alerts: Receive notifications for exceeding thresholds.
Learn About Improved Salesforce CRM Scale: Understand upcoming cloud-based incremental sync.
How Valletta helped healthcare SaaS to transform QA and compliance to grow wi...Egor Kaleynik
This case study explores how we partnered with a mid-sized U.S. healthcare SaaS provider to help them scale from a successful pilot phase to supporting over 10,000 users—while meeting strict HIPAA compliance requirements.
Faced with slow, manual testing cycles, frequent regression bugs, and looming audit risks, their growth was at risk. Their existing QA processes couldn’t keep up with the complexity of real-time biometric data handling, and earlier automation attempts had failed due to unreliable tools and fragmented workflows.
We stepped in to deliver a full QA and DevOps transformation. Our team replaced their fragile legacy tests with Testim’s self-healing automation, integrated Postman and OWASP ZAP into Jenkins pipelines for continuous API and security validation, and leveraged AWS Device Farm for real-device, region-specific compliance testing. Custom deployment scripts gave them control over rollouts without relying on heavy CI/CD infrastructure.
The result? Test cycle times were reduced from 3 days to just 8 hours, regression bugs dropped by 40%, and they passed their first HIPAA audit without issue—unlocking faster contract signings and enabling them to expand confidently. More than just a technical upgrade, this project embedded compliance into every phase of development, proving that SaaS providers in regulated industries can scale fast and stay secure.
Designing AI-Powered APIs on Azure: Best Practices& ConsiderationsDinusha Kumarasiri
AI is transforming APIs, enabling smarter automation, enhanced decision-making, and seamless integrations. This presentation explores key design principles for AI-infused APIs on Azure, covering performance optimization, security best practices, scalability strategies, and responsible AI governance. Learn how to leverage Azure API Management, machine learning models, and cloud-native architectures to build robust, efficient, and intelligent API solutions
Adobe Lightroom Classic Crack FREE Latest link 2025kashifyounis067
🌍📱👉COPY LINK & PASTE ON GOOGLE http://drfiles.net/ 👈🌍
Adobe Lightroom Classic is a desktop-based software application for editing and managing digital photos. It focuses on providing users with a powerful and comprehensive set of tools for organizing, editing, and processing their images on their computer. Unlike the newer Lightroom, which is cloud-based, Lightroom Classic stores photos locally on your computer and offers a more traditional workflow for professional photographers.
Here's a more detailed breakdown:
Key Features and Functions:
Organization:
Lightroom Classic provides robust tools for organizing your photos, including creating collections, using keywords, flags, and color labels.
Editing:
It offers a wide range of editing tools for making adjustments to color, tone, and more.
Processing:
Lightroom Classic can process RAW files, allowing for significant adjustments and fine-tuning of images.
Desktop-Focused:
The application is designed to be used on a computer, with the original photos stored locally on the hard drive.
Non-Destructive Editing:
Edits are applied to the original photos in a non-destructive way, meaning the original files remain untouched.
Key Differences from Lightroom (Cloud-Based):
Storage Location:
Lightroom Classic stores photos locally on your computer, while Lightroom stores them in the cloud.
Workflow:
Lightroom Classic is designed for a desktop workflow, while Lightroom is designed for a cloud-based workflow.
Connectivity:
Lightroom Classic can be used offline, while Lightroom requires an internet connection to sync and access photos.
Organization:
Lightroom Classic offers more advanced organization features like Collections and Keywords.
Who is it for?
Professional Photographers:
PCMag notes that Lightroom Classic is a popular choice among professional photographers who need the flexibility and control of a desktop-based application.
Users with Large Collections:
Those with extensive photo collections may prefer Lightroom Classic's local storage and robust organization features.
Users who prefer a traditional workflow:
Users who prefer a more traditional desktop workflow, with their original photos stored on their computer, will find Lightroom Classic a good fit.
Copy & Paste On Google >>> https://dr-up-community.info/
EASEUS Partition Master Final with Crack and Key Download If you are looking for a powerful and easy-to-use disk partitioning software,
2. Funny cat videos have been removed to keep
these slides at a reasonable download size.
You can find those videos (and many more) at
https://www.reddit.com/r/thecatdimension/
3. The Basics
Modules
Plug-ins
Projects
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
4. The Basics
Modules
Plug-ins
Projects
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 of
Editor modules in shipping games
20. The Basics
Modules
Plug-ins
Projects
PrivateIncludePaths
•Sub-folders inside your module’s Private folder
PublicIncludePaths
•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 to
PublicIncludePathModuleNames
•Modules whose public headers your module’s public
interface includes, but doesn’t link to
21. The Basics
Modules
Plug-ins
Projects
PrivateDependencyModuleNames
•Modules that your module’s private implementation requires
for compiling and linking
PublicDependencyModuleNames
•Modules that your module’s public interface requires for
compiling and linking
DynamicallyLoadedModuleNames
•Modules that are loaded at run-time via ModuleManager
(this is to ensure that they get compiled)
More options in RulesCompiler.cs
23. The Basics
Modules
Plug-ins
Projects
Structure of Plug-ins
•One or more modules
•Plug-in descriptor
•Content (optional)
•Resources (optional)
Configuration files for plug-ins are not
yet supported, so any settings should
be stored in Engine or project INI files
(set default values in constructors)
https://github.com/ue4plugins/NdiMedia
24. The Basics
Modules
Plug-ins
Projects
Structure of Plug-ins
•One or more modules
•Plug-in descriptor
•Content (optional)
•Resources (optional)
https://github.com/ue4plugins/NdiMedia
25. The Basics
Modules
Plug-ins
Projects
Structure of Plug-ins
•One or more modules
•Plug-in descriptor
•Content (optional)
•Resources (optional)
https://github.com/ue4plugins/NdiMedia
26. The Basics
Modules
Plug-ins
Projects
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
38. The Basics
Modules
Plug-ins
Projects
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
40. Third-Party Libraries
Engine
Plug-ins
UPL
Platforms
Distribution
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
41. Third-Party Libraries
Engine
Plug-ins
UPL
Platforms
Distribution
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
48. Third-Party Libraries
Engine
Plug-ins
Platforms
UPL
Distribution
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 linked
with 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
49. Third-Party Libraries
Engine
Plug-ins
Platforms
UPL
Distribution
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 weak
symbol resolution by default!
51. Third-Party Libraries
Engine
Plug-ins
UPL
Platforms
Distribution
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
60. Third-Party Libraries
Engine
Plug-ins
Platforms
UPL
Distribution
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.
61. Third-Party Libraries
Engine
Plug-ins
Platforms
UPL
Distribution
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
62. Third-Party Libraries
Engine
Plug-ins
Platforms
UPL
Distribution
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
75. 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.com
https://docs.unrealengine.com
https://forums.unrealengine.com
https://issues.unrealengine.com
https://wiki.unrealengine.com
https://trello.com/b/gHooNW9I/ue4-roadmap
https://www.youtube.com/user/UnrealDevelopmentKit
http://unrealslackers.org
#unrealengine on FreeNode
Editor's Notes
#2: *** Prepared and presented by Gerke Max Preussner for MIGS 2016, November 15th
#4: UE4 provides two methods to implement new features: Blueprint (our visual programming interface) and C++.
Most projects use a combination of both, and Blueprint and C++ can interact with each quite easily. It is also possible to implement a game entire in Blueprint, or entirely in C++. This presentation will focus on C++.
All C++ code resides in modules. You can think of these as packages or libraries that bundle types and functions together.
In earlier versions of Unreal Engine all the code was split into a few DLLs, which lead to a lot of very tightly coupled code that was difficult to maintain and extend.
In UE4 we refactored most of this code into hundreds of small modules, each of which has a particular purpose that can be reused more easily.
Depending on the platform and type of application, modules can be compiled into static libraries (monolithic builds) or DLLs (non-monolithic builds).
#5: Because there are so many modules in UE4, we decided to logically organize them depending on how and where they are meant to be used.
For example, modules that are to be used exclusively in Unreal Editor and not in any game or project are referred to as ‘Editor’ modules.
We also have a number of modules that implement standalone programs and tools.
Runtime modules are the most numerous as they form the foundation for all games, programs, and Unreal Editor.
Other modules are used exclusively to integrate code and libraries from other third-party vendors. At these we will look in more detail later.
#6: Modules can be found in various locations of the Engine code base, but they all have more or less the same structure.
For most modules there’s a Private and Public folder, as well as a Build.cs file.
#7: The Private folder contains all the module’s implementation details that should not be accessible by other modules.
#8: Each module is required to implement special initialization code that is executed each time the module is loaded or unloaded.
#9: This is easily accomplished by writing a class that implements the IModuleInterface interface.
#10: The IMPLEMENT_MODULE macro generates the module registration and other boilerplate code.
The module initialization file is also a good place to define other things that are used throughout your module, such as log categories.
#11: All modules in UE4 are also expected to use a pre-compiled header file.
This header must be the first include file in any of your module’s .cpp files.
UBT will warn during compilation if you fail to do this.
#12: There are no official guidelines on what should go into the pre-compiled header.
Personally I found it most useful to include all external header files from other modules or third-party SDKs that the module uses.
We generally use unique file names for all headers in the Engine, but there are a few exceptions.
For this reason, I always specify the full include path relative to the Engine’s “Source” directory.
#13: It is not strictly required to include Core.h as it should always be included by UBT.
For consistency, I include it anyway.
#14: It is also possible to use relative include paths.
This is useful when including shared headers from neighboring modules inside of plug-ins.
#15: The module’s Public folder contains everything that should be accessible by other modules.
This typically includes C++ interface declarations…
#17: Pure interface declarations can be used by other modules by simply including your module’s public header files.
If your module implements functions or class methods, these need to be exported, and other modules have to not include the headers, but also link against your module.
Exporting types is easy: we have a macro that is automatically generated for each module ({MODULENAME}_API).
#18: The most important part of a module is the module build rules file (*.Build.cs)
It tells UBT how the module is to be compiled, which modules it depends on for compiling and linking, and many other build options.
#19: Module build rules are written in C#.
UBT automatically locates all build rules, and compiles and executes them in order to generate the command lines for the compiler and linker.
#20: The build rules are mostly configured via built-in properties.
There are many options available for rules compiler, and I quickly want to go over some of the most important ones, because almost everyone gets them wrong (and by that I mean most programmers at Epic, too!).
#21: For efficiency reasons, UBT does not automatically discover sub-folders in your module’s Private directory. If you have any private sub-folders, you need to add them to PrivateIncludePaths.
PublicIncludePaths is currently not needed, because UBT discovers public sub-folders automatically.
If your module’s private implementation includes public headers from another module, but does not link against that module (this usually happens when including only interface headers), then you must list that module in PrivateIncludePathModuleNames.
If your module’s public interface uses types from another module’s public interface, but does not need to link against it, then you must list that module in PublicIncludePathModuleNames.
#22: If your module includes public headers from another module and also has to link against that module, then you can list that module in PrivateDependencyModuleNames and PublicDependencyModuleNames respectively.
Finally, if your module does not depend on another module at compile or link time, but loads it at run-time, then we must tell UBT to compile that module anyway by adding it to the DynamicallyLoadedModuleNames array. This setting is often used in combination with PrivateIncludePathModuleNames.
It is important that you completely understand these options. I often see that module dependencies are over-specified in order to “make things work” without really knowing what that means.
I also often see that dependencies are underspecified, and the code compiles, links and runs successfully only by accident, and it may break later if someone changes dependencies in some other, completely unrelated module.
You are responsible for ensuring that your module specifies its dependencies correctly.
#23: One easy way to create a new plug-in in three simple steps is to use the Plug-in Wizard in Unreal Editor.
You can reach it via the Plugin Manager from the main menu.
However, I generally prefer to just copy the relevant files from an existing plug-in and do a find and replace of the plug-in name in files and file names.
#24: Plug-ins are really just a collection of one or more modules bundled together with a descriptor file for easy redistribution.
Plug-ins can reside in /Engine/Plugins (so called Engine plug-ins), or /MyProject/Plugins (so called project plug-ins). There is no functional difference, except that project plug-ins will only be accessible within a particular project, while Engine plug-ins can be used by all projects.
If your plug-in is project specific, put it inside the project. Otherwise put it inside the Engine.
#25: A plug-in’s C++ modules are located inside its Source sub-directory (just like Engine, project, or program modules).
You can see in the picture that one of the three modules in the NdiMedia plug-in is actually the module we looked at a few minutes ago.
There are no surprises here.
#26: The only new addition is the plug-in descriptor, which resides in the plug-in’s root directory.
#27: The plug-in descriptor is stored as a JSON file with the file extension .uplugin.
It must have the same name as the plug-in itself.
#28: And this is what a plug-in descriptor file looks like.
It stores version information, user friendly descriptions, and – most importantly – module loading rules.
#29: As you can see, most of the information is used to display details about the plug-in in the Editor’s plug-in manager UI.
#30: However, the “Modules” section is used by the Engine to determine which modules of a plug-in are loaded and when.
Let’s take a closer look..
#31: Each of the plug-in’s modules may have an entry in this section.
If it is listed here, the Engine will try to automatically load the module on startup.
#32: The “Name” field must match the name of the module that should be loaded.
#33: The “Type” specifies under what circumstances the module is loaded. For example, “Runtime” means that the module should be loaded pretty much anywhere, including in the Engine, the Editor, games, and standalone programs. “RuntimeNoCommandlet” means that the module should be loaded anywhere, except in commandlets. “Editor” means, as you can guess, that the module should be loaded only in the Editor, but not in games or other programs.
#34: There are also different loading phases that determine when exactly in the startup phase the module should be loaded. This can be used to ensure that certain Engine dependencies are loaded before your plug-in loads, or to control the loading order between a plug-in’s modules.
#35: Last but not least, you can also blacklist and whitelist specific platforms for each module.
#36: Projects are the self-contained units that hold all the content (and optional code) that make up your games.
Code projects usually include one or more C++ modules. They may also contain plug-ins.
The “Source” directory of projects contains target build rules that are unique to projects.
A target is an executable to be built by UBT, and the target rules describe which modules are to be included.
Similar to plug-ins, projects also have a descriptor file.
#37: Project descriptors are similar to plug-in descriptors in that they are also JSON files describing the project, as well as loading rules for its modules.
#38: Whenever you add modules or plug-ins to your UE4 solution, you should run the GenerateProjectFiles.bat batch file, regenerate projects from within the Editor, or hit the re-generate project files button in the UnrealVS Visual Studio plug-in.
UBT will then search the entire solution directory for Build.cs files and generate a new Visual Studio solution file.
On macOS we generate Xcode project files.
#39: When compiling your project, UBT will locate all Build.cs files, compile them, create a dependency graph, generate compiler and linker settings, and then compile all C++ modules.
Modules are only compiled if they’re referenced somewhere, i.e. if it is listed in a project or plug-in descriptor, or if another module depends on it.
#40: Before we look at how to include third-party SDKs in plug-ins, I’d like to show you how we treat third-party dependencies in the Engine in general.
UE4 already includes a large number of dependencies.
If your project requires any of these, we recommend that you use the ones shipping with UE4, because then you can rest assured that they will work on all supported platforms.
#41: All third-party libraries are located in the /Engine/Source/ThirdParty directory.
Just like regular modules, they have their own Build.cs files. These specify public header files to be compiled into dependent modules, as well as public libraries to be linked into dependent modules.
Some third-party modules may also declare pre-processor definitions, for example for platform specific switches that can be used in your C++ code.
#42: We include source code for most third-party modules, but we don’t compile it when building UE4.
Instead we provide pre-compiled libraries for all supported platforms, so you don’t have to deal with that.
Internally, we use automated and manual ways to compile third-party dependencies.
For some dependencies that are particularly complicated, we even have specialized UAT scripts.
#43: If you’re curious how this works, you can find all UAT scripts in the /Programs/Automation directory of the UE4 solution.
The BuildThirdPartyLibs scripts, for example, will locate all UE4_BuildThirdPartyLib.bat batch files and execute them.
#44: In the Automation folder you can also find the special build script for PhysX that I mentioned.
#45: When we talked about modules, I showed you various build rules for specifying dependencies to other modules.
Some of these are also used to specify additional include directories for third-party SDKs
In addition to that, we also have a set of build rules to specify additional SDK library dependencies for linking.
#46: The PublicLibraryPaths property allows you to specify additional directories to be searched for libraries by the linker.
The actual libraries (usually .lib or .a files) to be linked are specified using the PublicAdditionalLibraries property.
There are also some platform specific build rule properties, for example for adding Xcode frameworks on macOS and iOS.
#47: If you use remote compilation, for example when compiling for macOS from Visual Studio on a Windows computer, the remote machine performing the compilation may need additional tools or files that have to be copied from your PC.
These can be specified using the PublicAdditionalShadowFiles property.
Lastly, after successfully compiling and linking your libraries, you also need to tell UBT which DLLs or other files have to be included in the packaged build.
If you don’t do this, then those required files will be missing, and while your game works fine on your own PC, it may not work on anybody else’s device.
#48: Third-party dependencies for plug-ins are usually placed into a “ThirdParty” folder inside the plug-in’s root directory, but this is not required.
Everything I have shown you about Engine third-party dependencies also applies to Plug-in third-party dependencies.
#49: On some platforms you may have to consider additional things when including third-party dependencies.
On Linux, for example, we highly recommend that you link against our bundled libc++ standard library, because that will insure that your plug-in works everywhere UE4 works.
All modules that are part of a UE4 solution are already linked against our libc++, so this only applies if you’re compiling other libraries yourself outside of the UE4 solution.
Starting with 4.14, we support CentOS 7. We do not target any specific Ubuntu version, but since we bundle the C++ standard library, everything should work on most Linux distributions.
#50: One thing to keep in mind on Linux is that we currently do not have a convenient to add look-up paths for runtime libraries.
The best option is to manually load your libraries via GetDllHandle (= UE4’s dlopen() equivalent) before starting to call functions from your imported library.
This is possible, because we use weak symbol resolution on Linux by default, which means that your imported symbols won’t be looked up until you use them for the first time.
Another, somewhat hacky solution is to modify the RPATH settings in LinuxToolchain.cs
On macOS we are already able to automatically generate RPATH from the RuntimeDependencies property that I have shown you earlier.
We are hoping to make this work soon for Linux as well.
#51: On the Android target platform things can get more complicated, because there are many possible architectures to support.
UBT expects that you have library sub-folders for each supported architecture, such as ARM64 or x64.
It does not matter where exactly these directories are located, but they have to have the same name as the architecture.
In your module’s *.Build.cs file you actually specify the library dependencies for ALL architectures at once.
Depending on which architecture you’re compiling for, UBT will later automatically filter out the unnecessary dependencies based on the sub-folder’s name.
For example, if you’re compiling only for ARM64, then the dependencies containing “x64” or “ARMv7” will be ignored by UBT.
#52: Android is presenting additional challenges during compilation and packaging, because it involves extra steps and tools.
Because UBT is not aware of these Android specific requirements, and because the build rules can get quite complicated, we actually developed an XML based scripting language to deal with this.
UPL was originally called Android Plug-in Language (APL), but it can now also be used for other platforms.
Besides Android, it is currently also used for iOS (to modify .plist files).
In the UE4 code you may still find references to both APL and UPL – they are the same thing.
On Android in particular, UPL is generally used to inject Java code, and to add or remove files to/from Android packages.
#53: Here is an excerpt of the UPL script for the GearVR plug-in.
As you can see, it is all XML code.
#54: Each UPL script runs in its own context, i.e. <init> in GoogleVR and <init> in GearVR won’t collide.
#55: You can declare and assign variables.
These variables will be visible throughout the rest of the section and any subsequent section.
#56: There are some XML tags that provide shortcuts to common logic, such as conditional code for specific target architectures.
#57: You can also declare regular conditional code.
#58: It’s also possible to read configuration values from INI files.
#59: <init> is not the only section. There are many others. The platform specific implementation of UPL determines which sections are available.
Sections are evaluated sequentially.
#60: Now, let’s quickly take a look at how you get your plug-in onto the UE4 Marketplace.
All the steps required for submission are described on our web site.
We have a web form where you can submit all your files, but it’s not that great yet.
Until we improved it, a lot of the communication with you will also take place via email.
#61: After you submitted your project or plug-in, we will audit it.
We will make sure that all the information you provided is correct.
We will also do some basic code review and functional testing.
However, we don’t enforce UE4 coding guidelines.
#62: When your submission requires third-party libraries, you may only include those that have a permissive license.
Non-permissive dependencies have to be kept as a separate download for the user.
#63: When users download your plug-ins from the UE4 Marketplace, they will be installed as Engine plug-ins.
We include pre-compiled binaries for all supported platforms, as well as the source code.
However, only the source code to compile and link the plug-in into UE4 is required. You can keep your secret intellectual property inside of static libraries for which you do not have to provide source code.
Lastly, we do not automatically check whether your plug-in still works in future versions of UE4. You have to resubmit your work for every version you wish to support.
#64: Now that you know the basics about integrating third-party dependencies into your projects and plug-ins, let’s take a look at a few examples.
For the purpose of this presentation I created a plug-in (called LogLed) that integrates the Logitech LED SDK for driving illuminated keyboards and mice.
Zak will show you later how to build a small game around it using UE4 Blueprints.
The plug-in can be found on GitHub (https://github.com/ue4plugins/LogiLed).
By the way, the https://github.com/ue4plugins/ GitHub depot contains some other interesting plug-ins as well.
We use it as a place for experimental plug-ins that we do not want to include with UE4.
#65: The Logitech SDK is very straightforward, so that the LogiLed plug-in is extremely simple as well.
The first half of the module build rules define our Engine module dependencies and private include directories.
If we’re building the Editor, then we also include the UnrealEd module, so that we can enable some Editor specific features (i.e. PIE support) in the plug-in.
#66: The second half the build rules define the third-party library dependencies.
Since we only support Windows and simply link against a .lib file to import the DLL functions, there aren’t any big surprise here.
First we try to figure out the path to the ThirdParty directory, then we add the path to the include files, and finally the path and names of the libraries to link against.
#67: VlcMedia is another experimental plug-in on GitHub that implements a Media Framework player using the VideoLAN codec.
#68: Here, things are a little more complicated.
Instead of linking against a static .lib to import the DLL functions, I decided to look up all function imports at runtime.
As a result, the build rules only define which DLL files are to be included in the packaged build via the RuntimeDepdencies property.
All the rest happens in the C++ code.
#69: Here’s an excerpt of the C++ code that imports the DLL function pointers.
Note that we’re first determining the path to the DLLs and then manually loading them.
#70: Further down in the code, we can then import the functions exported by the VLC libraries.
The VLC_IMPORT is a local macro that makes this a little bit more convenient (implementation not shown here).
#71: The GearVR plug-in makes extensive use of Unreal Plug-in Language (UPL).
Here you can see the UPL file (still called “APL” for historic reasons) being added to the receipt, which will cause it to be executed during the build.
On Android, receipt files contain everything about a target being built.
#72: There are some interesting things happening in the UPL file – injection of Java code, for example.
#73: How does the Java code get injected into the correct location of the GameActivity.java file?
UPL actually parses the java file for special insertion tags that start with //$$
It replaces the text with the one from the XML file and saves it to an output file, which gets built.
#74: If you’re curious, you can find the replace logic in UEDeployAndroid.cs, which also implements the other Android specific UPL sections.
#75: Here is another section of the same UPL file that copies additional resource files into the Android package.
At the bottom we are removing signature files when making a Shipping build.
#76: With that I would like to conclude this talk.
Make sure to check out our extensive materials on the internet, all of which are available for free.
Are there any questions I can answer right now?