SlideShare a Scribd company logo
1 of 24
Programming in UE4
A Quick Orientation for Coders
Gerke Max Preussner
max.preussner@epicgames.com
Programming
Is Awesome
Sucks
But…
Because you can:
• Create something from nothing
• Bring dead matter to life
• Improve the human condition
• Impress your girl/boyfriend/cat
• Make a good living in the process
Programming
Is Awesome
Sucks
But…
Because:
• Programmers are crazy
• Programming languages & tools suck
• All code is bad and buggy
• There is never enough time to do it right
• You are always behind the curve
Peter Welch: http://stilldrinking.org/programming-sucks
Programming
Is Awesome
Sucks
But…
Don’t get discouraged!
• If it was easy, a monkey could do it!
• Don’t be afraid of programming languages
• Don’t get discouraged by complex code bases
There are ways to make your life easier
• Know your tools and keep learning
• Software Design and Architectural Patterns
• Coding Guidelines & Best Practices
• Transfer knowledge with your peers
Getting Started
Get All The Things!
1. Download and install Unreal Engine 4
2. Sync the latest code from GitHub (either Release or Master branch)
3. Don’t forget to download & install the required dependencies!
Tools:
• Windows: Visual Studio, UnrealVS, Visual Assist X (recommended)
• MacOS: Xcode
• Linux: Check the Wiki for latest instructions!
For everything else see:
https://docs.unrealengine.com/latest/INT/Programming/QuickStart/
Common Blockers
Compiling
Acronyms
Entry Point
Compiling is handled through Unreal Build Tool (UBT)
• Solution/Projects in Visual Studio & Xcode are a lie!
• Pre-processes header files (UHT)
• Generates magic glue code
• Invokes platform specific compilers
• Supports remote compiling, too
• Also generates IDE project files
Build Rules
Dependency Graph
UBT, UHT, UAT Projects
Common Blockers
Compiling
Acronyms
Entry Point
Acronym Soup…
• UBT – Unreal Build Tool
• UHT – Unreal Header Tool
• UAT – Unreal Automation Tool
• UFE – Unreal Frontend
• BP – Blueprint
• CDO – Class Default Object
• INI – Text Based Configuration File
• etc.
Common Blockers
Compiling
Acronyms
Entry Point
… and Code Names, too!
• Cascade – Particle System Editing Tool
• Cooking – Process of optimizing game content
• Lightmass – Pre-computed Global Illuminaton
• Matinee – In-game Cinematics Tool
• Persona – Animation Editing Tool
• PhAT – Physics Asset Tool
• Swarm – Distributed Computing Client
• etc.
Common Blockers
Compiling
Acronyms
Entry Point
Where Is the Main Loop?
• LaunchEngineLoop.cpp
• It’s really complicated (and everybody hates it)
• Please don’t bother with this – start with our tutorials!
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
We Use Prefixes for All Types
• U – UObject derrived class, i.e. UTexture
• A – AActor derrived class, i.e. AGameMode
• F – All other classes and structs, i.e. FName, FVector
• T – Template, i.e. TArray, TMap, TQueue
• I – Interface class, i.e. ITransaction
• E – Enumeration type, i.e. ESelectionMode
• b – Boolean value, i.e. bEnabled
Everything in Unreal is Pascal Case (Upper Camel Case)
• Function names and function parameters, too
• Even local and loop variables!
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
UObjects Work Around Limitations in C++
• Run-time reflection of class properties and functions
• Serialization from/to disk and over the network
• Garbage collection
• Meta data
• Also: Blueprint integration
Decorate regular C++ Classes with Magic Macros
• UCLASS – for class types
• USTRUCT – for struct types
• UFUNCTION – for class and struct member functions
• UPROPERTY – for class and struct variables
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
// Example (omitting some more advanced details)
USTRUCT() // magic!
struct FVector2D
{
UPROPERTY() // magic!
float X;
UPROPERTY() // magic!
float Y;
UFUNCTION () // magic!
float GetLength() const;
};
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
Fundamental Types
• We don’t use C++ integer types (char, short, int, long, etc.)
• Custom typedef’s for ints & strings in GenericPlatform.h
(int32, uint32, uint64, TCHAR, ANSICHAR etc.)
• Numeric type traits in NumericLimits.h
Common Structures
• FBox, FColor, FGuid, FVariant, FVector, TBigInt, TRange
• And many more in Core module
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
Containers
• TArray, TSparseArray – Dynamic arrays
• TLinkedList, TDoubleLinkedList
• TMap – Key-value hash table
• TQueue – Lock free FIFO
• TSet – Unordered set (without duplicates)
• And many more in Core module
Delegates
• Unicast and multicast delegates
• Also thread-safe variants…
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
Smart Pointers
• TSharedPtr, TSharedRef – for regular C++ objects
• TWeakPtr – for regular C++ objects
• TWeakObjPtr – for UObjects
• TAutoPtr, TScopedPtr
• TUniquePtr
• Similar to boost:: & std:: implementations
• Also thread-safe variants
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
String Types
• FString – Regular string
• FText – Localized string, used heavily in Slate UI
• FName – String hash, used heavily in UObjects
String Literals
• TEXT() – Creates a regular string
TEXT(“Hello”);
• LOCTEXT() – Creates a localized string
LOCTEXT(“Namespace”, “Name”, “Hello”);
• NSLOCTEXT() – LOCTEXT with scoped namespace
NSLOCTEXT(“Name”, “Hello”);
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
FNames are case-insensitive!
• Can’t rename misspelled names in the Editor (FIXED!)
• Can’t name a C++ property ‘Blast’ if one ‘bLast’ exists
Unrealisms
Type Names
UObjects
Basic Types
Strings
Macros
Logging
• UE_LOG, also GLog->Logf()
Assertions
• check(), checkSlow(), ensure()
Localization
• LOCTEXT_NAMESPACE, LOCTEXT, etc.
Slate (UI Framework)
• SLATE_BEGIN_ARGS, SLATE_ATTRIBUTE, etc.
Best Practices
Guidelines
Principles
Coding Guidelines
• Posted on http://docs.unrealengine.com
• There are some inconsistencies in the code base
• If in doubt, follow existing style in current code file
Naming Conventions
• Choose descriptive names that are as short as possible
• Also for local and loop variables!
• Avoid your own acronyms
Best Practices
Guidelines
Principles
General Principles
• KISS, YAGNI
• Composition vs. inheritance
• Avoid tight coupling of code and modules
• Many trivial instead of few complicated components
Design Patterns
• SOLID (especially S, O, L and I; DI is not elegant in C++)
• Hollywood Principle (especially for Slate & game code)
• GOF, EIP
Methodologies
• DDD, TDD (we support unit tests), AOP
Questions?
Documentation, Tutorials and Help at:
• AnswerHub:
• Engine Documentation:
• Official Forums:
• Community Wiki:
• YouTube Videos:
• Community IRC:
Unreal Engine 4 Roadmap
• lmgtfy.com/?q=Unreal+engine+Trello+
http://answers.unrealengine.com
http://docs.unrealengine.com
http://forums.unrealengine.com
http://wiki.unrealengine.com
http://www.youtube.com/user/UnrealDevelopmentKit
#unrealengine on FreeNode

More Related Content

What's hot

Plug-ins & Third-Party SDKs in UE4
Plug-ins & Third-Party SDKs in UE4Plug-ins & Third-Party SDKs in UE4
Plug-ins & Third-Party SDKs in UE4Gerke Max Preussner
 
East Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & ToolsEast Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & ToolsGerke Max Preussner
 
West Coast DevCon 2014: The Slate UI Framework (Part 1) - Introduction
West Coast DevCon 2014: The Slate UI Framework (Part 1) - IntroductionWest Coast DevCon 2014: The Slate UI Framework (Part 1) - Introduction
West Coast DevCon 2014: The Slate UI Framework (Part 1) - IntroductionGerke Max Preussner
 
West Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders
West Coast DevCon 2014: Programming in UE4 - A Quick Orientation for CodersWest Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders
West Coast DevCon 2014: Programming in UE4 - A Quick Orientation for CodersGerke Max Preussner
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...Gerke Max Preussner
 
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & Infrastructure
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & InfrastructureWest Coast DevCon 2014: Build Automation - Epic’s Build Tools & Infrastructure
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & InfrastructureGerke Max Preussner
 
East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...Gerke Max Preussner
 
West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...Gerke Max Preussner
 
West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...
West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...
West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...Gerke Max Preussner
 
From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4Martin Pernica
 
Unreal Engine 4 Introduction
Unreal Engine 4 IntroductionUnreal Engine 4 Introduction
Unreal Engine 4 IntroductionSperasoft
 
Future of unreal
Future of unreal Future of unreal
Future of unreal Ning Hu
 
Endless runner game in unreal engine 4
Endless runner game in unreal engine 4Endless runner game in unreal engine 4
Endless runner game in unreal engine 4Vasilis Kamakaris
 
Game Programming - Cloud Development
Game Programming - Cloud DevelopmentGame Programming - Cloud Development
Game Programming - Cloud DevelopmentNick Pruehs
 
Making an independend MMO - The Albion Online Story
Making an independend MMO - The Albion Online StoryMaking an independend MMO - The Albion Online Story
Making an independend MMO - The Albion Online StoryDavid Salz
 
Developing Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David StelzerDeveloping Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David StelzerJessica Tams
 
2D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 2014
2D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 20142D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 2014
2D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 2014Murat Gürel
 
Unreal Engine (For Creating Games) Presentation
Unreal Engine (For Creating Games) PresentationUnreal Engine (For Creating Games) Presentation
Unreal Engine (For Creating Games) PresentationNitin Sharma
 

What's hot (20)

Plug-ins & Third-Party SDKs in UE4
Plug-ins & Third-Party SDKs in UE4Plug-ins & Third-Party SDKs in UE4
Plug-ins & Third-Party SDKs in UE4
 
East Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & ToolsEast Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
East Coast DevCon 2014: The Slate UI Framework - Architecture & Tools
 
West Coast DevCon 2014: The Slate UI Framework (Part 1) - Introduction
West Coast DevCon 2014: The Slate UI Framework (Part 1) - IntroductionWest Coast DevCon 2014: The Slate UI Framework (Part 1) - Introduction
West Coast DevCon 2014: The Slate UI Framework (Part 1) - Introduction
 
West Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders
West Coast DevCon 2014: Programming in UE4 - A Quick Orientation for CodersWest Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders
West Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
 
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & Infrastructure
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & InfrastructureWest Coast DevCon 2014: Build Automation - Epic’s Build Tools & Infrastructure
West Coast DevCon 2014: Build Automation - Epic’s Build Tools & Infrastructure
 
East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
East Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
 
West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
West Coast DevCon 2014: Concurrency & Parallelism in UE4 - Tips for programmi...
 
West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...
West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...
West Coast DevCon 2014: The Slate UI Framework (Part 2) - Game UI & Unreal Mo...
 
From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4From Unity3D to Unreal Engine 4
From Unity3D to Unreal Engine 4
 
Unreal Engine 4 Introduction
Unreal Engine 4 IntroductionUnreal Engine 4 Introduction
Unreal Engine 4 Introduction
 
Future of unreal
Future of unreal Future of unreal
Future of unreal
 
Endless runner game in unreal engine 4
Endless runner game in unreal engine 4Endless runner game in unreal engine 4
Endless runner game in unreal engine 4
 
Alexey Savchenko, Unreal Engine
Alexey Savchenko, Unreal EngineAlexey Savchenko, Unreal Engine
Alexey Savchenko, Unreal Engine
 
Game Programming - Cloud Development
Game Programming - Cloud DevelopmentGame Programming - Cloud Development
Game Programming - Cloud Development
 
Making an independend MMO - The Albion Online Story
Making an independend MMO - The Albion Online StoryMaking an independend MMO - The Albion Online Story
Making an independend MMO - The Albion Online Story
 
Developing Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David StelzerDeveloping Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David Stelzer
 
2D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 2014
2D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 20142D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 2014
2D Endless Runner in Unity for Mobile - GDG DevFest Istanbul 2014
 
Delphi L01 Intro
Delphi L01 IntroDelphi L01 Intro
Delphi L01 Intro
 
Unreal Engine (For Creating Games) Presentation
Unreal Engine (For Creating Games) PresentationUnreal Engine (For Creating Games) Presentation
Unreal Engine (For Creating Games) Presentation
 

Similar to East Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders

TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!Alessandro Giorgetti
 
COMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and SoliCOMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and SoliMark Billinghurst
 
UsingCPP_for_Artist.ppt
UsingCPP_for_Artist.pptUsingCPP_for_Artist.ppt
UsingCPP_for_Artist.pptvinu28455
 
Preventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingPreventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingYaser Zhian
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harknessozlael ozlael
 
Who go Types in my Systems Programing!
Who go Types in my Systems Programing!Who go Types in my Systems Programing!
Who go Types in my Systems Programing!Jared Roesch
 
Posladkajmo si JavaScript z uporabo TypeScript a
Posladkajmo si JavaScript z uporabo TypeScript aPosladkajmo si JavaScript z uporabo TypeScript a
Posladkajmo si JavaScript z uporabo TypeScript aPeter A. Pirc
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011Patrick Walton
 
Java - A broad introduction
Java - A broad introductionJava - A broad introduction
Java - A broad introductionBirol Efe
 
Programming Languages #devcon2013
Programming Languages #devcon2013Programming Languages #devcon2013
Programming Languages #devcon2013Iván Montes
 
Charles nutter star techconf 2011 - jvm languages
Charles nutter   star techconf 2011 - jvm languagesCharles nutter   star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languagesStarTech Conference
 
Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Andrei KUCHARAVY
 
python presntation 2.pptx
python presntation 2.pptxpython presntation 2.pptx
python presntation 2.pptxArpittripathi45
 
Beginning Java for .NET developers
Beginning Java for .NET developersBeginning Java for .NET developers
Beginning Java for .NET developersAndrei Rinea
 
One Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform ExploitationOne Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform ExploitationQuinn Wilton
 
Python intro and competitive programming
Python intro and competitive programmingPython intro and competitive programming
Python intro and competitive programmingSuraj Shah
 

Similar to East Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders (20)

TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!
 
COMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and SoliCOMP 4026 Lecture 5 OpenFrameworks and Soli
COMP 4026 Lecture 5 OpenFrameworks and Soli
 
UsingCPP_for_Artist.ppt
UsingCPP_for_Artist.pptUsingCPP_for_Artist.ppt
UsingCPP_for_Artist.ppt
 
Preventing Complexity in Game Programming
Preventing Complexity in Game ProgrammingPreventing Complexity in Game Programming
Preventing Complexity in Game Programming
 
0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
 
Who go Types in my Systems Programing!
Who go Types in my Systems Programing!Who go Types in my Systems Programing!
Who go Types in my Systems Programing!
 
Rustbridge
RustbridgeRustbridge
Rustbridge
 
Posladkajmo si JavaScript z uporabo TypeScript a
Posladkajmo si JavaScript z uporabo TypeScript aPosladkajmo si JavaScript z uporabo TypeScript a
Posladkajmo si JavaScript z uporabo TypeScript a
 
Rust All Hands Winter 2011
Rust All Hands Winter 2011Rust All Hands Winter 2011
Rust All Hands Winter 2011
 
Java - A broad introduction
Java - A broad introductionJava - A broad introduction
Java - A broad introduction
 
David buksbaum a-briefintroductiontocsharp
David buksbaum a-briefintroductiontocsharpDavid buksbaum a-briefintroductiontocsharp
David buksbaum a-briefintroductiontocsharp
 
InfectNet Technical
InfectNet TechnicalInfectNet Technical
InfectNet Technical
 
Programming Languages #devcon2013
Programming Languages #devcon2013Programming Languages #devcon2013
Programming Languages #devcon2013
 
Charles nutter star techconf 2011 - jvm languages
Charles nutter   star techconf 2011 - jvm languagesCharles nutter   star techconf 2011 - jvm languages
Charles nutter star techconf 2011 - jvm languages
 
Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1Introduction to the intermediate Python - v1.1
Introduction to the intermediate Python - v1.1
 
python presntation 2.pptx
python presntation 2.pptxpython presntation 2.pptx
python presntation 2.pptx
 
Beginning Java for .NET developers
Beginning Java for .NET developersBeginning Java for .NET developers
Beginning Java for .NET developers
 
One Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform ExploitationOne Shellcode to Rule Them All: Cross-Platform Exploitation
One Shellcode to Rule Them All: Cross-Platform Exploitation
 
Python intro and competitive programming
Python intro and competitive programmingPython intro and competitive programming
Python intro and competitive programming
 

Recently uploaded

Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jNeo4j
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdfAndrey Devyatkin
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 

Recently uploaded (20)

Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 

East Coast DevCon 2014: Programming in UE4 - A Quick Orientation for Coders

  • 1. Programming in UE4 A Quick Orientation for Coders Gerke Max Preussner max.preussner@epicgames.com
  • 2. Programming Is Awesome Sucks But… Because you can: • Create something from nothing • Bring dead matter to life • Improve the human condition • Impress your girl/boyfriend/cat • Make a good living in the process
  • 3. Programming Is Awesome Sucks But… Because: • Programmers are crazy • Programming languages & tools suck • All code is bad and buggy • There is never enough time to do it right • You are always behind the curve Peter Welch: http://stilldrinking.org/programming-sucks
  • 4. Programming Is Awesome Sucks But… Don’t get discouraged! • If it was easy, a monkey could do it! • Don’t be afraid of programming languages • Don’t get discouraged by complex code bases There are ways to make your life easier • Know your tools and keep learning • Software Design and Architectural Patterns • Coding Guidelines & Best Practices • Transfer knowledge with your peers
  • 5. Getting Started Get All The Things! 1. Download and install Unreal Engine 4 2. Sync the latest code from GitHub (either Release or Master branch) 3. Don’t forget to download & install the required dependencies! Tools: • Windows: Visual Studio, UnrealVS, Visual Assist X (recommended) • MacOS: Xcode • Linux: Check the Wiki for latest instructions! For everything else see: https://docs.unrealengine.com/latest/INT/Programming/QuickStart/
  • 6. Common Blockers Compiling Acronyms Entry Point Compiling is handled through Unreal Build Tool (UBT) • Solution/Projects in Visual Studio & Xcode are a lie! • Pre-processes header files (UHT) • Generates magic glue code • Invokes platform specific compilers • Supports remote compiling, too • Also generates IDE project files
  • 9. UBT, UHT, UAT Projects
  • 10. Common Blockers Compiling Acronyms Entry Point Acronym Soup… • UBT – Unreal Build Tool • UHT – Unreal Header Tool • UAT – Unreal Automation Tool • UFE – Unreal Frontend • BP – Blueprint • CDO – Class Default Object • INI – Text Based Configuration File • etc.
  • 11. Common Blockers Compiling Acronyms Entry Point … and Code Names, too! • Cascade – Particle System Editing Tool • Cooking – Process of optimizing game content • Lightmass – Pre-computed Global Illuminaton • Matinee – In-game Cinematics Tool • Persona – Animation Editing Tool • PhAT – Physics Asset Tool • Swarm – Distributed Computing Client • etc.
  • 12. Common Blockers Compiling Acronyms Entry Point Where Is the Main Loop? • LaunchEngineLoop.cpp • It’s really complicated (and everybody hates it) • Please don’t bother with this – start with our tutorials!
  • 13. Unrealisms Type Names UObjects Basic Types Strings Macros We Use Prefixes for All Types • U – UObject derrived class, i.e. UTexture • A – AActor derrived class, i.e. AGameMode • F – All other classes and structs, i.e. FName, FVector • T – Template, i.e. TArray, TMap, TQueue • I – Interface class, i.e. ITransaction • E – Enumeration type, i.e. ESelectionMode • b – Boolean value, i.e. bEnabled Everything in Unreal is Pascal Case (Upper Camel Case) • Function names and function parameters, too • Even local and loop variables!
  • 14. Unrealisms Type Names UObjects Basic Types Strings Macros UObjects Work Around Limitations in C++ • Run-time reflection of class properties and functions • Serialization from/to disk and over the network • Garbage collection • Meta data • Also: Blueprint integration Decorate regular C++ Classes with Magic Macros • UCLASS – for class types • USTRUCT – for struct types • UFUNCTION – for class and struct member functions • UPROPERTY – for class and struct variables
  • 15. Unrealisms Type Names UObjects Basic Types Strings Macros // Example (omitting some more advanced details) USTRUCT() // magic! struct FVector2D { UPROPERTY() // magic! float X; UPROPERTY() // magic! float Y; UFUNCTION () // magic! float GetLength() const; };
  • 16. Unrealisms Type Names UObjects Basic Types Strings Macros Fundamental Types • We don’t use C++ integer types (char, short, int, long, etc.) • Custom typedef’s for ints & strings in GenericPlatform.h (int32, uint32, uint64, TCHAR, ANSICHAR etc.) • Numeric type traits in NumericLimits.h Common Structures • FBox, FColor, FGuid, FVariant, FVector, TBigInt, TRange • And many more in Core module
  • 17. Unrealisms Type Names UObjects Basic Types Strings Macros Containers • TArray, TSparseArray – Dynamic arrays • TLinkedList, TDoubleLinkedList • TMap – Key-value hash table • TQueue – Lock free FIFO • TSet – Unordered set (without duplicates) • And many more in Core module Delegates • Unicast and multicast delegates • Also thread-safe variants…
  • 18. Unrealisms Type Names UObjects Basic Types Strings Macros Smart Pointers • TSharedPtr, TSharedRef – for regular C++ objects • TWeakPtr – for regular C++ objects • TWeakObjPtr – for UObjects • TAutoPtr, TScopedPtr • TUniquePtr • Similar to boost:: & std:: implementations • Also thread-safe variants
  • 19. Unrealisms Type Names UObjects Basic Types Strings Macros String Types • FString – Regular string • FText – Localized string, used heavily in Slate UI • FName – String hash, used heavily in UObjects String Literals • TEXT() – Creates a regular string TEXT(“Hello”); • LOCTEXT() – Creates a localized string LOCTEXT(“Namespace”, “Name”, “Hello”); • NSLOCTEXT() – LOCTEXT with scoped namespace NSLOCTEXT(“Name”, “Hello”);
  • 20. Unrealisms Type Names UObjects Basic Types Strings Macros FNames are case-insensitive! • Can’t rename misspelled names in the Editor (FIXED!) • Can’t name a C++ property ‘Blast’ if one ‘bLast’ exists
  • 21. Unrealisms Type Names UObjects Basic Types Strings Macros Logging • UE_LOG, also GLog->Logf() Assertions • check(), checkSlow(), ensure() Localization • LOCTEXT_NAMESPACE, LOCTEXT, etc. Slate (UI Framework) • SLATE_BEGIN_ARGS, SLATE_ATTRIBUTE, etc.
  • 22. Best Practices Guidelines Principles Coding Guidelines • Posted on http://docs.unrealengine.com • There are some inconsistencies in the code base • If in doubt, follow existing style in current code file Naming Conventions • Choose descriptive names that are as short as possible • Also for local and loop variables! • Avoid your own acronyms
  • 23. Best Practices Guidelines Principles General Principles • KISS, YAGNI • Composition vs. inheritance • Avoid tight coupling of code and modules • Many trivial instead of few complicated components Design Patterns • SOLID (especially S, O, L and I; DI is not elegant in C++) • Hollywood Principle (especially for Slate & game code) • GOF, EIP Methodologies • DDD, TDD (we support unit tests), AOP
  • 24. Questions? Documentation, Tutorials and Help at: • AnswerHub: • Engine Documentation: • Official Forums: • Community Wiki: • YouTube Videos: • Community IRC: Unreal Engine 4 Roadmap • lmgtfy.com/?q=Unreal+engine+Trello+ http://answers.unrealengine.com http://docs.unrealengine.com http://forums.unrealengine.com http://wiki.unrealengine.com http://www.youtube.com/user/UnrealDevelopmentKit #unrealengine on FreeNode

Editor's Notes

  1. *** Prepared and presented by Gerke Max Preussner for East Coast MiniDevCon 2014, November 12-13th Hi, my name is Max. I work as a Sr. Engine Programmer at Epic Games and would like to give you a quick introduction to programming in Unreal Engine 4. Who in the audience is a programmer? Who thinks that programming is awesome? Yes, programming is awesome…
  2. … because it empowers you to create really cool things from the comfort of your armchair, and to make other people’s life better, or at least more entertaining.
  3. Programming also really sucks… because all programmers are crazy! Who read Peter Welch’s blog post “Programming Sucks”? It is the most accurate description of what it is like to be a programmer and work in a programming team. Welch argues that all programming teams are composed by and of crazy people. He also describes how most programmers start writing perfect little snowflakes, and on Friday they are told that six hundred more snowflakes are needed by next Tuesday. And then a lot of sketchy code gets dumped into a pile of snow that quickly melts together, and some of it turns yellow because a cat peed on it. All large teams end up working this way, and Epic is no exception. We, too, are crazy – perhaps in a good way, or at least with good intentions. We are successful, because we have more snowflakes than others, and the remaining pile is split into manageable parts, and the yellow snow is hidden, because someone leaned a Picasso against it. Who thinks that C++ is awesome? C++ also sucks… but so does every other programming language! They all suck, just in different ways. Most of the time it is because we are trying to use them in ways they were not designed for, and there is no language that solves all software engineering problems well.
  4. But do not despair! I will quickly show you a few things to get up and running with Unreal and make your life easier.
  5. By the way, we have really great documentation on our website for getting you started, so I won’t go into too much detail. After installing UE4 you can go to GitHub and download the latest source code. Don’t forget to download and install the required dependencies (ZIP files) as well (instructions are on the GitHub page). We currently support development on Windows and MacOS, and there is also preliminary support for Linux. If you work in Visual Studio we highly recommend installing our UnrealVS plug-in.
  6. Now, let’s start with some of the most common blockers for programmers just starting with Unreal Engine. The first thing that throws off a lot of people is that compilation is not actually performed by Visual Studio or Xcode, but by our Unreal Build Tool. Visual Studio and XCode solutions are only generated for your convenience. We do this so that we can support different IDEs. In combination with Unreal Header Tool, it also performs a lot of code pre-processing. I will talk about this in more detail in another presentation later today.
  7. UBT uses special C# files (*.Build.cs and *.Target.cs) that you create inside your module directories to figure out what it needs to do. Here you can see the build and target rules files for QAGame, a special game that our QA team uses for internal testing.
  8. Another little known feature of UBT is the ability to generate dependency graph data that can be visualized. Here is a screenshot of a JavaScript based visualizer that shows a section of our code base.
  9. The full source code for all three tools is included with the Engine. You can find it in the Engine’s “Programs” directory on GitHub. Besides UBT and UHT there is also UAT (Unreal Automation Tool), which is used for packaging, launching and deploying your projects.
  10. By now you are probably aware of our generous use of acronyms. I already mentioned UBT, UHT and UAT, and there are many others. Don’t worry, you will quickly learn and get used to all of them.
  11. We also use code names for some of our tools, and you may stumble upon them in our documentation. The names are often chosen by the developers themselves. For example, Cascade is our particle system editor. It will soon be replaced with a completely rewritten version that is code named Niagara. Swarm is a C# program that allows for distributing expensive work to other computers on your network. It is currently only used by Lightmass and will soon be rewritten C++.
  12. If you have experience writing your own little game from scratch, you may be tempted to locate our Engine’s main entry point in an attempt to learn something about how it all works. This is the wrong way to get started. You cannot possibly learn anything useful from this, because most of the code you will use on a daily basis is on a much higher conceptual layer… with about two million lines of other stuff in between. Read and watch our programming tutorials instead!
  13. You will notice that we use prefixes for all our types, and there is no logical explanation for it. The story goes that Tim Sweeney, when he started working on Unreal Engine in his Garage, added FVector for 3D vectors with floating point components and a U-prefix for Unreal game classes. When other programmers joined they assumed that these were naming conventions… and that’s how snowflakes turn into yellow snow. We also use upper-case for all names in C++. It may really upset your OCD, but please don’t try to fight this convention as it will help keeping everything consistent. It may take a while, but you will get used to it.
  14. C++ is great for a lot of things, but it is also lacking useful features that are present in more modern programming languages, such as Java or C#. Runtime reflection, garbage collection and automatic serialization are the most important ones. We would still like to use those features, so we implemented them on top of C++ with the help of macros that will be parsed by Unreal Header Tool. These special decorators will cause UHT to automatically generate all the glue code that is required to make this work.
  15. Here is an example for how a C++ structure for 3D vectors may be marked up in this way. From this, Unreal Header Tool will generate all the glue code, and you will most likely never have to see it.
  16. All our fundamental types are declared in the Core module. We have platform specific type definitions for numeric types and strings. We don’t actually use the standard numeric types that are part of the C++ standard. This allows us to hide platform specific behavior of fundamental types.
  17. The Core module also contains many generic container types. We also have an implementation for various kinds of event delegates…
  18. There is also a library of smart pointer implementations. The most common ones are shared pointers, which also come with thread-safe variants. Shared pointers simplify the lifetime management of objects, and we use them often.
  19. String types can be a bit confusing at first, because we distinguish between regular and localized string objects. They each come with special macros for string literals. We also have so called FNames, which store string values in a global hash table. These are very heavily used in the UObject sub-system to identify classes, functions and properties.
  20. Oh, and FNames are case-insensitive. If you ever wondered why you can’t correct spelling errors in the Editor right now, that is the reason why. And if you think that’s crazy… well… that’s because it is!
  21. We also use macros for less complicated things, such as logging and assertions. These are some macros you will likely encounter when working on your project.
  22. We have an internal coding guidelines document that is not yet posted on the Wiki. Since so many programmers from inside and outside Epic are involved, you will find some inconsistencies in style. And, of course, choosing good names for modules, classes, functions and variables is by far the most difficult task for programmers, but also one of the most important ones.
  23. We also try follow proper software design principles more often now. You may already be familiar with some of them, such as KISS and YAGNI. One of the most important, but less known object-oriented principle is SOLID. [more details here, if time available] We also use common patterns from Gang-Of-Four and Enterprise Integration Patterns. Other methodologies we’re experimenting with are Domain-Driven Design, Test-Driven Development and Aspect Oriented Programming for cross-cutting concerns. Those are all huge topics in themselves. I will have to talk about them another time.
  24. Make sure to check out our extensive materials on the internet, all of which are available for free – even if you don’t have a subscription yet. Any questions?