# Table of Contents - [New to Unreal Engine | Unreal Engine 5 - Notes](#new-to-unreal-engine-unreal-engine-5-notes) - [Extra | Unreal Engine 5 - Notes](#extra-unreal-engine-5-notes) - [Programming | Unreal Engine 5 - Notes](#programming-unreal-engine-5-notes) - [YouTube Channels | Unreal Engine 5 - Notes](#youtube-channels-unreal-engine-5-notes) - [Blueprints | Unreal Engine 5 - Notes](#blueprints-unreal-engine-5-notes) - [Blueprint Resources | Unreal Engine 5 - Notes](#blueprint-resources-unreal-engine-5-notes) - [Learning Blueprints | Unreal Engine 5 - Notes](#learning-blueprints-unreal-engine-5-notes) - [Overview | Unreal Engine 5 - Notes](#overview-unreal-engine-5-notes) - [Blueprint Node Types & Colors | Unreal Engine 5 - Notes](#blueprint-node-types-colors-unreal-engine-5-notes) - [Blueprint Graphs | Unreal Engine 5 - Notes](#blueprint-graphs-unreal-engine-5-notes) - [Blueprint Types | Unreal Engine 5 - Notes](#blueprint-types-unreal-engine-5-notes) - [Blueprint - Data Types | Unreal Engine 5 - Notes](#blueprint-data-types-unreal-engine-5-notes) - [Blueprint - Variables | Unreal Engine 5 - Notes](#blueprint-variables-unreal-engine-5-notes) - [Blueprint - Structs | Unreal Engine 5 - Notes](#blueprint-structs-unreal-engine-5-notes) - [Blueprint - Enums | Unreal Engine 5 - Notes](#blueprint-enums-unreal-engine-5-notes) - [Blueprint - Conditional Statements | Unreal Engine 5 - Notes](#blueprint-conditional-statements-unreal-engine-5-notes) - [Blueprint - Operators | Unreal Engine 5 - Notes](#blueprint-operators-unreal-engine-5-notes) - [Blueprint - Macro | Unreal Engine 5 - Notes](#blueprint-macro-unreal-engine-5-notes) - [Blueprint - Functions/Methods | Unreal Engine 5 - Notes](#blueprint-functions-methods-unreal-engine-5-notes) - [Blueprint - Function vs Macro vs Collapse Node | Unreal Engine 5 - Notes](#blueprint-function-vs-macro-vs-collapse-node-unreal-engine-5-notes) - [Blueprint - Data Structures | Unreal Engine 5 - Notes](#blueprint-data-structures-unreal-engine-5-notes) - [Blueprint - Loops | Unreal Engine 5 - Notes](#blueprint-loops-unreal-engine-5-notes) - [Blueprint - Events | Unreal Engine 5 - Notes](#blueprint-events-unreal-engine-5-notes) - [Blueprint - Hard vs Soft References | Unreal Engine 5 - Notes](#blueprint-hard-vs-soft-references-unreal-engine-5-notes) - [Blueprint - Collisions & Overlaps | Unreal Engine 5 - Notes](#blueprint-collisions-overlaps-unreal-engine-5-notes) - [Blueprint - Actor Communication | Unreal Engine 5 - Notes](#blueprint-actor-communication-unreal-engine-5-notes) - [Blueprint - Working with Data | Unreal Engine 5 - Notes](#blueprint-working-with-data-unreal-engine-5-notes) - [Blueprint - Time Based | Unreal Engine 5 - Notes](#blueprint-time-based-unreal-engine-5-notes) - [Blueprint - Exception Handling | Unreal Engine 5 - Notes](#blueprint-exception-handling-unreal-engine-5-notes) - [Blueprint - Working with Text | Unreal Engine 5 - Notes](#blueprint-working-with-text-unreal-engine-5-notes) - [Blueprint - Trace/Ray Cast | Unreal Engine 5 - Notes](#blueprint-trace-ray-cast-unreal-engine-5-notes) - [Blueprint - Namespaces | Unreal Engine 5 - Notes](#blueprint-namespaces-unreal-engine-5-notes) - [Blueprint Best Practices | Unreal Engine 5 - Notes](#blueprint-best-practices-unreal-engine-5-notes) - [C++ | Unreal Engine 5 - Notes](#c-unreal-engine-5-notes) - [Blueprint Programming Fundamentals Reference | Unreal Engine 5 - Notes](#blueprint-programming-fundamentals-reference-unreal-engine-5-notes) - [Web Browser | Unreal Engine 5 - Notes](#web-browser-unreal-engine-5-notes) - [Exposing C++ to Blueprints & the Editor | Unreal Engine 5 - Notes](#exposing-c-to-blueprints-the-editor-unreal-engine-5-notes) - [How To... | Unreal Engine 5 - Notes](#how-to-unreal-engine-5-notes) - [Reference an actor in the level | Unreal Engine 5 - Notes](#reference-an-actor-in-the-level-unreal-engine-5-notes) - [AI Resources | Unreal Engine 5 - Notes](#ai-resources-unreal-engine-5-notes) - [Artificial Intelligence (AI) | Unreal Engine 5 - Notes](#artificial-intelligence-ai-unreal-engine-5-notes) - [Programming Topics | Unreal Engine 5 - Notes](#programming-topics-unreal-engine-5-notes) - [Unreal Engine C++ Topics | Unreal Engine 5 - Notes](#unreal-engine-c-topics-unreal-engine-5-notes) - [C++ Resources | Unreal Engine 5 - Notes](#c-resources-unreal-engine-5-notes) - [String Handling | Unreal Engine 5 - Notes](#string-handling-unreal-engine-5-notes) - [Garbage Collection | Unreal Engine 5 - Notes](#garbage-collection-unreal-engine-5-notes) - [Project Structure & Coding Standard | Unreal Engine 5 - Notes](#project-structure-coding-standard-unreal-engine-5-notes) - [Object Pooling | Unreal Engine 5 - Notes](#object-pooling-unreal-engine-5-notes) - [Testing | Unreal Engine 5 - Notes](#testing-unreal-engine-5-notes) - [Tools | Unreal Engine 5 - Notes](#tools-unreal-engine-5-notes) - [Hard vs Soft References | Unreal Engine 5 - Notes](#hard-vs-soft-references-unreal-engine-5-notes) - [C++ Cheat Sheet for Unreal Engine | Unreal Engine 5 - Notes](#c-cheat-sheet-for-unreal-engine-unreal-engine-5-notes) - [How To... | Unreal Engine 5 - Notes](#how-to-unreal-engine-5-notes) - [Extra Programming Topics | Unreal Engine 5 - Notes](#extra-programming-topics-unreal-engine-5-notes) - [Game Flow | Unreal Engine 5 - Notes](#game-flow-unreal-engine-5-notes) - [Enhanced Input | Unreal Engine 5 - Notes](#enhanced-input-unreal-engine-5-notes) - [Tick & Tick Alternatives | Unreal Engine 5 - Notes](#tick-tick-alternatives-unreal-engine-5-notes) - [Gameplay Framework/Architecture | Unreal Engine 5 - Notes](#gameplay-framework-architecture-unreal-engine-5-notes) - [Unreal Engine Topics | Unreal Engine 5 - Notes](#unreal-engine-topics-unreal-engine-5-notes) - [Asset/Feature Pack | Unreal Engine 5 - Notes](#asset-feature-pack-unreal-engine-5-notes) - [(YouTube Playlist) Learn to Code in UE5 by Coque Games | Unreal Engine 5 - Notes](#-youtube-playlist-learn-to-code-in-ue5-by-coque-games-unreal-engine-5-notes) - [Unreal Engine Blueprints | Unreal Engine 5 - Notes](#unreal-engine-blueprints-unreal-engine-5-notes) - [Create a Top Down Camera View | Unreal Engine 5 - Notes](#create-a-top-down-camera-view-unreal-engine-5-notes) - [Damage System | Unreal Engine 5 - Notes](#damage-system-unreal-engine-5-notes) - [Collisions | Unreal Engine 5 - Notes](#collisions-unreal-engine-5-notes) - [(YouTube) Learn to Code in UE5 - 13 - Direct Actor Communication | Unreal Engine 5 - Notes](#-youtube-learn-to-code-in-ue5-13-direct-actor-communication-unreal-engine-5-notes) - [Performance Improvement | Unreal Engine 5 - Notes](#performance-improvement-unreal-engine-5-notes) - [Gameplay Ability System (GAS) | Unreal Engine 5 - Notes](#gameplay-ability-system-gas-unreal-engine-5-notes) - [Localization | Unreal Engine 5 - Notes](#localization-unreal-engine-5-notes) - [Page 5 | Unreal Engine 5 - Notes](#page-5-unreal-engine-5-notes) - [(YouTube) Fantastic Bottlenecks and Where to Find Them | Unreal Engine 5 - Notes](#-youtube-fantastic-bottlenecks-and-where-to-find-them-unreal-engine-5-notes) - [(YouTube Videos) Blueprints In-Depth | Unreal Engine 5 - Notes](#-youtube-videos-blueprints-in-depth-unreal-engine-5-notes) - [UMG | Unreal Engine 5 - Notes](#umg-unreal-engine-5-notes) - [(YouTube Videos) Smart Poly Blueprint Beginner Series | Unreal Engine 5 - Notes](#-youtube-videos-smart-poly-blueprint-beginner-series-unreal-engine-5-notes) - [UMG Resources | Unreal Engine 5 - Notes](#umg-resources-unreal-engine-5-notes) - [GAS Resources | Unreal Engine 5 - Notes](#gas-resources-unreal-engine-5-notes) - [(Udemy) Unreal Engine 5: Blueprint Scripting 101 | Unreal Engine 5 - Notes](#-udemy-unreal-engine-5-blueprint-scripting-101-unreal-engine-5-notes) - [Section 2: Blueprint Overview | Unreal Engine 5 - Notes](#section-2-blueprint-overview-unreal-engine-5-notes) - [Unreal Engine C++ | Unreal Engine 5 - Notes](#unreal-engine-c-unreal-engine-5-notes) - [Material Resources | Unreal Engine 5 - Notes](#material-resources-unreal-engine-5-notes) - [Gameplay Tags vs Tags | Unreal Engine 5 - Notes](#gameplay-tags-vs-tags-unreal-engine-5-notes) - [Unreal Engine Blueprints | Unreal Engine 5 - Notes](#unreal-engine-blueprints-unreal-engine-5-notes) - [Materials | Unreal Engine 5 - Notes](#materials-unreal-engine-5-notes) - [Git LFS + Microsoft Azure | Unreal Engine 5 - Notes](#git-lfs-microsoft-azure-unreal-engine-5-notes) - [(YouTube) Unreal Engine 5 | Blueprint for Advanced Users | Unreal Engine 5 - Notes](#-youtube-unreal-engine-5-blueprint-for-advanced-users-unreal-engine-5-notes) - [(YouTube) Working with Data in Unreal Engine 5 | Unreal Engine 5 - Notes](#-youtube-working-with-data-in-unreal-engine-5-unreal-engine-5-notes) - [Git LFS (Large File Storage) | Unreal Engine 5 - Notes](#git-lfs-large-file-storage-unreal-engine-5-notes) - [Version Control | Unreal Engine 5 - Notes](#version-control-unreal-engine-5-notes) - [(YouTube) Unreal Engine 5 | Blueprint for Intermediate Users (2023) | Unreal Engine 5 - Notes](#-youtube-unreal-engine-5-blueprint-for-intermediate-users-2023-unreal-engine-5-notes) - [(Udemy) Unreal Engine 5 Blueprints - The Ultimate Developer Course by Stephen Ulibarri | Unreal Engine 5 - Notes](#-udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri-unreal-engine-5-notes) - [(YouTube) Overcoming Early Challenges in Unreal | Unreal Engine 5 - Notes](#-youtube-overcoming-early-challenges-in-unreal-unreal-engine-5-notes) - [(Udemy) Unreal Engine 5 C++ for Developers: Learn C++ & Make Video Games | Unreal Engine 5 - Notes](#-udemy-unreal-engine-5-c-for-developers-learn-c-make-video-games-unreal-engine-5-notes) - [Unreal Engine C++ Multiplayer Networking | Unreal Engine 5 - Notes](#unreal-engine-c-multiplayer-networking-unreal-engine-5-notes) - [Unreal Engine Courses | Unreal Engine 5 - Notes](#unreal-engine-courses-unreal-engine-5-notes) - [Section 2: Warehouse Wreckage | Unreal Engine 5 - Notes](#section-2-warehouse-wreckage-unreal-engine-5-notes) - [Section 7: Bad Bot Wrap-Up and Boss Fight | Unreal Engine 5 - Notes](#section-7-bad-bot-wrap-up-and-boss-fight-unreal-engine-5-notes) - [Section 1: Introduction | Unreal Engine 5 - Notes](#section-1-introduction-unreal-engine-5-notes) - [Section 5: Pawns and Enhanced Input | Unreal Engine 5 - Notes](#section-5-pawns-and-enhanced-input-unreal-engine-5-notes) - [Section 3: Vectors and Rotators | Unreal Engine 5 - Notes](#section-3-vectors-and-rotators-unreal-engine-5-notes) - [Section 8: Jetpack Journey - A 3D Platformer with a Jetpack | Unreal Engine 5 - Notes](#section-8-jetpack-journey-a-3d-platformer-with-a-jetpack-unreal-engine-5-notes) - [Section 6: Simple Shooter | Unreal Engine 5 - Notes](#section-6-simple-shooter-unreal-engine-5-notes) - [(YouTube) Blueprints In-depth Part 2 | Unreal Engine 5 - Notes](#-youtube-blueprints-in-depth-part-2-unreal-engine-5-notes) - [(Udemy) Unreal Engine 5 - Gameplay Ability System - Top Down RPG by Stephen Ulibarri | Unreal Engine 5 - Notes](#-udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri-unreal-engine-5-notes) - [Section 2: The Blueprint Visual Scripting System | Unreal Engine 5 - Notes](#section-2-the-blueprint-visual-scripting-system-unreal-engine-5-notes) - [(YouTube) Making Better Blueprints | Unreal Engine 5 - Notes](#-youtube-making-better-blueprints-unreal-engine-5-notes) - [Page 4 | Unreal Engine 5 - Notes](#page-4-unreal-engine-5-notes) - [(Udemy) Unreal Engine 5 C++ Multiplayer: Make An OnlineCo-Op Game by GameDev.TV | Unreal Engine 5 - Notes](#-udemy-unreal-engine-5-c-multiplayer-make-an-onlineco-op-game-by-gamedev-tv-unreal-engine-5-notes) - [Section 4: Co-op Adventure Gameplay | Unreal Engine 5 - Notes](#section-4-co-op-adventure-gameplay-unreal-engine-5-notes) - [Section 3: Intro to the Gameplay Ability System | Unreal Engine 5 - Notes](#section-3-intro-to-the-gameplay-ability-system-unreal-engine-5-notes) - [Section 3: Obstacle Assault | Unreal Engine 5 - Notes](#section-3-obstacle-assault-unreal-engine-5-notes) - [Page 6 | Unreal Engine 5 - Notes](#page-6-unreal-engine-5-notes) - [Section 5: Toon Tanks v2 | Unreal Engine 5 - Notes](#section-5-toon-tanks-v2-unreal-engine-5-notes) - [Section 4: Bad Bot - A Drone Flying Shooter Game | Unreal Engine 5 - Notes](#section-4-bad-bot-a-drone-flying-shooter-game-unreal-engine-5-notes) - [(Udemy) Unreal Engine 5 C++ Multiplayer Shooter by Stephen Ulibarri | Unreal Engine 5 - Notes](#-udemy-unreal-engine-5-c-multiplayer-shooter-by-stephen-ulibarri-unreal-engine-5-notes) - [(YouTube) Blueprints In-depth Part 1 | Unreal Engine 5 - Notes](#-youtube-blueprints-in-depth-part-1-unreal-engine-5-notes) - [(YouTube) Blueprint Communication | Unreal Engine 5 - Notes](#-youtube-blueprint-communication-unreal-engine-5-notes) - [Section 4: Crypt Raider | Unreal Engine 5 - Notes](#section-4-crypt-raider-unreal-engine-5-notes) - [Section 6: Collision Essentials | Unreal Engine 5 - Notes](#section-6-collision-essentials-unreal-engine-5-notes) - [Section 3: Project Creation | Unreal Engine 5 - Notes](#section-3-project-creation-unreal-engine-5-notes) - [Section 3: Online Subsystem | Unreal Engine 5 - Notes](#section-3-online-subsystem-unreal-engine-5-notes) - [(Patreon) UE5 Dedicated Servers by Stephen Ulibarri | Unreal Engine 5 - Notes](#-patreon-ue5-dedicated-servers-by-stephen-ulibarri-unreal-engine-5-notes) - [Section 1: | Unreal Engine 5 - Notes](#section-1-unreal-engine-5-notes) - [Section 9: | Unreal Engine 5 - Notes](#section-9-unreal-engine-5-notes) - [Page 2 | Unreal Engine 5 - Notes](#page-2-unreal-engine-5-notes) - [Section 4: The Weapon | Unreal Engine 5 - Notes](#section-4-the-weapon-unreal-engine-5-notes) - [S1 L9 | Unreal Engine 5 - Notes](#s1-l9-unreal-engine-5-notes) - [Page | Unreal Engine 5 - Notes](#page-unreal-engine-5-notes) - [Section 11: | Unreal Engine 5 - Notes](#section-11-unreal-engine-5-notes) - [Page 1 | Unreal Engine 5 - Notes](#page-1-unreal-engine-5-notes) - [(Udemy) Unreal Engine 5 C++ The Ultimate Game Developer Course | Unreal Engine 5 - Notes](#-udemy-unreal-engine-5-c-the-ultimate-game-developer-course-unreal-engine-5-notes) - [Section 13: | Unreal Engine 5 - Notes](#section-13-unreal-engine-5-notes) - [Section 2: | Unreal Engine 5 - Notes](#section-2-unreal-engine-5-notes) - [Section 2: Creating a Multiplayer Plugin | Unreal Engine 5 - Notes](#section-2-creating-a-multiplayer-plugin-unreal-engine-5-notes) - [Section 12: | Unreal Engine 5 - Notes](#section-12-unreal-engine-5-notes) - [Section 4: C++ in Unreal Engine | Unreal Engine 5 - Notes](#section-4-c-in-unreal-engine-unreal-engine-5-notes) - [Section 8: The Character Class | Unreal Engine 5 - Notes](#section-8-the-character-class-unreal-engine-5-notes) - [Section 3: Vectors, Rotators, and Trigonometry | Unreal Engine 5 - Notes](#section-3-vectors-rotators-and-trigonometry-unreal-engine-5-notes) - [Section 10: Collisions and Overlaps | Unreal Engine 5 - Notes](#section-10-collisions-and-overlaps-unreal-engine-5-notes) - [Lecture 17: | Unreal Engine 5 - Notes](#lecture-17-unreal-engine-5-notes) - [Section 7: The Pawn Class | Unreal Engine 5 - Notes](#section-7-the-pawn-class-unreal-engine-5-notes) - [Lecture 16: | Unreal Engine 5 - Notes](#lecture-16-unreal-engine-5-notes) - [Section 5: The Actor Class | Unreal Engine 5 - Notes](#section-5-the-actor-class-unreal-engine-5-notes) - [(tomlooman.com) Professional Game Development in C++ and Unreal Engine | Unreal Engine 5 - Notes](#-tomlooman-com-professional-game-development-in-c-and-unreal-engine-unreal-engine-5-notes) - [Lecture 6: Debugging Tools | Unreal Engine 5 - Notes](#lecture-6-debugging-tools-unreal-engine-5-notes) - [Lecture 12: More AI, Environment Query Spawn Logic | Unreal Engine 5 - Notes](#lecture-12-more-ai-environment-query-spawn-logic-unreal-engine-5-notes) - [Lecture 22: Finishing Up Multiplayer | Unreal Engine 5 - Notes](#lecture-22-finishing-up-multiplayer-unreal-engine-5-notes) - [Lecture 11: Intermediate AI with Custom Tasks & EQS | Unreal Engine 5 - Notes](#lecture-11-intermediate-ai-with-custom-tasks-eqs-unreal-engine-5-notes) - [Lecture 9: Audio, Animation, UI | Unreal Engine 5 - Notes](#lecture-9-audio-animation-ui-unreal-engine-5-notes) - [Lecture 4: Interfaces & Collision Queries | Unreal Engine 5 - Notes](#lecture-4-interfaces-collision-queries-unreal-engine-5-notes) - [Lecture 5: Blueprints 101 | Unreal Engine 5 - Notes](#lecture-5-blueprints-101-unreal-engine-5-notes) - [Lecture 3: Gameplay, Collision, and Physics | Unreal Engine 5 - Notes](#lecture-3-gameplay-collision-and-physics-unreal-engine-5-notes) - [Lecture 21: Multiplayer 3 | Unreal Engine 5 - Notes](#lecture-21-multiplayer-3-unreal-engine-5-notes) - [Lecture 10: Basic AI & Behavior Trees | Unreal Engine 5 - Notes](#lecture-10-basic-ai-behavior-trees-unreal-engine-5-notes) - [Section 6: Moving Objects with Code | Unreal Engine 5 - Notes](#section-6-moving-objects-with-code-unreal-engine-5-notes) - [Lecture 2: Project Start & Version Control | Unreal Engine 5 - Notes](#lecture-2-project-start-version-control-unreal-engine-5-notes) - [Lecture 8: (Dynamic) Materials for Gameplay | Unreal Engine 5 - Notes](#lecture-8-dynamic-materials-for-gameplay-unreal-engine-5-notes) - [Lecture 7: UMG & (Player) Attributes | Unreal Engine 5 - Notes](#lecture-7-umg-player-attributes-unreal-engine-5-notes) - [Lecture 20: Multiplayer 2 | Unreal Engine 5 - Notes](#lecture-20-multiplayer-2-unreal-engine-5-notes) - [Lecture 19: Multiplayer 1 Network Replication | Unreal Engine 5 - Notes](#lecture-19-multiplayer-1-network-replication-unreal-engine-5-notes) - [Section 2: Multiplayer Fundamentals | Unreal Engine 5 - Notes](#section-2-multiplayer-fundamentals-unreal-engine-5-notes) --- # New to Unreal Engine | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes#advice-for-learning-unreal-engine) Advice for Learning Unreal Engine 1. Learn the basics of the Unreal Editor 2. Learn programming fundamentals with Blueprint 1. _Note: I recommend to start with Blueprints because the engine has a lot of Blueprint integration and even if you're planning to use C++ it's still recommended to use Blueprints to some degree for things_ 3. Learn Unreal Engines Gameplay Framework/Architecture 4. Build games using Blueprints 5. Learn about programming best practices with Blueprints & other programming topics * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes#step-1-learn-the-basics-of-the-unreal-engine-editor) Step#1: Learn the basics of the Unreal Engine Editor * (YouTube) [Unreal Engine 5 Beginner Tutorial | Getting Started](https://www.youtube.com/watch?v=XRmn-EYt8wI&t=7723s) (2023) by Smart Poly * (Unreal Learning) [Unreal Editor Basics](https://dev.epicgames.com/community/learning/courses/D95/unreal-engine-editor-fundamentals/e913/unreal-engine-editor-fundamentals-overview) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes#step-2-learn-programming-fundamentals-with-blueprint) Step#2: Learn programming fundamentals with Blueprint #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#optional-part-1-object-oriented-programming) (Optional) Part 1 - Object Oriented Programming _Note: Unreal Engine heavily uses Object Oriented Programming, so it can be good to leanr a bit about it beforehand_ * (YouTube) [Object-oriented Programming in 7 minutes | Mosh](https://www.youtube.com/watch?v=pTB0EiLXUC8&t=186s) by Programming with Mosh * (YouTube) [Intro to Object Oriented Programming - Crash Course](https://www.youtube.com/watch?v=SiBw7os-_zI) by FreeCodeCamp * (Article) [OOP Meaning - What is Object-Oriented Programming?](https://www.freecodecamp.org/news/what-is-object-oriented-programming/) * (YouTube) [The Flaws of Inheritance](https://www.youtube.com/watch?v=hxGOiiR9ZKg&t=234s) by CodeAesthetic #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#part-2-general-overview-of-blueprints) Part 2 - General Overview of Blueprints * (Documentation) [Overview of Blueprint Visual Scripting in Unreal Engine](https://docs.unrealengine.com/5.3/en-US/overview-of-blueprints-visual-scripting-in-unreal-engine/) * (Documentation) [Types of Blueprints](https://docs.unrealengine.com/5.3/en-US/types-of-blueprints-in-unreal-engine/) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#part-3-learn-the-basic-syntax-of-blueprints-the-various-blueprint-nodes-and-how-to-use-blueprints) Part 3 - Learn the basic syntax of Blueprints, the various Blueprint nodes, and how to use Blueprints _Note: All of the resources below are unlike others that simply show you how to build a game, but instead focuses on teaching what the various Blueprint nodes do_ * (YouTube Playlist) [Learn to Code in Unreal Engine 5 with Blueprints](https://www.youtube.com/playlist?list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG) by Corqui Games * (YouTube Playlist) [Blueprint Essentials | v4.2 | Unreal Engine](https://www.youtube.com/playlist?list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl) by Unreal Engine * (YouTube Playlist) [Blueprint Programming - Unreal Engine 4 Course](https://youtube.com/playlist?list=PLL0cLF8gjBpqRUy7r0DtVY3Fcdgq5Wk-h&si=3brl6U6frydexzqC) by Virtus Learning Hub * (Udemy - PAID) [Unreal Engine 5: Blueprint Scripting 101](https://www.udemy.com/course/unreal-engine-blueprint-scripting-101/) by Greg Wondra * (Wiki) [Blueprint Fundamentals](https://michaeljcole.github.io/wiki.unrealengine.com/Blueprint_Fundamentals/) * (Page) [Blueprint Programming Fundamentals Reference](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/596/unreal-engine/programming/blueprints/blueprint-programming-fundamentals-reference) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#part-4-learn-about-blueprint-communication) Part 4 - Learn about Blueprint Communication * (YouTube) [Blueprint Communications | Live Training | Unreal Engine](https://www.youtube.com/watch?v=EM_HYqQdToE) by Unreal Engine * (Unreal Learning) [Blueprint Communication](https://dev.epicgames.com/community/learning/courses/LWv/unreal-engine-blueprint-communication/ypKl/unreal-engine-blueprint-communication-overview) * (Documentation) [Actor Communication](https://dev.epicgames.com/documentation/en-us/unreal-engine/actor-communication-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#optional-part-5-follow-a-tutorial-course-building-a-game-to-get-a-feel-of-unreal-engine-and-using-bl) (Optional) Part 5 - Follow a tutorial/course building a game to get a feel of Unreal Engine and using blueprints * (Udemy - PAID) [Unreal Engine 5 Blueprints - The Ultimate Developer Course](https://www.udemy.com/course/ue5-ultimate-bp-course/) by Stephen Ulibarri * (Udemy - PAID) [Unreal Engine 5 - Gameplay Ability System - Top Down RPG](https://www.udemy.com/course/unreal-engine-5-gas-top-down-rpg) by Stephen Ulibarri * (Course - PAID) [GameDev.TV](https://www.gamedev.tv/) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#part-6-how-to-think-like-a-programmer) Part 6 - How to think like a programmer * (YouTube) [How To Think Like A Programmer](https://www.youtube.com/watch?v=azcrPFhaY9k&t=3026s) by Coding Tech * (Article) [How To Solve Coding Problems](https://www.freecodecamp.org/news/how-to-solve-coding-problems/) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes#step-3-learn-unreal-engines-gameplay-framework-architecture) Step#3: Learn Unreal Engines Gameplay Framework/Architecture * (Unreal Learning) [Begin Play | Gameplay](https://dev.epicgames.com/community/learning/tutorials/l21z/unreal-engine-begin-play-gameplay) * (Documentation) [Gameplay Framework Quick Reference](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-framework-quick-reference-in-unreal-engine?application_version=5.3) * (Documentation) [Gameplay Framework](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-framework-in-unreal-engine?application_version=5.3) * (Article) [Unreal Gameplay Framework Guide for C++](https://www.tomlooman.com/unreal-engine-gameplay-framework/) * (YouTube) [The Unreal Engine Game Framework: From int main() to BeginPlay](https://www.youtube.com/watch?v=IaU2Hue-ApI) by Alex Forsythe * (Page) [Gameplay Framework/Architecture](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes#step-4-build-games-using-blueprints) Step#4: Build games using Blueprints * Come up with your own project(s) * (Website) [The 20 Games Challenge](https://20_games_challenge.gitlab.io/) - Can be used as a guide to practice building games in Unreal Engine to learn game dev * _Note: Even though some of the games on the list are 2D games, you can create them as 2.5D or 3D games instead_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes#step-5-learn-about-programming-best-practices-with-blueprints-and-other-programming-topics) Step#5: Learn about programming best practices with Blueprints & other programming topics #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#part-1-programming-best-practices-with-blueprints) Part 1 - Programming best practices with Blueprints * (YouTube) [Blueprints In-Depth - Part 1 | Unreal Feast Europe 2019 | Unreal Engine](https://www.youtube.com/watch?v=j6mskTgL7kU) by Unreal Engine * (YouTube) [Blueprints In-Depth - Part 2 | Unreal Feast Europe 2019 | Unreal Engine](https://www.youtube.com/watch?v=0YMS2wnykbc&t=2s) by Unreal Engine * (YouTube) [Making Better Blueprints | Unreal Feast 2022](https://www.youtube.com/watch?v=mW0IlgjF-iw) by Unreal Engine * (Page) [Blueprint Best Practices](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-best-practices) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes#part-2-other-programming-topics) Part 2 - Other programming topics * Object Oriented Programming (OOP) * Data Structures & Algorithms * Application Programming Interfaces (APIs) * Refactoring & Clean Code * Design Patterns * Software Testing * Debugging * Version Control * Database Management & Database Concepts * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes#extra-resources) Extra Resources * (Unreal Learning) [Unreal Engine Essentials for Games | Onboarding Collection](https://dev.epicgames.com/community/learning/courses/aJM/unreal-engine-essentials-for-games-onboarding-collection/PdGj/unreal-engine-essentials-for-games) * (Unreal Learning) [BeginPlay](https://dev.epicgames.com/community/learning/paths/0w/unreal-engine-beginplay) * (YouTube) [How Game Programming Tutorials Make You Bad At Programming](https://www.youtube.com/watch?v=A7Es2sb_DG8) by Adam Moore * [https://www.reactkeyblog.com/en/posts/\[ue5\]-unreal-engine-5-%E5%AD%A6%E7%BF%92%E8%B3%87%E6%96%99%E3%81%BE%E3%81%A8%E3%82%81/18d94c53-5fd9-4e17-ba5a-204fdc326c73](https://www.reactkeyblog.com/en/posts/[ue5]-unreal-engine-5-%E5%AD%A6%E7%BF%92%E8%B3%87%E6%96%99%E3%81%BE%E3%81%A8%E3%82%81/18d94c53-5fd9-4e17-ba5a-204fdc326c73) * (YouTube) [Myth-Busting “Best Practices” in Unreal Engine | Unreal Fest 2024](https://www.youtube.com/watch?v=S2olUc9zcB8) by Unreal Engine [NextYouTube Channels](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/youtube-channels) Last updated 11 months ago --- # Extra | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/extra#installing-unreal-engine-5.3-on-m1-macbook-pro) Installing Unreal Engine 5.3 on M1 MacBook Pro * Ran into an issue with UE5 not being able to find my Xcode installation... this post helped me fix the issue-> [https://forums.unrealengine.com/t/cant-find-xcode-install-for-metal-compiler/477836/4](https://forums.unrealengine.com/t/cant-find-xcode-install-for-metal-compiler/477836/4) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/extra#installing-unreal-engine-for-windows) Installing Unreal Engine for Windows * (Documentation) [Setting Up Visual Studio](https://dev.epicgames.com/documentation/en-us/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine?application_version=5.0) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/extra#extra) Extra * (YouTube) [Run Unreal Engine 5 On A Low End PC](https://www.youtube.com/watch?v=3oXGLmqs7u8) by WINDBUSH * [https://www.unrealdirective.com/](https://www.unrealdirective.com/) * [https://unrealcommunity.wiki/](https://unrealcommunity.wiki/) * [https://dev.epicgames.com/community/unreal-engine/snippets?types=blueprint](https://dev.epicgames.com/community/unreal-engine/snippets?types=blueprint) * [https://forums.unrealengine.com/t/how-to-include-blueprints-in-a-plugin/323870/5](https://forums.unrealengine.com/t/how-to-include-blueprints-in-a-plugin/323870/5) * [https://machinations.io/](https://machinations.io/) * (YouTube) [How to Optimize Performance in Unreal Engine 5](https://www.youtube.com/watch?v=lfjG3z5VVIw) [PreviousYouTube Channels](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/youtube-channels) [NextProgramming](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming) Last updated 12 months ago --- # Programming | Unreal Engine 5 - Notes [Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints) [C++](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++) [Programming Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics) [PreviousExtra](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/extra) [NextBlueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints) --- # YouTube Channels | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/youtube-channels#unreal-engine) Unreal Engine * Unreal Engine * Mathew Wadstein Tutorials * Ryan Laley * Smart Poly * Unreal Sensei * Alex Forsythe * Game Makes Toolkit * WorldofLevelDesign * Tom Looman * Virtus Learning Hub * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/youtube-channels#game-development-in-general) Game Development in General * GDC * BiteMe Games * AI and Games [PreviousNew to Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes) [NextExtra](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/new-to-unreal-engine/extra) Last updated 1 year ago --- # Blueprints | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints#table-of-contents) Table of Contents * [Blueprint Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources) * [Learning Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints) * [Blueprints Best Practices](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-best-practices) [PreviousProgramming](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming) [NextBlueprint Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources) Last updated 1 year ago --- # Blueprint Resources | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#unreal-engine-blueprint-learning-path) Unreal Engine Blueprint Learning Path #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#part-1-learn-the-basics-of-blueprints) Part-1: Learn the basics of Blueprints * (YouTube Playlist) [Learn to Code in Unreal Engine 5 with Blueprints](https://www.youtube.com/playlist?list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG) by Corqui Games * (YouTube Playlist) [Blueprint Essentials | v4.2 | Unreal Engine](https://www.youtube.com/playlist?list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl) by Unreal Engine * (YouTube Playlist) [Blueprint Programming - Unreal Engine 4 Course](https://youtube.com/playlist?list=PLL0cLF8gjBpqRUy7r0DtVY3Fcdgq5Wk-h&si=3brl6U6frydexzqC) by Virtus Learning Hub * (Udemy - PAID) [Unreal Engine 5: Blueprint Scripting 101](https://www.udemy.com/course/unreal-engine-blueprint-scripting-101/) by Greg Wondra * (Unreal Learning) [Blueprint Essential Concepts](https://dev.epicgames.com/community/learning/courses/QGD/unreal-engine-blueprint-essential-concepts/P7L/unreal-engine-introduction-to-blueprint-essential-concepts) by Epic Games * (Wiki) [Blueprint Fundamentals](https://michaeljcole.github.io/wiki.unrealengine.com/Blueprint_Fundamentals/) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#part-2-learn-about-blueprint-actor-communication) Part-2: Learn about Blueprint/Actor Communication * (YouTube) [Blueprint Communications | Live Training | Unreal Engine](https://www.youtube.com/watch?v=EM_HYqQdToE) by Unreal Engine * (Unreal Learning) [Blueprint Communication](https://dev.epicgames.com/community/learning/courses/LWv/unreal-engine-blueprint-communication/ypKl/unreal-engine-blueprint-communication-overview) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#part-3-learn-about-the-gameplay-framework) Part-3: Learn about the gameplay framework * (Page) [Gameplay Framework/Architecture](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#part-4-learn-about-making-better-blueprints) Part-4: Learn about making better Blueprints * (YouTube) [Blueprints In-Depth - Part 1 | Unreal Feast Europe 2019 | Unreal Engine](https://www.youtube.com/watch?v=j6mskTgL7kU) by Unreal Engine * (YouTube) [Blueprints In-Depth - Part 2 | Unreal Feast Europe 2019 | Unreal Engine](https://www.youtube.com/watch?v=0YMS2wnykbc&t=2s) by Unreal Engine * (YouTube) [Making Better Blueprints | Unreal Feast 2022](https://www.youtube.com/watch?v=mW0IlgjF-iw) by Unreal Engine * (Word Doc) [Better Blueprints: Using Visual Scripting To Its Fullest Potential](https://docs.google.com/document/d/14vsrDimhQKV3qtBtK3Z4IFbW_TvMp54s8orSWsJnsTM/edit) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#extra) Extra * (Page) [Blueprint Programming Fundamentals Reference](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/596/unreal-engine/programming/blueprints/blueprint-programming-fundamentals-reference) * (YouTube) [All Unreal Engine Nodes You Need to Know About](https://www.youtube.com/watch?v=KE_8OwmHY-A) by Unreal University * (YouTube) [The Most Common Mistake Beginners Make in Unreal Engine](https://www.youtube.com/watch?v=YFtLd-bKl-U&t=131s) by Ali Elzoheiry * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#extra-resources) Extra Resources #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#blueprint-basics) Blueprint Basics * (YouTube) [Unreal Engine 5 | Blueprint For Beginners](https://www.youtube.com/watch?v=Xw9QEMFInYU&t=710s) by Smart Poly * (YouTube) [Unreal Engine 5 | Blueprint For Intermediate Users](https://www.youtube.com/watch?v=cFm4tZqgYvQ&t=6151s) by Smart Poly * (YouTube) [Unreal Engine 5 | Blueprint For Advanced Users](https://www.youtube.com/watch?v=f-OFKpujoTc) by Smart Poly * (YouTube Playlist) [Unreal Engine Blueprint Tutorial | Fundamentals](https://www.youtube.com/playlist?list=PL2A3wMhmbeAq3WOT7kQ0EGby1YMb0zj5_) by Ask A Dev * (Website) [Romero Blueprints](https://romeroblueprints.blogspot.com/p/table-of-contents.html) * (GitHub Repo) [Blueprint Visual Scripting for Unreal Engine 5](https://github.com/PacktPublishing/-Blueprints-Visual-Scripting-for-Unreal-Engine-5) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#optimization) Optimization * (YouTube) [Overcoming Early Challenges in Unreal | Unreal Feast Europe 2019](https://www.youtube.com/watch?v=Lz5z0nF1WRU&list=PLZlv_N0_O1gbmtS-hQFAVEF_zBOJPCaaX&index=20&t=777s) by Unreal Engine or [Overcoming Early Challenges in Unreal | Dev Days 2018](https://www.youtube.com/watch?v=2edoacF53F0) * (YouTube) [Optimizing UE4 for Fortnite: Battle Royale - Part 1 | GDC 2018 Unreal Engine](https://www.youtube.com/watch?v=KHWquMYtji0&t=524s) by Unreal Engine * (YouTube) [Optimizing UE4 for Fortnite: Battle Royale - Part 2 | GDC 2018 Unreal Engine](https://www.youtube.com/watch?v=1xiwJukvb60) by Unreal Engine * (YouTube) [Fantastic Bottlenecks and Where to Find Them | Unreal Feast 2019 | Unreal Engine](https://www.youtube.com/watch?v=0SwlwgV-cz8&list=PLZlv_N0_O1gbmtS-hQFAVEF_zBOJPCaaX&index=8) by Unreal Engine #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#design-patterns) Design Patterns * (YouTube Playlist) [Software Design Patterns in Unreal Engine](https://www.youtube.com/playlist?list=PLNwKK6OwH7eVw8SIE9ziJOJMog2eXK-6r) by Ali Elzoheiry * (YouTube Playlist) [Game Design Patterns](https://www.youtube.com/playlist?list=PLnJhEDRlDVv---HVYonX6XwTbMQQ3ZHpS) by Game Dev Beat #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources#other) Other * (Website) [UObject instead of UStruct for data that is more flexible throughout iteration](https://aljavgames.notion.site/UObject-instead-of-Ustruct-for-data-that-is-more-flexible-throughout-iteration-688640d0bf57455e9a98213471139cea) * (YouTube) [Working with Data in Unreal Engine 5 | Unreal Fest 2022](https://www.youtube.com/watch?v=HOpyZ8552oA) by Unreal Engine * (Unreal Forum) [Working with Data in Unreal Engine; Data tables, Data Assets, UPROPERTY specifiers and more!](https://dev.epicgames.com/community/learning/tutorials/Gp9j/working-with-data-in-unreal-engine-data-tables-data-assets-uproperty-specifiers-and-more) * (Documentation) [Saving and Loading Your Game](https://dev.epicgames.com/documentation/en-us/unreal-engine/saving-and-loading-your-game-in-unreal-engine?application_version=5.4) * (Reading) [Proper Casting Practices](https://youneedawiki.com/app/page/1tSWbSGQxzLzSwovxW1bc617UYnPIBv1pZn4JmJ9K0ws?p=1XbQUr2c1fYF6x5I648hObBZsUDXWy0KE) [PreviousBlueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints) [NextLearning Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints) Last updated 1 year ago --- # Learning Blueprints | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints#overview) Overview * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints#table-of-contents) Table of Contents * [Blueprint Graphs](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs) * [Blueprint Types](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types) * [Blueprint Node Types & Colors](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-node-types-and-colors) * [Variables](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables) * [Data Types](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-types) * [Structs](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs) * [Enums](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums) * [Operators](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators) * [Conditional Statements](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements) * [Functions/Methods](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods) * [Macro](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro) * [Arrays](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-structures/blueprint-arrays) * [Loops](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops) * [Events](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events) * [Actor Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication) * [Collisions & Overlaps](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-collisions-and-overlaps) * [Time Based](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based) * [Exception Handling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling) * [Line Trace/Ray Casting](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast) * Working with Text * Working with Data [PreviousBlueprint Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-resources) [NextOverview](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/overview) Last updated 1 year ago --- # Overview | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/overview#links) Links * (Documentation) [Introduction to Blueprints](https://dev.epicgames.com/documentation/en-us/unreal-engine/introduction-to-blueprints-visual-scripting-in-unreal-engine?application_version=5.3) * (Documentation) [Blueprint Visual Scripting](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprints-visual-scripting-in-unreal-engine?application_version=5.3) * (Documentation) [Blueprint Overview](https://dev.epicgames.com/documentation/en-us/unreal-engine/overview-of-blueprints-visual-scripting-in-unreal-engine?application_version=5.3) * (Documentation) [Basic Scripting](https://dev.epicgames.com/documentation/en-us/unreal-engine/basic-scripting-with-blueprints-in-unreal-engine?application_version=5.3) * (Documentation) [Blueprint Editor Cheat Sheet](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprint-editor-cheat-sheet-in-unreal-engine?application_version=5.3) * (Documentation) [Blueprint API Reference](https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI?application_version=5.3) * (YouTube) [How to... Understand Blueprints](https://www.youtube.com/watch?v=aw-GMag53h0&t=23s) by Ryan Laley * (YouTube) [How to... Find the Right Node](https://www.youtube.com/watch?v=rpVlini3Gb0) by Ryan Laley * (YouTube) [Learn to Code in UE5 - 1 - Programming Basics](https://www.youtube.com/watch?v=cwnmXX7o5qs&list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG&index=2) by Coqui Games [PreviousLearning Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints) [NextBlueprint Graphs](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs) Last updated 1 year ago --- # Blueprint Node Types & Colors | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-node-types-and-colors#node-types) Node Types * Red Colored Nodes - Event Nodes * Blue Colored Nodes - Impure Functions * Green Colored Nodes- Pure Functions * Gray Colored Nodes - Flow Control * _Note: The switch node is an exception with a somewhat golden color_ * Variables * Timeline Node * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-node-types-and-colors#images-of-blueprint-nodes) Images of Blueprint Nodes **(Red)** **Event Node** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FnQHAE8T81ydCJ80wYHzW%252FScreenshot%25202023-10-02%2520at%25206.05.08%2520PM.png%3Falt%3Dmedia%26token%3Dbf582f04-55da-4a37-9f3d-152500cb886e&width=300&dpr=4&quality=100&sign=2e8d568e&sv=2) _(Screenshot above is of an image of a red event node. Image was taken form Unreal Engine Documentation on_ [_Events_](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Events/#:~:text=Events%20are%20nodes%20that%20are,when%20a%20player%20takes%20damage.) _)_ **(Blue)** **Impure Function Node** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FvQKYglvIQdjP0HW9Dhib%252FScreenshot%25202023-10-02%2520at%25206.06.45%2520PM.png%3Falt%3Dmedia%26token%3D963c3987-2ca6-4f7b-890f-4544dd1dedc1&width=300&dpr=4&quality=100&sign=5aa11807&sv=2) _(Screenshot above is of an image of a blue impure function node. Image was taken form Unreal Engine Documentation on_ [_Functions_](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Functions/#:~:text=Functions%20can%20either%20be%20Pure,just%20output%20a%20data%20value.) _)_ **(Green)** **Pure Function Node** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FSMycU1apZnzKobN927dE%252FScreenshot%25202023-10-02%2520at%25206.07.50%2520PM.png%3Falt%3Dmedia%26token%3D7d99b319-5ee0-46ec-afb2-292c3e4aa1cb&width=300&dpr=4&quality=100&sign=f279142&sv=2) _(Screenshot above is of an image of a green pure function node. Image was taken form Unreal Engine Documentation on_ [_Functions_](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Functions/#:~:text=Functions%20can%20either%20be%20Pure,just%20output%20a%20data%20value.) _)_ **(Gray) Flow Control Node** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FWJNduzZFrhJuPIBc8ZbT%252FScreenshot%25202023-10-02%2520at%25206.09.22%2520PM.png%3Falt%3Dmedia%26token%3Dbf0698f3-2faa-4579-93c7-4431ceeb69b3&width=300&dpr=4&quality=100&sign=850af8de&sv=2) _(Screenshot above is of an image of a gray flow control node. Image was taken form Unreal Engine Documentation on_ [_Flow Control_](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/FlowControl/) _)_ [PreviousBlueprint Types](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types) [NextBlueprint - Data Types](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-types) Last updated 1 year ago --- # Blueprint Graphs | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#blueprint-graph-types) Blueprint Graph Types * Event Graph * Construction Script * Functions * Macros * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#event-graph) Event Graph * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#construction-script) Construction Script * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#links) Links * (Documentation) [Graphs](https://dev.epicgames.com/documentation/en-us/unreal-engine/graphs-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#construction-script-1) Construction Script * (Documentation) [Construction Script](https://dev.epicgames.com/documentation/en-us/unreal-engine/construction-script-in-unreal-engine?application_version=5.3) * (YouTube) [Learn to Code in UE5 0 5 - The Construction Script](https://www.youtube.com/watch?v=hW1ToWhD2xI&t=56s) by Coqui Games #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#event-graph-1) Event Graph * (Documentation) [Event Graph](https://dev.epicgames.com/documentation/en-us/unreal-engine/event-graph-in-unreal-engine) * (YouTube) [Learn to Code in UE5 - 4 - Using the Event Graph](https://www.youtube.com/watch?v=yYwKgEn-aPI) by Coqui Games #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#functions) Functions * (Page) [Blueprint - Functions/Methods](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs#macros) Macros * (Page) [Blueprint - Macro](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro) [PreviousOverview](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/overview) [NextBlueprint Types](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types) Last updated 1 year ago --- # Blueprint Types | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#blueprint-types) Blueprint Types * Level Blueprint * Blueprint Class * Data Ony Blueprint * Blueprint Interface * Blueprint Macro Library * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#level-blueprint) Level Blueprint **What is a level blueprint?** It is a blueprint associated with a specific level. **Why would you use a level blueprint?** When you have code only meant for a specific level and nowhere else. **Video Game Examples** * Music only for one level * One off event specific to a level **Notes** * Code written in the level blueprint is only meant for that level * Level blueprint doesn't have a components panel * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#blueprint-class) Blueprint Class **What is a class blueprint?** It is a type of asset template that you can build off of. **Class Blueprint Types** Class Type Description Actor An Actor is an object that can be placed or spawned in the world Pawn A Pawn is an Actor that can be "possessed" and receive input from a Controller Character A Character is a Pawn that includes the ability to walk, run, jump, and more PlayerController A Player Controller is an Actor responsible for controlling a Pawn used by the player Game Mode A Game Mode defines the game being played, its rules, scoring, and other faces of the game type _Note: There are many more class blueprints than these_ **Notes** * Character Class Blueprint: If you want to create a humanoid character * Class blueprints have a components panel * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#data-only-blueprint) Data Only Blueprint **What is a data only blueprint?** **Why would you use a data only blueprint?** * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#blueprint-interface) Blueprint Interface * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#blueprint-macro-library) Blueprint Macro Library * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#links) Links * (Documentation) [Types of Blueprints](https://dev.epicgames.com/documentation/en-us/unreal-engine/types-of-blueprints-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#level-blueprint-1) Level Blueprint * (Documentation) [Level Blueprint](https://dev.epicgames.com/documentation/en-us/unreal-engine/level-blueprint-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#class-blueprint) Class Blueprint * (Documentation) [Blueprint Class](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprint-class-assets-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-types#data-only-blueprint-1) Data Only Blueprint * (Documentation) [Data-Only Blueprint UI](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprints-visual-scripting-editor-user-interace-for-data-only-blueprints-in-unreal-engine?application_version=5.3) * (Documentation) [Blueprint Class - Data Only Blueprint](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Types/ClassBlueprint/#data-onlyblueprint) [PreviousBlueprint Graphs](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-graphs) [NextBlueprint Node Types & Colors](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-node-types-and-colors) Last updated 1 year ago --- # Blueprint - Data Types | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-types#variable-types) Variable Types Variable Type Color Represents Boolean Maroon True or False Integer Sea green Whole number value between −2,147,483,648 and 2,147,483,647 Float Yellow green Number value with a decimal such as 0.0553, 101.2887, and -78.322 String Magenta Group of alphanumeric characters such as `Hello World` Vector Gold Set of three numbers (X, Y, and Z). This type is useful for 3D coordinates and RGB color data Transform Orange Set of data that combines translation (3D position), rotation, and scale Rotator Cornflower blue Group of numbers that define rotation in 3D space Object Blue Blueprint objects such as Lights, Actors, StaticMeshes, Cameras, and SoundCues _Note: This table only shows a few of the data types. Refer to Unreal Engines documentation "Blueprint Variables" for a more detailed list_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-types#links) Links * (Documentation) [Blueprint Variables](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprint-variables-in-unreal-engine?application_version=5.3) * (YouTube) [Blueprint Essentials: Variable Types](https://www.youtube.com/watch?v=n-EQYeU5nZk&list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl&index=2) by Unreal Engine [PreviousBlueprint Node Types & Colors](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-node-types-and-colors) [NextBlueprint - Variables](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables) Last updated 1 year ago --- # Blueprint - Variables | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables#what-is-a-variable) What is a variable? A variable is a way to store data. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables#why-would-you-want-to-store-data-in-a-variable) Why would you want to store data in a variable? * Access the data later on * Send the data to another blueprint or graph in your blueprints ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables#video-game-examples) Video Game Examples * **Manipulate Player Health:** If you have a player with health and you want to manipulate the players health such as decreasing it once the player takes damage, then you'll need the players health to be in a variable * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables#images-of-variable-blueprints) Images of Variable Blueprints **Image of variables in Blueprint** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FcKGDyv3Kw0H3hh3KJx5z%252FScreenshot%25202023-10-01%2520at%25205.15.43%2520PM.png%3Falt%3Dmedia%26token%3D5ed8ba94-92c8-46a9-9f1e-d1a446141dfa&width=300&dpr=4&quality=100&sign=e5ffc306&sv=2) _(Screenshot above is an image of variables in Unreal Engine Blueprints. Photo was taken from Unreal Engine Documentation on Blueprint Variables)_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables#get-and-set-variable) Get & Set Variable **What does "get" a variable do?** It allows you to get access to the value the variable is holding. **What does "set" a variable do?** It allows you to assign a value to the variable. * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables#notes) Notes * Variables must be assigned a data type * _Refer to_ [_Blueprint - Data Types_](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-types) _for more information_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables#links) Links * (YouTube) [Blueprint Essentials: Variables Overview](https://www.youtube.com/watch?v=zaVY5A0hqiI&list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl&index=1) by Unreal Engine * (Article) [Blueprint Variables: What You need To Know](https://www.unrealdirective.com/articles/blueprint-variables-what-you-need-to-know) [PreviousBlueprint - Data Types](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-types) [NextBlueprint - Structs](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs) Last updated 1 year ago --- # Blueprint - Structs | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs#what-is-a-struct) What is a struct? A struct is a collection of different types of data combined together into a single variables. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs#why-would-you-use-a-struct) Why would you use a struct? * To organize your code by placing related variables inside of a struct ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs#video-game-examples) Video Game Examples * Weapon Characteristics: You could create a struct that holds different values for various characteristics a weapon could have; i.e. Damage, Fire Rate, Bullet Drop, etc... * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs#notes) Notes * In most cases, you will have to break open a struct to access its elements * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs#links) Links * (Documentation) [Struct Variables in Blueprints](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Variables/Structs/) * (YouTube) [Blueprint Essentials: Struct Variables](https://www.youtube.com/watch?v=o46ZWNqh444&list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl&index=3) by Unreal Engine [PreviousBlueprint - Variables](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-variables) [NextBlueprint - Enums](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums) Last updated 1 year ago --- # Blueprint - Enums | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums#what-is-an-enum) What is an enum? An enum is an enumerated list of named values. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums#why-would-you-use-an-enum) Why would you use an enum? * To organize your code by creating an enum list of values instead of creating individual variables for each of them ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums#video-game-examples) Video Game Examples * **Game Menu:** You could create an enum list for different selection options for a games menu * **Game Difficulty Level:** You could create an enum list for the games different difficulty levels to select from * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums#notes) Notes * The first element in the list starts at index 0 * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums#links) Links * (Unreal Learning) [Using Enumerations in Blueprints](https://dev.epicgames.com/community/learning/courses/0GQ/unreal-engine-using-enumerations-in-blueprints/d59/introduction-to-enumerations) * (Article) [Enums in Unreal Engine 4 Blueprints](https://couchlearn.com/enums-in-unreal-engine-4-blueprints/) * (YouTube) [Blueprint Essentials: Enum Variables](https://www.youtube.com/watch?v=5nLqEW6YXPY&list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl&index=5) by Unreal Engine * (YouTube) [Enum (Enumerator) Variable Types - #27 Unreal Engine 4 Blueprint Tutorial Series](https://www.youtube.com/watch?v=ZxNrjJhoMVQ) by Virtus Learning Hub [PreviousBlueprint - Structs](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-structs) [NextBlueprint - Operators](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators) Last updated 1 year ago --- # Blueprint - Conditional Statements | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#what-is-a-conditional-statement) What is a conditional statement? A piece of code that allows you to control which piece of code will be triggered based on the condition, and if the condition is true or false. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#why-would-you-use-a-conditional-statement) Why would you use a conditional statement? * To control the flow of code to decide which code should run under certain situations based on the condition ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#video-game-examples) Video Game Examples * **Fire Weapon:** You could use a condition, (i.e: branch node), to check if the player has enough ammo to continue firing their weapon * **Player Dies:** You could use a condition, (i.e: branch node), to have code that only runs when the player health is 0 * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#images-of-conditional-nodes) Images of Conditional Nodes **Branch (If Statement)** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FAjEmeid2CiGZO9D8wNjL%252FScreenshot%25202023-10-01%2520at%25205.01.51%2520PM.png%3Falt%3Dmedia%26token%3D32c07fed-c74e-499a-baa8-02d73d037ab8&width=300&dpr=4&quality=100&sign=60313087&sv=2) _(Screenshot above is of the branch node. Photo was taken from Unreal Engine Documentation on the Branch node)_ **Branch Notes** * **Condition:** The condition pin is where you can specify your own condition to test against * **True:** The "True" output is where you'd specify code to run if the condition is true * **False:** The "False" output is where you'd specify code to run if the condition is false **Switch (Switch Statement)** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252F2Ylblz4GWLTirMsTZThV%252FScreenshot%25202023-10-01%2520at%25205.12.57%2520PM.png%3Falt%3Dmedia%26token%3Dee0c5160-b726-4b46-9499-29556f518100&width=300&dpr=4&quality=100&sign=6d7a3fc0&sv=2) _(Screenshot above is of the switch on int node. Photo was taken from Unreal Engine Documentation on the Flow Control)_ **Switch Notes** * **Selection:** The selection is the value that you're testing against * **Add Pin:** The "add pin +" allows you to add different cases to test against * **Default:** The default pin is for the code that will run if none of the cases are true * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#programming-to-blueprint-for-conditional-statements) Programming to Blueprint for Conditional Statements Programming Blueprints Notes If Statement Branch Node _The branch node only has two paths true or false. You cannot say add additional paths like you could with a traditional If Statement by using "Else If"_ Switch Statement Switch Node _There are multiple different types of switch nodes for different data types; i.e. Switch on String, Switch on Int, etc..._ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#notes) Notes * Conditional Statements are flow control nodes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#links) Links #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#branch-node) Branch Node * (Documentation) [Branch](https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Utilities/FlowControl/Branch?application_version=5.3) * (YouTube) [Branches & Conditioning](https://www.youtube.com/watch?v=opsv5wTLcz8) by Virtus Learning Hub * (YouTube) [Learn to Code in UE5 - 7 - Code Execution](https://www.youtube.com/watch?v=DHa6H3UaIBg&list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG&index=8) by Coqui Games * (YouTube) [How to use the Branch Node in UE4 || UE4 Tutorials](https://www.youtube.com/watch?v=119IpyBs9Ko) by Techno Nerd #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements#switch-node) Switch Node * (Documentation) [Flow Control](https://dev.epicgames.com/documentation/en-us/unreal-engine/flow-control-in-unreal-engine?application_version=5.3) * (YouTube) [WTF Is? The Switch Node](https://www.youtube.com/watch?v=2Kcecffh2IY) by Mathew Wadstein * (YouTube) [Switch on Integer](https://www.youtube.com/watch?v=fvpGLTOpzS4) by Virtus Learning Hub [PreviousBlueprint - Operators](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators) [NextBlueprint - Functions/Methods](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods) Last updated 1 year ago --- # Blueprint - Operators | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators#what-are-operators) What are operators? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators#why-would-you-use-operators) Why would you use operators? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators#video-game-examples) Video Game Examples * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators#operators) Operators Operator Symbol Add + Divide Equal \== Greater \> Greater Equal \>= Less < Less Equal <= Multiply x Not Equal != Subtract \- * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-operators#links) Links * (Documentation) [Operators](https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Utilities/Operators?application_version=5.0) * (Article) [What is an operator in programming](https://www.techtarget.com/whatis/definition/operator) * (YouTube) [Unreal Engine Encyclopedia: Operators](https://www.youtube.com/watch?v=P3U9edNCFts) by Cube of Skill * (YouTube) [WTF Is? Math - Boolean Nodes](https://www.youtube.com/watch?v=6SuVAfRD6b8) by Mathew Wadstein [PreviousBlueprint - Enums](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-enums) [NextBlueprint - Conditional Statements](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements) Last updated 1 year ago --- # Blueprint - Macro | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro#what-is-a-macro) What is a macro? A macro is a collection of nodes that do something. Macros are similar to functions. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro#why-would-you-use-a-macro) Why would you use a macro? * Organize and clean up your code * Allows for easier reuse of code. You can simply add the one macro blueprint node that contains all of the logic instead of having to individually add each blueprint that makes up the logic * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro#difference-between-macro-vs-function) Difference Between Macro vs Function * Macros can have multiple input and output execution pins * Macros can have latent or timeline nodes in them * Macros cannot be called from other blueprints like how a function can * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro#links) Links * (Documentation) [Macros](https://dev.epicgames.com/documentation/en-us/unreal-engine/macros-in-unreal-engine?application_version=5.3) * (YouTube) [WTF Is? Blueprint Macro in Unreal Engine 4](https://www.youtube.com/watch?v=GMB8SPnB9sM) by Mathew Wadstein Tutorials * (YouTube) [Functions, Macros, & Events](https://www.youtube.com/watch?v=m6gHl11hqkU&t=254s) by Virtus Learning Hub * (YouTube) [What is a Macro? And what is a Blueprint Macro Library? | Unreal Engine 5 Tutorial](https://www.youtube.com/watch?v=M8mjSwuPcyA) by Kekdot [PreviousBlueprint - Functions/Methods](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods) [NextBlueprint - Function vs Macro vs Collapse Node](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-function-vs-macro-vs-collapse-node) Last updated 1 year ago --- # Blueprint - Functions/Methods | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods#what-is-a-function) What is a function? * A function is a blueprint node that contains code that does something * Functions can take inputs * _Note: A functions input is know as a "parameter" in programming_ * _Note: An input passed into a function is know as an "argument" in programming_ * Functions can return outputs ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods#why-would-you-use-a-function) Why would you use a function? * To organize and clean up your code * To allow for easy code reuse. You can just add the single blueprint function containing all of the logic instead of having to copy and past each individual blueprint node for the logic ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods#video-game-examples) Video Game Examples * **Fire Weapon Logic:** You could add all of the code that handles how a player is able to fire their weapon inside of a function, then call the function * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods#images-of-functions) Images of Functions ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FuV1t66G5WlPkV2wTV7rb%252FScreenshot%25202023-10-02%2520at%25206.31.46%2520PM.png%3Falt%3Dmedia%26token%3D3a42a596-0633-44d9-b909-7ea6a759a74f&width=300&dpr=4&quality=100&sign=7b895213&sv=2) _(Screenshot above is of an image of an impure function node. Image was taken form Unreal Engine Documentation on_ [_Functions_](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Functions/#:~:text=Functions%20can%20either%20be%20Pure,just%20output%20a%20data%20value.) _)_ ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FxBNYVEcLMRkzYnbQ8g6x%252FScreenshot%25202023-10-02%2520at%25206.33.22%2520PM.png%3Falt%3Dmedia%26token%3Db2b46ae9-2b05-42f1-975f-a6dc72be61fe&width=300&dpr=4&quality=100&sign=829aaae4&sv=2) _(Screenshot above is of an image of a pure function node. Image was taken form Unreal Engine Documentation on_ [_Functions_](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Functions/#:~:text=Functions%20can%20either%20be%20Pure,just%20output%20a%20data%20value.) _)_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods#function-types) Function Types * **Pure (Green)**: * Pure functions don't have execution in or out pins and are generally used as getter functions to retrieve data * Pure functions promise not to modify the state or members of a target class in any way * Pure functions run when the return value is used * **Impure (Blue)**: * Impure functions have execution in and out pins * Impure functions can change the state or member of a target class; but it doesn't have to * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-functions-methods#links) Links * (Documentation) [Functions](https://dev.epicgames.com/documentation/en-us/unreal-engine/functions-in-unreal-engine?application_version=5.3) * (YouTube Video) [Learn to Code in UE5 - 9 - Functions and Events](https://www.youtube.com/watch?v=i3WtFWB_TlE&list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG&index=10) by Corquis Games * (YouTube Video) [Functions, macros & Events](https://www.youtube.com/watch?v=m6gHl11hqkU&list=PLL0cLF8gjBpqRUy7r0DtVY3Fcdgq5Wk-h&index=17) by Virtus Learning Hub * (YouTube Video) [WTF Is? A Pure Function](https://www.youtube.com/watch?v=8tVmCXMAJ7M) by Mathew Wadstein * (Article) [Pure & Impure Functions](https://medium.com/advanced-blueprint-scripting-in-unreal-engine/pure-impure-functions-516367cff14f) [PreviousBlueprint - Conditional Statements](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-conditional-statements) [NextBlueprint - Macro](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro) Last updated 1 year ago --- # Blueprint - Function vs Macro vs Collapse Node | Unreal Engine 5 - Notes * **Collapse Node-** Use when you want to consolidate blueprints and the logic does not have to be copied anywhere else in the blueprint * **Macro-** Use when you need to copy the logic around within the same blueprint class * **Function-** Use when you need to give external blueprint classes access to the blueprint logic (function) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-function-vs-macro-vs-collapse-node#links) Links * (YouTube) [Best Practices: Events, Functions, Macro, Pure, Impure, Const in Unreal Engine](https://www.youtube.com/watch?v=hM52OJnUSpI) by Learning Dev [PreviousBlueprint - Macro](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-macro) [NextBlueprint - Loops](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops) Last updated 1 year ago --- # Blueprint - Data Structures | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-structures#data-structures) Data Structures * Arrays * Sets * Maps [PreviousBlueprint - Loops](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops) [NextBlueprint - Arrays](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-structures/blueprint-arrays) Last updated 1 year ago --- # Blueprint - Loops | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops#what-is-a-loop) What is a loop? A loop is code that repeats x number of times or as long as a condition is true. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops#why-would-you-use-a-loop) Why would you use a loop? To repeat code multiple times. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops#video-game-examples) Video Game Examples * **Spawn Enemies:** You could use a loop to spawn N number of enemies based on a certain condition * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops#images-of-loop-blueprints) Images of Loop Blueprints **Image of ForLoop Blueprint** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252F6fbZdHMqtloFilbbaw9U%252FScreenshot%25202023-10-01%2520at%25206.32.36%2520PM.png%3Falt%3Dmedia%26token%3Db4ebf31b-0731-4a83-b6a4-fba145e5d76c&width=300&dpr=4&quality=100&sign=fb480c67&sv=2) _(Screenshot above is an image of variables in Unreal Engine Blueprints. Photo was taken from Unreal Engine Documentation on Flow Control)_ **Image of WhileLoop Blueprint** ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252F40GoKSWXodpRsob6pQz9%252FScreenshot%25202023-10-01%2520at%25206.33.49%2520PM.png%3Falt%3Dmedia%26token%3D8d265626-d31e-448a-936f-99542ca77b3f&width=300&dpr=4&quality=100&sign=2918a091&sv=2) _(Screenshot above is an image of variables in Unreal Engine Blueprints. Photo was taken from Unreal Engine Documentation on Flow Control)_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops#loops-programming-vs-blueprint) Loops - Programming vs Blueprint Programming Blueprint Notes For Loop ForLoop ForLoopWithBreak _The ForLoopWithBreak is similar to a For Loop in programming and having a break statement_ While Loop WhileLoop Do While Loop DoN DoOnce For Each Loop ForEachLoop * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops#notes) Notes * Loop iterations take place between frames * Large loops may incur a performance hit * Loops are flow control nodes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-loops#links) Links * (Documentation) [Flow Control](https://dev.epicgames.com/documentation/en-us/unreal-engine/flow-control-in-unreal-engine?application_version=5.3) * (YouTube) [Intro to Programming: Loops](https://www.youtube.com/watch?v=wxds6MAtUQ0) by CodeAcademy * (YouTube) [WTF Is? The For Loop Node](https://www.youtube.com/watch?v=2uWeqcTpYXw) by Mathew Wadstein Tutorials * (YouTube) [Learn to Code in UE5 - 7 - Code Execution Flow](https://www.youtube.com/watch?v=DHa6H3UaIBg&list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG&index=9) by Coqui Games * (YouTube) [Blueprint Essentials: For Loops | 09 | v4.2 Tutorial Series](https://www.youtube.com/watch?v=hXSKGYQvZsI&t=17s) by Unreal Engine * (YouTube) [Blueprint Essentials: For Loop with Break | 11 | v4.2 Tutorial Series](https://www.youtube.com/watch?v=o08VJxabdb4&list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl&index=11) by Unreal Engine * (YouTube) [For Loops - #11 Unreal Engine 4 Blueprint Tutorial Series](https://www.youtube.com/watch?v=l2CTmkhe850&list=PLL0cLF8gjBpqRUy7r0DtVY3Fcdgq5Wk-h&index=11) by Virtus Learning Hub * (YouTube) [Blueprint Essentials: For Each Loop | 12 | v4.2 Tutorial Series](https://www.youtube.com/watch?v=F-Ab8oS6YDU&list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl&index=12) by Unreal Engine * (YouTube) [Blueprint Essentials: While Loop | 13 | v4.2 Tutorial Series](https://www.youtube.com/watch?v=2RkaUkaLZu4&list=PLZlv_N0_O1ga2b_ZaJoaR5dLHOFw4-MMl&index=13) by Unreal Engine * (YouTube) [While Loops - #12 Unreal Engine 4 Blueprint Tutorial Series](https://www.youtube.com/watch?v=tdy7Yv1fcFE&t=138s) by Virtus Learning Hub [PreviousBlueprint - Function vs Macro vs Collapse Node](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-function-vs-macro-vs-collapse-node) [NextBlueprint - Data Structures](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-structures) Last updated 1 year ago --- # Blueprint - Events | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#what-is-an-event) What is an event? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#why-would-you-use-an-event) Why would you use an event? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#video-game-examples) Video Game Examples * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#event-dispatchers) Event Dispatchers * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#custom-events) Custom Events * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#custom-events-vs-event-dispatchers) Custom Events vs Event Dispatchers * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#links) Links #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#events) Events * (Documentation) [Events](https://dev.epicgames.com/documentation/en-us/unreal-engine/events-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#custom-events-1) Custom Events * (Documentation) [Custom Events](https://dev.epicgames.com/documentation/en-us/unreal-engine/custom-events-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#event-dispatchers-1) Event Dispatchers * (Page) [Actor Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events#extra) Extra * (Unreal Forum) [What is the difference between Custom Events and Event Dispatchers?](https://forums.unrealengine.com/t/what-is-the-difference-between-custom-events-and-event-dispatchers/466241) * Design Pattern -> Observer Pattern * (Book) Head First Design Patterns * (Book) Game Programming Patterns * (YouTube) [How to Program in Unity: Observer Pattern Explained](https://www.youtube.com/watch?v=NY_fzd8g5MU) by iHeartGameDev * (Website) [Observer](https://gameprogrammingpatterns.com/observer.html) * (YouTube) [Observer Pattern - Design Patterns (ep 2)](https://www.youtube.com/watch?v=_BpmfnqjgzQ&list=PLCOO6j3cDu94FP8pMPOigpyy0XoQkdKBW&index=2) by Christopher Okhravi [PreviousBlueprint - Maps](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-data-structures/blueprint-maps) [NextBlueprint - Actor Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication) Last updated 1 year ago --- # Blueprint - Hard vs Soft References | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-hard-vs-soft-references#what-is-a-hard-object-reference) What is a hard object reference? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-hard-vs-soft-references#what-is-a-soft-object-reference) What is a soft object reference? * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-hard-vs-soft-references#why-would-you-use-a-soft-object-reference-over-a-hard-object-reference) Why would you use a soft object reference over a hard object reference? * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-hard-vs-soft-references#links) Links #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-hard-vs-soft-references#object-and-class-variable-types) Object and Class Variable Types * (YouTube) [Object & Class Variable Types](https://www.youtube.com/watch?v=8s3VeRM-DgY) by Virtus Learning Hub * (YouTube) [Blueprint Essentials: Object and Class Variables](https://www.youtube.com/watch?v=xu7ymhN_7Lo) by Unreal Engine #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-hard-vs-soft-references#hard-vs-soft-references) Hard vs Soft References * Unreal Engine Topics [PreviousBlueprint - Getting References To Objects](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication/blueprint-getting-references-to-objects) [NextBlueprint - Collisions & Overlaps](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-collisions-and-overlaps) Last updated 1 year ago --- # Blueprint - Collisions & Overlaps | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-collisions-and-overlaps#links) Links * (Page) [Collisions](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/collisions) [PreviousBlueprint - Hard vs Soft References](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-hard-vs-soft-references) [NextBlueprint - Time Based](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based) Last updated 1 year ago --- # Blueprint - Actor Communication | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication#what-is-actor-communication) What is actor communication? One actor communicating with another actor ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication#why-would-you-use-actor-communication) Why would you use actor communication? When you want to inform another actor, or obtain information from another actor ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication#video-game-examples) Video Game Examples * **Intractable Door:** Player interacts with a door to open it * **Pickup Weapon:** Player interacts with weapon on the ground to pick it up and equip it * **Player dealing damage to enemy:** Player communicating with an enemy to inform it that it has taken damage * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication#table-of-different-types-of-actor-communication) Table of different types of actor communication Communication Type When to Use Requirements Example Direct Communication When communicating with a specific instance of an Actor in your Level Need a reference to the Actor in your Level Triggering an event on a specific Actor in your Level Casting When you want to verify an Actor is of a certain class to access its properties Need a reference to an Actor in your Level to cast to the desired Actor class. Accessing specific functionality of child Actors that share the same parent class Interfaces When adding the same functionality to different Actor classes Need a reference to the Actor in your Level and the Actor needs to implement the interface Adding an interaction behavior to different types of Actors Event Dispatchers When triggering an event from one Actor to many Actors Actors need to subscribe to the event to react to it Notifying many different types of Actors that an event has triggered _Note: Table above was copied from Unreal Engine documentation on_ [_Actor Communication_](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ActorCommunication/) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication#links) Links * (Documentation) [Actor Communication](https://dev.epicgames.com/documentation/en-us/unreal-engine/actor-communication-in-unreal-engine?application_version=5.3) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication#table-of-contents) Table of Contents * Direct Actor Communication * Casting * Interfaces * Casting vs Interfaces * Event Dispatchers [PreviousBlueprint - Events](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-events) [NextBlueprint - Direct Actor Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-actor-communication/blueprint-direct-actor-communication) Last updated 1 year ago --- # Blueprint - Working with Data | Unreal Engine 5 - Notes [Blueprint - Data Assets](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-data/blueprint-data-assets) [Blueprint - Data Tables](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-data/blueprint-data-tables) [PreviousBlueprint - Format Text Node](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-text/blueprint-format-text-node) [NextBlueprint - Data Assets](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-data/blueprint-data-assets) --- # Blueprint - Time Based | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based#what-are-time-based-nodes) What are time based nodes? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based#why-would-you-use-time-based-node) Why would you use time based node? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based#video-game-examples) Video Game Examples * **Weapon Fire Rate:** If you wanted to create a weapon such as a gun with a fire rate in your game, then you could use a time based node to control when the player can fire their weapon * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based#time-based-nodes) Time Based Nodes * Delay Node * Retriggerable Delay * Timers * Set Timer By Event * Set Timer By Function Name * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based#delay-node) Delay Node * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based#links) Links * (YouTube) [Learn To Code In UE5 - 10 - Time-based Code](https://www.youtube.com/watch?v=zsv0XJ1ty6c&list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG&index=11) by Corquis Games * (Documentation) [Delay Node](https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Utilities/FlowControl/Delay/) * (Documentation) [Retriggerable Node](https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Utilities/FlowControl/RetriggerableDelay/) * (Documentation) [Using Timers](https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/UseTimers/) [PreviousBlueprint - Collisions & Overlaps](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-collisions-and-overlaps) [NextBlueprint - Exception Handling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling) Last updated 1 year ago --- # Blueprint - Exception Handling | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling#what-is-exception-handling) What is exception handling? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling#video-game-examples) Video Game Examples * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling#links) Links #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling#exception-handling) Exception Handling * (YouTube) [Easily handle Invalid References / Failed Casts | Prevent Accessed None Error](https://www.youtube.com/watch?v=7Gg4al46Kis) by Kekdot * (Unreal Forum) [How to do something like try/catch exception in blueprint](https://forums.unrealengine.com/t/how-to-do-something-like-try-catch-exception-in-blueprint/300120) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling#is-valid-node) Is Valid Node * (Documentation) [Is Valid](https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Utilities/IsValid?application_version=5.3) * (YouTube) [WTF Is? Is Valid in Unreal Engine 4 (UE4)](https://www.youtube.com/watch?v=5d87aoNt-Dg) by Mathew Wadstein Tutorials * (YouTube) [Is Valid Check - #13 Unreal Engine 4 Blueprint Tutorial Series](https://www.youtube.com/watch?v=dY5XSFpqkos) by Virtus Learning Hub * (YouTube) [? Is Valid - node to avoid (some) Blueprint runtime errors](https://www.youtube.com/watch?v=_m-2cr7C6O4) by Mike Lenz Tips * (YouTube) [Is Valid/Validated Get - UE4 Tips & Tricks](https://www.youtube.com/watch?v=Evgk5m37pvQ) by Acheta Games * (YouTube) [Unreal Engine 4 - Exception Handling - Accessed None](https://www.youtube.com/watch?v=4tdy3FoRK_A) by Karan Parmar * (Unreal Forum) [Is Valid what does it mean, how to use it, and when to use it?](https://forums.unrealengine.com/t/is-valid-what-does-it-means-how-to-use-it-and-when-to-use-it/427337) * (Unreal Forum) [Blueprint Assert](https://dev.epicgames.com/community/learning/tutorials/Ebo4/blueprint-assert) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling#extra) Extra * (Wikipedia) [Null Pointer](https://en.m.wikipedia.org/wiki/Null_pointer#:~:text=Because%20a%20null%20pointer%20does,null%20pointer%20is%20undefined%20behavior) * (Wikipedia) [Exception Handling](https://en.wikipedia.org/wiki/Exception_handling) [PreviousBlueprint - Time Based](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-time-based) [NextBlueprint - Trace/Ray Cast](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast) Last updated 1 year ago --- # Blueprint - Working with Text | Unreal Engine 5 - Notes [Blueprint - Print String Node](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-text/blueprint-print-string-node) [Blueprint - Format Text Node](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-text/blueprint-format-text-node) [PreviousBlueprint - Trace/Ray Cast](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast) [NextBlueprint - Print String Node](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-text/blueprint-print-string-node) Last updated 1 year ago --- # Blueprint - Trace/Ray Cast | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast#what-is-a-trace) What is a trace? A trace, _also know as a ray cast,_ is a way to shoot an imaginary shape into the world to obtain information on the object that was hit. ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast#why-would-you-use-a-trace) Why would you use a trace? ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast#video-game-examples) Video Game Examples * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast#trace-types-in-unreal-engine) Trace Types in Unreal Engine **Shape:** * Line * Box * Capsule * Sphere **Type:** * Channel * Object * Profile **Detection Mode:** * Single * Multi * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast#notes) Notes * X direction in Unreal Engine is forward * Y direction in Unreal Engine is right * Z direction in Unreal Engine is Up * Multiply the X, Y, or Z directions by -1 to get the opposite/backwards directions * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-trace-ray-cast#links) Links * (Documentation) [Traces Overview](https://dev.epicgames.com/documentation/en-us/unreal-engine/traces-in-unreal-engine---overview?application_version=5.3) * (YouTube) [Learn to Code in UE5 - 16 - Traces](https://www.youtube.com/watch?v=dMqpzgu7T3k&list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG&index=17) by Coqui Games * (YouTube) [When and why ray casting used in video games](https://www.youtube.com/watch?v=1sKQwRzyLR0) by Tutemic [PreviousBlueprint - Exception Handling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-exception-handling) [NextBlueprint - Working with Text](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-text) Last updated 1 year ago --- # Blueprint - Namespaces | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-namespaces#links) Links * (Documentation) [Blueprint Namespaces](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprint-namespaces-in-unreal-engine) [PreviousBlueprint - Data Tables](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-working-with-data/blueprint-data-tables) [NextBlueprint Best Practices](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-best-practices) Last updated 1 year ago --- # Blueprint Best Practices | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-best-practices#links) Links * (Documentation) [Blueprints Technical Guide](https://docs.unrealengine.com/4.26/en-US/ProgrammingAndScripting/Blueprints/TechnicalGuide/) * (Documentation) [Blueprint Best Practices](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprint-best-practices-in-unreal-engine?application_version=5.3) * (Unreal Forum) [Unreal Engine Fundamental Blueprint Practices](https://dev.epicgames.com/community/learning/tutorials/wrKz/unreal-engine-fundamental-blueprint-practices) [PreviousBlueprint - Namespaces](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/learning-blueprints/blueprint-namespaces) [NextBlueprint Programming Fundamentals Reference](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-programming-fundamentals-reference) Last updated 1 year ago --- # C++ | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++#table-of-contents) Table of Contents * [C++ Cheat Sheet for Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-cheat-sheet-for-unreal-engine) * [Exposing C++ to Blueprints & the Editor](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor) * [Unreal Engine C++ Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics) * [C++ Resources](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/352/unreal-engine/c++/c++-resources) [PreviousBlueprint Programming Fundamentals Reference](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-programming-fundamentals-reference) [NextC++ Cheat Sheet for Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-cheat-sheet-for-unreal-engine) Last updated 1 year ago --- # Blueprint Programming Fundamentals Reference | Unreal Engine 5 - Notes 1. Blueprint Types 2. Blueprint Node Types & Colors 3. Variables 4. Enums 5. Structs 6. Functions/Methods 1. Parameters & Arguments 2. Return values 3. Pure vs Impure Functions 7. Function vs Macro vs Collapse Node 8. Conditions 1. Branch Node (If Statement) 2. Switch Case 9. Loops 1. For Loop 2. While Loop 10. Data Structures 1. Arrays 2. Sets 3. Maps 11. Events & Custom Events 12. Blueprint Communication 1. Direct Communication 2. Casting 3. Interfaces 4. Event Dispatchers 13. Line Trace/Ray Trace 14. Hard vs Soft References 15. Exception Handling 16. Tick Best Practices & Alternatives 17. Asynchronous vs Synchronous 18. Object-Oriented Programming 1. Encapsulation 2. Inheritance 3. Polymorphism 4. Abstraction [PreviousBlueprint Best Practices](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/blueprints/blueprint-best-practices) [NextC++](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++) Last updated 1 year ago --- # Web Browser | Unreal Engine 5 - Notes * [https://unrealcommunity.wiki/web-browser-widget-13f406](https://unrealcommunity.wiki/web-browser-widget-13f406) * [https://www.reddit.com/r/unrealengine/comments/1c3pmc6/do\_anyone\_know\_an\_uptodate\_browser\_widget\_for\_ue5/?utm\_source=share&utm\_medium=web3x&utm\_name=web3xcss&utm\_term=1&utm\_content=share\_button](https://www.reddit.com/r/unrealengine/comments/1c3pmc6/do_anyone_know_an_uptodate_browser_widget_for_ue5/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button) [PreviousHow To...](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to...) [NextReference an actor in the level](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to.../reference-an-actor-in-the-level) Last updated 12 months ago --- # Exposing C++ to Blueprints & the Editor | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor#exposing-properties-variables-to-the-editor) Exposing Properties/Variables to the Editor Syntax Description `UPROPERTY(EditDefaultsOnly)` only allows you to edit inside of the default blueprint `UPROPERTY(EditInstanceOnly)` only allows you to edit the instance `UPROPERTY(EditAnywhere)` can edit anywhere `UPROPERTY(VisibleDefaultsOnly)` only is visible in the default blueprint, but not editable `UPROPERTY(VisibleInstanceOnly)` only is visible for the instance, but not editable `UPROPERTY(VisibleAnywhere)` is visible for the instance and default blueprint, but not editable `UPROPERTY(Category="")` assigns the property to the specified category in the editor **Notes:** * The UPROPERTY() macro is used to expose properties/variables from C++ to the Editor * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor#exposing-properties-variables-to-the-eventgraph-blueprints) Exposing Properties/Variables to the EventGraph (Blueprints) Syntax Description `UPROPERTY(BlueprintReadOnly)` only allows you to get the variable using the getter `UPROPERTY(BlueprintReadWrite)` allows you to both get the variable using the getter, and setting the variable `UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = true))` allows you to expose a private property to the Blueprint EventGraph * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor#exposing-functions) Exposing Functions Syntax Description `UFUNCITON(BlueprintCallable)` allows the function to be callable from Blueprints `UFUNCITON(BlueprintPure)` allows the function to be callable from Blueprints as a pure function * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor#links) Links * Refer to the "Reflection System" and C++ and Blueprints section of [C++ Topics](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/469/unreal-engine/programming-c++/c++-topics) [PreviousC++ Cheat Sheet for Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-cheat-sheet-for-unreal-engine) [NextUnreal Engine C++ Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics) Last updated 1 year ago --- # How To... | Unreal Engine 5 - Notes [Web Browser](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to.../web-browser) [Reference an actor in the level](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to.../reference-an-actor-in-the-level) [PreviousExtra Programming Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics) [NextWeb Browser](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to.../web-browser) --- # Reference an actor in the level | Unreal Engine 5 - Notes 1. Store a reference to the actor in a variable 2. Look up actors in the level 1. `Get Actor of Class` 2. `Get All Actors of Class` 3. Look up actors by tag 1. `Get All Actors with Tag` 2. `Get All Actors of Class with Tag` 4. Collision box to detect actors that enter it 5. Ray Trace/Line Trace to detect actors [PreviousWeb Browser](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to.../web-browser) [NextArtificial Intelligence (AI)](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/artificial-intelligence-ai) Last updated 1 year ago --- # AI Resources | Unreal Engine 5 - Notes * (Book) AI for Games * (YouTube Channel) [AI and Games](https://www.youtube.com/@AIandGames) * (Documentation) Artificial Intelligence-> [https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/](https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/) * (Documentation) Gameplay Debugger-> [https://dev.epicgames.com/documentation/en-us/unreal-engine/using-the-gameplay-debugger-in-unreal-engine](https://dev.epicgames.com/documentation/en-us/unreal-engine/using-the-gameplay-debugger-in-unreal-engine) * (Course) [Introduction to AI with Blueprints](https://dev.epicgames.com/community/learning/courses/67R/unreal-engine-introduction-to-ai-with-blueprints/mX27/introduction-to-ai-with-blueprints) [PreviousArtificial Intelligence (AI)](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/artificial-intelligence-ai) [NextUnreal Engine Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics) Last updated 1 year ago --- # Artificial Intelligence (AI) | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/artificial-intelligence-ai#table-of-contents) Table of Contents * [AI Resources](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/354/unreal-engine/artificial-intelligence/ai-resources) [PreviousReference an actor in the level](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to.../reference-an-actor-in-the-level) [NextAI Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/artificial-intelligence-ai/ai-resources) Last updated 1 year ago --- # Programming Topics | Unreal Engine 5 - Notes [String Handling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/string-handling) [Object Pooling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/object-pooling) [Hard vs Soft References](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/hard-vs-soft-references) [Garbage Collection](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/garbage-collection) [Testing](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/testing) [Extra Programming Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics) [PreviousC++ Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-resources) [NextString Handling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/string-handling) --- # Unreal Engine C++ Topics | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics#data-types) **Data Types** * (Documentation) [Data Types](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Plugins/OSC/FOSCType/DataTypes?application_version=5.3) * (Documentation) [FGeneric Platform Types](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/GenericPlatform/FGenericPlatformTypes?application_version=5.3) * (Documentation) [String Handling](https://dev.epicgames.com/documentation/en-us/unreal-engine/string-handling-in-unreal-engine?application_version=5.3) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics#reflection-system) **Reflection System** * (Documentation) [Unreal Engine Reflection System](https://dev.epicgames.com/documentation/en-us/unreal-engine/reflection-system-in-unreal-engine?application_version=5.3) * (Documentation) [UPROPERTY](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-uproperties?application_version=5.3) * (Documentation) [UFUNCTION](https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine?application_version=5.3) * (Article) [UFUNCTION](https://www.tomlooman.com/unreal-engine-ufunction-specifiers/) * (Website) [UProperty](https://benui.ca/unreal/uproperty/) * (Documentation) [C++ API Reference for TSubclassOf](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/Templates/TSubclassOf?application_version=5.3) * (Page) [Exposing C++ to Blueprints & the Editor](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics#c-and-blueprints) **C++ and Blueprints** * (YouTube) [Blueprints vs. C++: How They Fit Together and Why You Should Use Both](https://www.youtube.com/watch?v=VMZftEVDuCE&list=PLrRmsT-jf_qrwc6P0cXZNOhC7rwEPCUjK&index=2) by Alex Forsythe * (YouTube) [C++ for Blueprints | Unreal Engine](https://www.youtube.com/watch?v=6485d5Zoc_k&t=1015s) by Unreal Engine * (Documentation) [Exposing Gameplay Elements to Blueprints](https://dev.epicgames.com/documentation/en-us/unreal-engine/exposing-gameplay-elements-to-blueprints-visual-scripting-in-unreal-engine) * (Documentation) [Balancing Blueprints and C++](https://docs.unrealengine.com/4.27/en-US/Resources/SampleGames/ARPG/BalancingBlueprintAndCPP/) * (Unreal Learning) [Balancing Blueprints and C++](https://dev.epicgames.com/community/learning/courses/NGA/unreal-engine-balancing-blueprints-and-c/e9xq/unreal-engine-balancing-blueprints-and-c-overview) * [https://dev.epicgames.com/documentation/en-us/unreal-engine/coding-in-unreal-engine-blueprint-vs.-cplusplus?application\_version=5.4](https://dev.epicgames.com/documentation/en-us/unreal-engine/coding-in-unreal-engine-blueprint-vs.-cplusplus?application_version=5.4) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics#access-modifiers) **Access Modifiers** * (Access Modifier) public - if the code will be called from external classes * (Access Modifier) protected - if the code will be called from derived/child classes only * (Access Modifier) private - if the code will only be called from the same class * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics#extra-resources) **Extra Resources** * (Website) [uecasts.com](https://uecasts.com/) [PreviousExposing C++ to Blueprints & the Editor](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor) [NextC++ Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-resources) Last updated 11 months ago --- # C++ Resources | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-resources#unreal-engine-c-learning-path) Unreal Engine C++ Learning Path #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-resources#optional-part-1-learn-c) (Optional) Part 1: Learn C++ * (Website) [learncpp.com](https://www.learncpp.com/) * (YouTube Playlist) [C++ Tutorial for Beginners](https://www.youtube.com/playlist?list=PLZPZq0r_RZOMHoXIcxze_lP97j2Ase2on) by Bro Code * (YouTube Playlist) [C++ New](https://www.youtube.com/playlist?list=PL_c9BZzLwBRIwEnaRU2LC4GkqxUbD0Auc) by Caleb Curry * (YouTube Playlist) [C++](https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb) by The Cherno #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-resources#part-2-learn-c-for-unreal-engine) Part 2: Learn C++ for Unreal Engine * (Udemy - PAID) [Unreal Engine 5 C++ Developer: Learn C++ & Make Video Games](https://www.udemy.com/course/unrealcourse/) by GameDev.TV * (Udemy- PAID) [Unreal Engine 5 C++ The Ultimate Game Developer Course](https://www.udemy.com/course/unreal-engine-5-the-ultimate-game-developer-course/) by Stephen Ulibarri * (Article) [Unreal Engine C++ Complete Guide](https://www.tomlooman.com/unreal-engine-cpp-guide/) * (GitHub Repo) [Guide Unreal Engine](https://github.com/MrRobinOfficial/Guide-UnrealEngine) * (Website) [https://benui.ca/](https://benui.ca/) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-resources#extra-resources) Extra Resources * (Documentation) [Programming with C++ in Unreal Engine](https://docs.unrealengine.com/5.0/en-US/programming-with-cplusplus-in-unreal-engine/) * (Course - PAID) [Professional Game Development in C++ and Unreal Engine](https://courses.tomlooman.com/p/unrealengine-cpp?coupon_code=COMMUNITY15) by Tom Looman * (YouTube) [Unreal Engine 5 Tutorial - C++ Part 1: Create a Class](https://www.youtube.com/watch?v=FBpnOuCgHu4) by Ryan Laley * (YouTube Playlist) [Getting into C++ with Unreal Engine](https://www.youtube.com/playlist?list=PLaaDnVlfJwc4Lncf4XTYaTRG_osOk-T0N) by GGameDev * (Udemy - PAID) [The Unreal Arsenal: Learn C++ and Unreal Engine](https://www.udemy.com/course/the-unreal-arsenal/) by Neville Adams * (YouTube Playlist) [UE4 - Blueprints to C++: UE5 C++ Programming Guide](https://www.youtube.com/playlist?list=PLY9cHlxw3OgjKmwaTEekW3sr_oHY-HwGv) by Mike Stevanovic * (YouTube Playlist) [UE4 C++](https://www.youtube.com/playlist?list=PL9z3tc0RL6Z4JJS__Bge8O2mLwKUaG1eU) by Dev Enabled * (YouTube Playlist) [Unreal Engine 4 C++ Tutorial](https://www.youtube.com/playlist?list=PLrRmsT-jf_qrwc6P0cXZNOhC7rwEPCUjK) by Tom Looman * (Unreal Learning) [Unreal Engine Essentials for Games | Onboarding Collection](https://dev.epicgames.com/community/learning/courses/aJM/unreal-engine-essentials-for-games-onboarding-collection/PdGj/unreal-engine-essentials-for-games) [PreviousUnreal Engine C++ Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/unreal-engine-c++-topics) [NextProgramming Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics) Last updated 1 year ago --- # String Handling | Unreal Engine 5 - Notes * FString * FName * FText * Text() * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/string-handling#links) Links * (Documentation) [String Handling](https://dev.epicgames.com/documentation/en-us/unreal-engine/string-handling-in-unreal-engine?application_version=5.3) * (Unreal Forum) [What is the general rule when using Text, String, or Name?](https://forums.unrealengine.com/t/what-is-the-general-rule-when-using-text-string-or-name/292348/1) * (Article) [FString vs FName vs Text un Unreal Engine](https://agrawalsuneet.github.io/blogs/fstring-vs-fname-vs-text-in-unreal/) [PreviousProgramming Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics) [NextObject Pooling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/object-pooling) Last updated 1 year ago --- # Garbage Collection | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/garbage-collection#links) **Links** * (Documentation) [Objects](https://dev.epicgames.com/documentation/en-us/unreal-engine/objects-in-unreal-engine?application_version=5.3) * (Documentation) [Object Handling](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-object-handling-in-unreal-engine?application_version=5.3) * (Article) [Memory Management and Garbage Collection in Unreal Engine 6](https://mikelis.net/memory-management-garbage-collection-in-unreal-engine/) * (Community Wiki) [Garbage Collection](https://unrealcommunity.wiki/garbage-collection-36d1da) [PreviousHard vs Soft References](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/hard-vs-soft-references) [NextTesting](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/testing) Last updated 1 year ago --- # Project Structure & Coding Standard | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/project-structure-and-coding-standard#project-structure) Project Structure * (Documentation) [Directory Structure](https://docs.unrealengine.com/4.26/en-US/Basics/DirectoryStructure/) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/project-structure-and-coding-standard#coding-standard) Coding Standard * (Documentation) [Coding Standard](https://docs.unrealengine.com/5.3/en-US/epic-cplusplus-coding-standard-for-unreal-engine/) * (GitHub Repo) [Style Guide](https://github.com/Allar/ue5-style-guide) * (Article) [Naming Conventions](https://www.tomlooman.com/unreal-engine-naming-convention-guide/) [PreviousGameplay Tags vs Tags](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-tags-vs-tags) [NextGameplay Framework/Architecture](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture) Last updated 1 year ago --- # Object Pooling | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/object-pooling#links) Links * (Wikipedia) [Object Pool Pattern](https://en.wikipedia.org/wiki/Object_pool_pattern) * (YouTube) [The Right Way to Spawn Object in Unreal Engine](https://www.youtube.com/watch?v=f797l7YTcgc) by Ali Elzoheiry * (YouTube) [Object Pool Design pattern in Unreal Engine](https://www.youtube.com/watch?v=WEXVOE8s0Og) by Game Dev Beat * (Unity Learn) [Introduction to Object Pooling](https://learn.unity.com/tutorial/introduction-to-object-pooling#) [PreviousString Handling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/string-handling) [NextHard vs Soft References](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/hard-vs-soft-references) Last updated 1 year ago --- # Testing | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/testing#links) Links * (YouTube) [Automated Testing at Scale in Sea of Thieves | Unreal Feast Europe 2019 | Unreal Engine](https://www.youtube.com/watch?v=KmaGxprTUfI) by Unreal Engine [PreviousGarbage Collection](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/garbage-collection) [NextExtra Programming Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics) Last updated 1 year ago --- # Tools | Unreal Engine 5 - Notes * [https://blueprintue.com/](https://blueprintue.com/) [PreviousGameplay Framework/Architecture](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture) [NextHow To...](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to...) Last updated 1 year ago --- # Hard vs Soft References | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/hard-vs-soft-references#links) Links * (Community Post) [All about Soft and Weak pointers](https://dev.epicgames.com/community/learning/tutorials/kx/unreal-engine-all-about-soft-and-weak-pointers) * (YouTube Video) [Demystifying Soft Object References | Inside Unreal](https://www.youtube.com/watch?v=K0ENnLV19Cw) by Unreal Engine * (YouTube Video) [UE5 Efficient Blueprints - Soft/Hard References](https://www.youtube.com/watch?v=NXLOqtneLE4&t=130s) by Polysiens * (YouTube Video) [Unreal Overloaded - Soft and Hard References](https://www.youtube.com/watch?v=giDf4G6Ndk8&t=1s) by Amir Ansari * (Article) [Object references in Blueprints](https://medium.com/advanced-blueprint-scripting-in-unreal-engine/object-references-in-blueprints-4c0df7f4dc1d) * (Article) [Understanding Hard References and Soft References in Unreal Engine](https://www.quodsoler.com/blog/understanding-hard-references-and-soft-references-in-unreal-engine) * (Article) [Hard References & Reasons to Avoid Them](https://raharuu.github.io/unreal/hard-references-reasons-avoid/) [PreviousObject Pooling](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/object-pooling) [NextGarbage Collection](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/garbage-collection) Last updated 1 year ago --- # C++ Cheat Sheet for Unreal Engine | Unreal Engine 5 - Notes \[INSERT TEXT\] * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-cheat-sheet-for-unreal-engine#c-table-cheat-sheet-for-unreal-engine) C++ Table Cheat Sheet for Unreal Engine C++ Unreal Engine C++ Documentation `int` `int32` or `int64` * (Documentation) [C++ API Reference for int32](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/GenericPlatform/FGenericPlatformTypes/int32?application_version=5.3) * (Documentation) [C++ API Reference for int64](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/GenericPlatform/FGenericPlatformTypes/int64?application_version=5.3) `float` `float` `double` `double` `bool` `bool` `std::string` * `FString` * `TEXT()` * (Documentation) [C++ API Reference for FString](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/Containers/FString?application_version=5.3) * (Documentation) [FString](https://dev.epicgames.com/documentation/en-us/unreal-engine/fstring-in-unreal-engine?application_version=5.3) `FName` * (Documentation) [C++ API Reference for Fname](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/UObject/FName?application_version=5.3) * (Documentation) [FName](https://dev.epicgames.com/documentation/en-us/unreal-engine/fname-in-unreal-engine?application_version=5.3) `FText` (Documentation) [FText](https://dev.epicgames.com/documentation/en-us/unreal-engine/ftext-in-unreal-engine?application_version=5.3) `struct` `UStruct` * (Documentation) [C++ API Reference for UStruct](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/UObject/UStruct?application_version=5.3) * (Documentation) [UStruct](https://dev.epicgames.com/documentation/en-us/unreal-engine/structs-in-unreal-engine?application_version=5.3) `enum` `UENUM()` (Documentation) [C++ API Reference for UEnum](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/UObject/UEnum?application_version=5.3) Array `TArray<>` * (Documentation) [C++ API Reference for TArray](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/Containers/TArray?application_version=5.3) * (Documentation) [TArray](https://dev.epicgames.com/documentation/en-us/unreal-engine/array-containers-in-unreal-engine?application_version=5.3) `std::map` `TMap<>` * (Documentation) [C++ API Reference for TMap](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/Containers/TMap?application_version=5.3) * (Documentation) [TMap](https://dev.epicgames.com/documentation/en-us/unreal-engine/map-containers-in-unreal-engine) `std::set` `TSet<>` * (Documentation) [C++ API Reference for TSet](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/Containers/TSet?application_version=5.3) * (Documentation) [TSet](https://dev.epicgames.com/documentation/en-us/unreal-engine/set-containers-in-unreal-engine) Pointers same as regular C++ or use `TObjectPtr` * (Documentation) [Unreal Reflection System](https://dev.epicgames.com/documentation/en-us/unreal-engine/reflection-system-in-unreal-engine?application_version=5.3) * (Documentation) [Unreal Smart Pointer Library](https://dev.epicgames.com/documentation/en-us/unreal-engine/smart-pointers-in-unreal-engine?application_version=5.3) * (Community Post) [Why should I replace raw pointers with TObjectPtr?](https://forums.unrealengine.com/t/why-should-i-replace-raw-pointers-with-tobjectptr/232781/10) * (Documentation) [Unreal Engine 5 Migration Guide](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-5-migration-guide?application_version=5.0) `TSoftObjectPtr` * (Documentation) [TSoftObjectPtr](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/UObject/TSoftObjectPtr?application_version=5.3) Casting `Cast<>()` * (Documentation) [Casting Quick Start Guide](https://dev.epicgames.com/documentation/en-us/unreal-engine/casting-quick-start-guide-in-unreal-engine?application_version=5.3) * (Community Post) [I don't understand why use StaticCast instead of static\_cast?](https://forums.unrealengine.com/t/i-dont-understand-why-use-staticcast-instead-of-static-cast/748356) Class `UCLASS()` * (Documentation) [Gameplay Classes](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-classes-in-unreal-engine?application_version=5.3) * (Documentation) [Class Specifiers](https://dev.epicgames.com/documentation/en-us/unreal-engine/class-specifiers?application_version=5.3) `UINTERFACE()` * (Documentation) [Interfaces](https://dev.epicgames.com/documentation/en-us/unreal-engine/interfaces-in-unreal-engine?application_version=5.0) * (Documentation) [Unreal Interfaces](https://dev.epicgames.com/documentation/en-us/unreal-engine/interfaces-in-unreal-engine?application_version=5.3) `UE_LOG()` * (Community Wiki) [Logging](https://unrealcommunity.wiki/logging-lgpidy6i#logging-using-ue_log) * (GitHub) [Logs, Printing Messages To Yourself During Runtime](https://nerivec.github.io/old-ue4-wiki/pages/logs-printing-messages-to-yourself-during-runtime.html) * (Article) [Logging in UE4 CPP](https://www.chrismccole.com/blog/logging-in-ue4-cpp) * (Documentation) [Asserts](https://dev.epicgames.com/documentation/en-us/unreal-engine/asserts-in-unreal-engine) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-cheat-sheet-for-unreal-engine#extra) Extra Unreal Engine C++ Description Documentation `UPROPERTY()` is used to expose properties/variables to the editor and Blueprints (Documentation) [UPROPERTY](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-uproperties?application_version=5.3) `UFUNCTION()` is used to expose functions to Blueprints (Documentation) [UFUNCTION](https://dev.epicgames.com/documentation/en-us/unreal-engine/ufunctions-in-unreal-engine?application_version=5.3) `UDELEGATE()` * (Documentation) [Delegates](https://dev.epicgames.com/documentation/en-us/unreal-engine/delegates-and-lamba-functions-in-unreal-engine?application_version=5.3) * (Website) [Intro to Delegates in C++](https://benui.ca/unreal/delegates-intro/) * (Community Learning) [Brief Overview of Delegates and their use in C++ and Blueprints](https://dev.epicgames.com/community/learning/tutorials/6xrK/unreal-engine-brief-overview-of-delegates-and-their-uses-in-c-and-blueprints) `FHitResult` (Documentation) [C++ API Reference for FHitResult](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Engine/FHitResult?application_version=5.3) `FVector` `FRotator` `TSubclassOf<>` is used to spawn an object in C++ that is based on a Blueprint * (Documentation) [C++ API Reference for TSubclassOf](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/Templates/TSubclassOf?application_version=5.3) * (Documentation) [TSubclassOf](https://dev.epicgames.com/documentation/en-us/unreal-engine/typed-object-pointer-properties-in-unreal-engine?application_version=5.3) `UWorld::SpawnActor<>()` is used to spawn objects * (Documentation) [C++ API Reference for UWorld::SpawnActor](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Engine/UWorld/SpawnActor/4?application_version=5.3) * (Documentation) [Spawning Actors](https://dev.epicgames.com/documentation/en-us/unreal-engine/spawning-actors-in-unreal-engine?application_version=5.3) `UGameplayStatics` (Documentation) [C++ API Reference for UGameplayStatics](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Kismet/UGameplayStatics?application_version=5.3) `UClass::StaticClass` is used to get the UClass of a class (Documentation) [C++ API Reference for UClass::StaticClass](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/UObject/UClass/StaticClass?application_version=5.3) `Destroy()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/c++-cheat-sheet-for-unreal-engine#notes) Notes * Unreal Engine uses a lot of macros such as TEXT(), UPROPERTY(), etc... * Don't assign content/assets in C++, instead create Blueprints that derive from your C++ classes and assign content/assets inside of Blueprints [PreviousC++](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++) [NextExposing C++ to Blueprints & the Editor](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/c++/exposing-c++-to-blueprints-and-the-editor) Last updated 1 year ago --- # How To... | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to...#what-is-this-section) What is this section? This "How To..." section will cover how to implement various mechanics using Unreal Engine. * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to...#important-to-note) Important to note * The implementations in this section doesn't necessarily mean that they're the only way to implement said functionality, nor are they necessarily the best way * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to...#table-of-contents) Table of Contents * [Create a Top Down Camera View](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to.../create-a-top-down-camera-view) [PreviousTools](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/tools) [NextCreate a Top Down Camera View](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to.../create-a-top-down-camera-view) Last updated 1 year ago --- # Extra Programming Topics | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics#topics) Topics * Object-Oriented Programming * S.O.L.I.D. * Design Patterns * Loose Coupling vs Tight Coupling * Dependency Injection * Data Structures & Algorithms * Refactoring * Debugging * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics#data-structures-and-algorithms) Data Structures & Algorithms * (Book) A Common Sense Guide to Data Structures & Algorithms * (Book) Grokking Algorithms * (Course - PAID) neetcode.io - Data Structures & Algorithms courses * (Course - PAID) codewithmosh.com - Data Structures & Algorithms courses * (YouTube Playlist) [Data Structures and Algorithms](https://www.youtube.com/playlist?list=PLZPZq0r_RZON1eaqfafTnEexRzuHbfZX8) by Bro Code * (YouTube Playlist) [Data Structures and Algorithms](https://www.youtube.com/playlist?list=PLBZBJbE_rGRV8D7XZ08LK6z-4zPoWzu5H) by CS Dojo * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics#design-patterns) Design Patterns * (Book) Head First Design Patterns * (YouTube Playlist) [Head First Design Patterns](https://www.youtube.com/playlist?list=PLCOO6j3cDu94FP8pMPOigpyy0XoQkdKBW) by Christopher Okhravi * (Book) Game Programming Patterns * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics#dependency-injection) Dependency Injection * (YouTube) [Dependency Injection, The Best Pattern](https://www.youtube.com/watch?v=J1f5b4vcxCQ&t=49s) by CodeAesthetic * (YouTube) [Dependency Injection in a Nutshell](https://www.youtube.com/watch?v=yunF2PgJlHU) by Philipp Lackner * (Wikipedia) [Dependency Injection](https://en.wikipedia.org/wiki/Dependency_injection) * (Article) [A quick intro to Dependency Injection: what it is, and when to use it](https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics#refactoring) Refactoring * (Website) [Refactoring](https://refactoring.guru/refactoring) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics#solving-problems) Solving Problems * (YouTube) [How To Think Like A Programmer](https://www.youtube.com/watch?v=azcrPFhaY9k&t=3026s) by Coding Tech * (Article) [How To Solve Coding Problems](https://www.freecodecamp.org/news/how-to-solve-coding-problems/) * (Book) Starting out with Programming logic & Design * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/extra-programming-topics#extra) Extra * (YouTube) [Introduction to Programming and Computer Science - Full Course](https://www.youtube.com/watch?v=zOjov-2OZ0E&t=6377s) by FreeCodeCamp * (Book) Clean Code [PreviousTesting](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/programming/programming-topics/testing) [NextHow To...](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/how-to...) Last updated 1 year ago --- # Game Flow | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/game-flow#links) Links * (Documentation) [Game Flow](https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/Framework/GameFlow/) [PreviousEnhanced Input](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/enhanced-input) [NextTick & Tick Alternatives](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/tick-and-tick-alternatives) Last updated 1 year ago --- # Enhanced Input | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/enhanced-input#links) Links * (Documentation) [Enhanced Input](https://dev.epicgames.com/documentation/en-us/unreal-engine/enhanced-input-in-unreal-engine) [PreviousUnreal Engine Topics](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics) [NextGame Flow](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/game-flow) Last updated 1 year ago --- # Tick & Tick Alternatives | Unreal Engine 5 - Notes [PreviousGame Flow](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/game-flow) [NextAsset/Feature Pack](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/asset-feature-pack) --- # Gameplay Framework/Architecture | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture#questions) Questions * Where should you store player UI? * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture#gameplay-framework) Gameplay Framework Class Description Notes Networking Game Instance Used to store anything that you want to persist between levels. It's a manager class * Good place to manage your save game system It isn't replicated, and exists separately on the server and all clients Game Mode Used to specify the rules for your game (i.e. respawn locations, levels to travel to, number of allowed players, etc…) * Isn’t a good Blueprint to be used to carry data over from one level to another because when opening a level any data inside of the Game Mode Blueprint is reset to the default values * You can have multiple Game Mode Blueprints * Multiplayer: If a new player joins an already in play session of a multiplayer game the Game Mode automatically creates a Pawn Controller and State for them too Exists only on the server Game State Contains data and logic relevant to all players in a game, such as team scores, objectives, and a list of all players and their associated states * A single Game State is created by the Game Mode Exists on the server and is replicated to all clients Player State Contains data and logic relevant to its associated player, such as health, ammo count, and inventory * A player state is created for each player when they join a game or upon entrance into the level Exists on the server and is replicated to all clients Player Controller * Possess a single Pawn (or Character) * Persists through a play session * Best used to house user centric functionality such as pausing the game, or functionality shared by any Pawns or Characters you may control (such as jumping) Only exists on the owning client and server AI Controller HUD The user interface class and came before UMG Only exists on the client and is not suitable for replication Level Blueprint * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture#component-based-architecture) Component Based Architecture * (Dev Community) [Component Based Architecture](https://dev.epicgames.com/community/learning/tutorials/eyR/unreal-engine-component-based-architecture) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture#notes) Notes * **Character/Pawn Blueprint -** Character/Pawn specific functionality should exist within the Character/Pawn class and not the Player Controller * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture#links) Links * (Unreal Learning) [Begin Play | Gameplay](https://dev.epicgames.com/community/learning/tutorials/l21z/unreal-engine-begin-play-gameplay) * (Documentation) [Gameplay Framework Quick Reference](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-framework-quick-reference-in-unreal-engine?application_version=5.3) * (Documentation) [Gameplay Framework](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-framework-in-unreal-engine?application_version=5.3) * (Article) [Unreal Gameplay Framework Guide for C++](https://www.tomlooman.com/unreal-engine-gameplay-framework/) * (YouTube) [The Unreal Engine Game Framework: From int main() to BeginPlay](https://www.youtube.com/watch?v=IaU2Hue-ApI) by Alex Forsythe * (Documentation) [Architecture](https://docs.unrealengine.com/4.26/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/) * (Documentation) [Gameplay Architecture](https://dev.epicgames.com/documentation/en-us/unreal-engine/programming-with-cpp-in-unreal-engine?application_version=5.3) * (GitHub) Unreal Schematics-> [https://github.com/drstreit/unreal\_schematics](https://github.com/drstreit/unreal_schematics) * (Community Post) [Singleton Pattern In C++](https://forums.unrealengine.com/t/singleton-pattern-in-c/430452/5) * (Documentation) [Types of Blueprints](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/UserGuide/Types/) * (YouTube) [WTF is? The best thing to use?](https://www.youtube.com/watch?v=nKMWf397QHg) by Mathew Wadstein Tutorials #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture#game-mode-blueprint) Game Mode Blueprint * (Unreal Forum) [Understanding When to Use Game Modes and General Organization](https://forums.unrealengine.com/t/understanding-when-to-use-game-modes-and-general-organization/433894) * (Unreal Forum) [Question about proper use of Game Mode Blueprint](https://forums.unrealengine.com/t/question-about-proper-use-of-game-mode-blueprint/726218/3) * (Documentation) [Game Mode and Game State](https://dev.epicgames.com/documentation/en-us/unreal-engine/game-mode-and-game-state-in-unreal-engine?application_version=5.3) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/gameplay-framework-architecture#player-controller-vs-character-pawn-blueprint) Player Controller vs Character/Pawn Blueprint * (Documentation) [Player Controller](https://dev.epicgames.com/documentation/en-us/unreal-engine/player-controllers-in-unreal-engine?application_version=5.3) * (Unreal Forum) [Character Blueprint vs Player Controller](https://forums.unrealengine.com/t/character-blueprint-vs-player-controller/253175/9) * (Unreal Forum) [PlayerController vs Character](https://forums.unrealengine.com/t/playercontroller-vs-character/315986) * (Reddit) [Player Controller vs Character Class - Where do you put Player Logic?](https://www.reddit.com/r/unrealengine/comments/yetxy1/player_controller_vs_character_class_where_do_you/) * (Unreal Forum) [What is the difference between a character blueprint and a player controller blueprint](https://forums.unrealengine.com/t/what-is-the-difference-between-a-character-blueprint-and-a-player-controller-blueprint/447578/2) [PreviousProject Structure & Coding Standard](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/project-structure-and-coding-standard) [NextTools](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/tools) Last updated 1 year ago --- # Unreal Engine Topics | Unreal Engine 5 - Notes [Enhanced Input](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/enhanced-input) [Game Flow](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/game-flow) [Tick & Tick Alternatives](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/tick-and-tick-alternatives) [Asset/Feature Pack](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/asset-feature-pack) [Collisions](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/collisions) [Damage System](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/damage-system) [Localization](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/localization) [Gameplay Ability System (GAS)](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-ability-system-gas) [UMG](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/umg) [Materials](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/materials) [Version Control](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control) [Gameplay Tags vs Tags](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-tags-vs-tags) [PreviousAI Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/artificial-intelligence-ai/ai-resources) [NextEnhanced Input](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/enhanced-input) --- # Asset/Feature Pack | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/asset-feature-pack#links) Links * (Dev Community) [Creating an Asset Pack/Feature Pack](https://dev.epicgames.com/community/learning/tutorials/Xjy9/unreal-engine-creating-an-asset-pack-feature-pack) [PreviousTick & Tick Alternatives](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/tick-and-tick-alternatives) [NextCollisions](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/collisions) Last updated 1 year ago --- # (YouTube Playlist) Learn to Code in UE5 by Coque Games | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-playlist-learn-to-code-in-ue5-by-coque-games#links) Links * (YouTube Playlist) [Learn to Code in Unreal Engine with Blueprints](https://www.youtube.com/playlist?list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG) by Coqui Games [PreviousUnreal Engine Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints) [Next(YouTube) Learn to Code in UE5 - 13 - Direct Actor Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-playlist-learn-to-code-in-ue5-by-coque-games/youtube-learn-to-code-in-ue5-13-direct-actor-communication) Last updated 1 year ago --- # Unreal Engine Blueprints | Unreal Engine 5 - Notes [(YouTube Playlist) Learn to Code in UE5 by Coque Games](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-playlist-learn-to-code-in-ue5-by-coque-games) [(YouTube Videos) Blueprints In-Depth](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth) [(YouTube Videos) Smart Poly Blueprint Beginner Series](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series) [(YouTube) Blueprint Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication) [(YouTube) Making Better Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints) [PreviousPage 5](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/page-5) [Next(YouTube Playlist) Learn to Code in UE5 by Coque Games](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-playlist-learn-to-code-in-ue5-by-coque-games) --- # Create a Top Down Camera View | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to.../create-a-top-down-camera-view#links) Links * (Documentation) Using a Static Camera-> [https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/UsingCameras/Blueprints/](https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/UsingCameras/Blueprints/) * (Documentation) Using Cameras-> [https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/UsingCameras/](https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/UsingCameras/) [PreviousHow To...](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to...) [NextPage 5](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/page-5) Last updated 1 year ago --- # Damage System | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/damage-system#links) Links * (Documentation) [Damage](https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/Game/Damage?application_version=5.3) * (Article) [Damage in UE4](https://www.unrealengine.com/en-US/blog/damage-in-ue4) * (Documentation) [C++ API Reference for UGameplayStatics](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Kismet/UGameplayStatics?application_version=5.3) [PreviousCollisions](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/collisions) [NextLocalization](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/localization) Last updated 1 year ago --- # Collisions | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/collisions#links) Links * (Documentation) [Collision](https://dev.epicgames.com/documentation/en-us/unreal-engine/collision-in-unreal-engine) * (Documentation) [Collision Overview](https://dev.epicgames.com/documentation/en-us/unreal-engine/collision-in-unreal-engine---overview) * (Article) [Collision Filtering](https://www.unrealengine.com/en-US/blog/collision-filtering) * (YouTube) [Learn to Code in UE5 - 12 - Collisions and Overlaps](https://www.youtube.com/watch?v=amjtrkFYArI&t=560s) by Coqui Games [PreviousAsset/Feature Pack](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/asset-feature-pack) [NextDamage System](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/damage-system) Last updated 1 year ago --- # (YouTube) Learn to Code in UE5 - 13 - Direct Actor Communication | Unreal Engine 5 - Notes * **What is actor communication?** Actor communication refers to the ability of one actor to share information with one or more actor * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-playlist-learn-to-code-in-ue5-by-coque-games/youtube-learn-to-code-in-ue5-13-direct-actor-communication#links) Links * (YouTube) [Learn to Code in UE5 - 13 - Direct Actor Communication](https://www.youtube.com/watch?v=0IOGiyeXP5Y&list=PLziQlhUd357jEk5y77AHniPa2ywcMExlG&index=14) by Coqui Games [Previous(YouTube Playlist) Learn to Code in UE5 by Coque Games](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-playlist-learn-to-code-in-ue5-by-coque-games) [Next(YouTube Videos) Blueprints In-Depth](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth) Last updated 1 year ago --- # Performance Improvement | Unreal Engine 5 - Notes [(YouTube) Working with Data in Unreal Engine 5](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5) [(YouTube) Overcoming Early Challenges in Unreal](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal) [(YouTube) Fantastic Bottlenecks and Where to Find Them](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them) [Previous(YouTube) Making Better Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints) [Next(YouTube) Working with Data in Unreal Engine 5](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5) --- # Gameplay Ability System (GAS) | Unreal Engine 5 - Notes [GAS Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-ability-system-gas/gas-resources) [PreviousLocalization](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/localization) [NextGAS Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-ability-system-gas/gas-resources) --- # Localization | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/localization#links) Links * (Documentation) [Localization](https://dev.epicgames.com/documentation/en-us/unreal-engine/localizing-content-in-unreal-engine?application_version=5.3) [PreviousDamage System](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/damage-system) [NextGameplay Ability System (GAS)](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-ability-system-gas) Last updated 1 year ago --- # Page 5 | Unreal Engine 5 - Notes * An Inside Look at Hogwarts Legacy Unreal Engine Extensions | GDC 2024 -> [https://www.youtube.com/watch?v=M-Xoa4shre4](https://www.youtube.com/watch?v=M-Xoa4shre4) [PreviousCreate a Top Down Camera View](https://mchambers.gitbook.io/unreal-engine-5-notes/game-mechanics/how-to.../create-a-top-down-camera-view) [NextUnreal Engine Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints) Last updated 1 year ago --- # (YouTube) Fantastic Bottlenecks and Where to Find Them | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#memory-related-issues) Memory Related Issues #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#asset-references) Asset References * Hard vs Soft references * Use soft references whenever possible * Do not use textures of specific game objects in materials * Use default textures instead * Widget switcher uses hard references. Use it wisely #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#non-power-of-two-textures) Non Power of Two Textures * Do not have mipmaps (subject to Moire effect) * Occupy a lot more space in memory (in some scenarios) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#texture-compression-types) Texture Compression Types * Choose compression type for the job #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#vertex-count) Vertex Count * UV seams and Hard Edges generate more vertices upon import * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#real-time-rendering-issues) Real Time Rendering Issues #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#culling) Culling * Minimize number of actors that have to be culled. Never think of culling as a replacement for level streaming * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them#links) Links * (YouTube Video) [Fantastic Bottlenecks and Where to Find Them | Unreal Feast 2019 | Unreal Engine](https://www.youtube.com/watch?v=0SwlwgV-cz8&list=PLZlv_N0_O1gbmtS-hQFAVEF_zBOJPCaaX&index=8) by Unreal Engine [Previous(YouTube) Overcoming Early Challenges in Unreal](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal) [NextUnreal Engine Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints) Last updated 1 year ago --- # (YouTube Videos) Blueprints In-Depth | Unreal Engine 5 - Notes [(YouTube) Blueprints In-depth Part 1](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1) [(YouTube) Blueprints In-depth Part 2](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2) [Previous(YouTube) Learn to Code in UE5 - 13 - Direct Actor Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-playlist-learn-to-code-in-ue5-by-coque-games/youtube-learn-to-code-in-ue5-13-direct-actor-communication) [Next(YouTube) Blueprints In-depth Part 1](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1) --- # UMG | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/umg#table-of-contents) Table of Contents * [UMG Resources](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/359/unreal-engine/umg/umg-resources) [PreviousGAS Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-ability-system-gas/gas-resources) [NextUMG Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/umg/umg-resources) Last updated 1 year ago --- # (YouTube Videos) Smart Poly Blueprint Beginner Series | Unreal Engine 5 - Notes [(YouTube) Unreal Engine 5 | Blueprint for Advanced Users](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users) [(YouTube) Unreal Engine 5 | Blueprint for Intermediate Users (2023)](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023) [Previous(YouTube) Blueprints In-depth Part 2](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2) [Next(YouTube) Unreal Engine 5 | Blueprint for Advanced Users](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users) --- # UMG Resources | Unreal Engine 5 - Notes * (Documentation) UMG Viewmodel-> [https://dev.epicgames.com/documentation/en-us/unreal-engine/umg-viewmodel](https://dev.epicgames.com/documentation/en-us/unreal-engine/umg-viewmodel) * (Video) [UMG Viewmodels: Building More Robust and Testable UIs using MVVM | Unreal Feast 2023](https://dev.epicgames.com/community/learning/tutorials/pw3Y/unreal-engine-umg-viewmodels-building-more-robust-and-testable-uis-using-mvvm-unreal-fest-2023) [PreviousUMG](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/umg) [NextMaterials](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/materials) Last updated 1 year ago --- # GAS Resources | Unreal Engine 5 - Notes * (Documentation) [Gameplay Ability System](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-ability-system-for-unreal-engine?application_version=5.3) * (GitHub) [Unoffcial GAS Documentation](https://github.com/tranek/GASDocumentation) * (YouTube) [Exploring the Gameplay Ability System (GAS) with an Action RPG | Unreal Feast 2022](https://www.youtube.com/watch?v=tc542u36JR0) by Unreal Engine [PreviousGameplay Ability System (GAS)](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-ability-system-gas) [NextUMG](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/umg) Last updated 1 year ago --- # (Udemy) Unreal Engine 5: Blueprint Scripting 101 | Unreal Engine 5 - Notes [Section 2: Blueprint Overview](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101/section-2-blueprint-overview) [PreviousSection 8: Jetpack Journey - A 3D Platformer with a Jetpack](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack) [NextSection 2: Blueprint Overview](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101/section-2-blueprint-overview) --- # Section 2: Blueprint Overview | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101/section-2-blueprint-overview#video-4-blueprint-example) Video#4: Blueprint Example * **What is Blueprints?** Blueprints is the visual scripting system inside of Unreal Engine * _Note: Blueprints are also assets_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101/section-2-blueprint-overview#video-5-components-panel) Video#5: Components Panel * * * [Previous(Udemy) Unreal Engine 5: Blueprint Scripting 101](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101) [NextUnreal Engine C++](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++) Last updated 1 year ago --- # Unreal Engine C++ | Unreal Engine 5 - Notes [(Udemy) Unreal Engine 5 C++ for Developers: Learn C++ & Make Video Games](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games) [(Udemy) Unreal Engine 5 C++ The Ultimate Game Developer Course](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course) [(tomlooman.com) Professional Game Development in C++ and Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine) [PreviousSection 2: Blueprint Overview](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101/section-2-blueprint-overview) [Next(Udemy) Unreal Engine 5 C++ for Developers: Learn C++ & Make Video Games](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games) --- # Material Resources | Unreal Engine 5 - Notes * (Course) [Unreal Editor Fundamentals - Materials](https://dev.epicgames.com/community/learning/courses/nDz/unreal-engine-unreal-editor-fundamentals-materials/RWR/introduction-to-physically-based-rendering) * (Course) [Material Editor Fundamentals for Game Development](https://dev.epicgames.com/community/learning/courses/pm/unreal-engine-material-editor-fundamentals-for-game-development/V1X/unreal-engine-introduction-to-the-course) * (Documentation) Physically Based Materials Overview-> [https://dev.epicgames.com/documentation/en-us/unreal-engine/physically-based-materials-in-unreal-engine](https://dev.epicgames.com/documentation/en-us/unreal-engine/physically-based-materials-in-unreal-engine) * (Documentation) Material Inputs Overview-> [https://dev.epicgames.com/documentation/en-us/unreal-engine/material-inputs-in-unreal-engine](https://dev.epicgames.com/documentation/en-us/unreal-engine/material-inputs-in-unreal-engine) * (YouTube Playlist) [Intro to Materials](https://www.youtube.com/watch?v=lngF4VVNER4&list=PLZlv_N0_O1gbQjgY0nDwZNYe_N8IcYWS-) by Unreal Engine [PreviousMaterials](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/materials) [NextVersion Control](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control) Last updated 1 year ago --- # Gameplay Tags vs Tags | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-tags-vs-tags#links) Links * (YouTube) [Use Gameplay Tags](https://www.youtube.com/watch?v=1T4S2lFf19s) by The Game Dev Cave * (Documentation) [Gameplay Tags](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Tags/) * (Documentation) [Gameplay Framework](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-framework-in-unreal-engine?application_version=5.3) * (Article) [Why you should be using Gameplay Tags in Unreal Engine](https://www.tomlooman.com/unreal-engine-gameplaytags-data-driven-design/) * (Article) [Use Gameplay Tags to Label and Organize Your Content in UE4](https://www.unrealengine.com/en-US/tech-blog/using-gameplay-tags-to-label-and-organize-your-content-in-ue4) [PreviousGit LFS + Microsoft Azure](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-+-microsoft-azure) [NextProject Structure & Coding Standard](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/project-structure-and-coding-standard) Last updated 1 year ago --- # Unreal Engine Blueprints | Unreal Engine 5 - Notes [(Udemy) Unreal Engine 5 Blueprints - The Ultimate Developer Course by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri) [(Udemy) Unreal Engine 5: Blueprint Scripting 101](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101) [Previous(YouTube) Fantastic Bottlenecks and Where to Find Them](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them) [Next(Udemy) Unreal Engine 5 Blueprints - The Ultimate Developer Course by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri) --- # Materials | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/materials#table-of-contents) Table of Contents * [Material Resources](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/354/unreal-engine/materials/materials-resources) [PreviousUMG Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/umg/umg-resources) [NextMaterial Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/materials/material-resources) Last updated 1 year ago --- # Git LFS + Microsoft Azure | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-+-microsoft-azure#resources) Resources * (Article) [https://www.jedthompson.co.uk/blog/unreal-with-lfs](https://www.jedthompson.co.uk/blog/unreal-with-lfs) [PreviousGit LFS (Large File Storage)](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-large-file-storage) [NextGameplay Tags vs Tags](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/gameplay-tags-vs-tags) Last updated 6 months ago --- # (YouTube) Unreal Engine 5 | Blueprint for Advanced Users | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#casting-vs-interfaces) Casting vs Interfaces * **Casting -** Loads the Blueprint that you're casting to in memory, and all of the Blueprints dependencies are loaded into memory * **Interfaces** \- Don't load Blueprints into memory like with casting because no casting is being performed #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#notes) Notes * You can use the "Reference Viewer" to see the dependencies for the Blueprints that are loaded into memory for a Blueprint * You can use the "Size Map" to see how much space a Blueprint is costing when loaded to memory * Casting to a Blueprint that's always loaded in memory is fine * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#event-tick) Event Tick * You can disable tick for a Blueprint * You can set the tick interval #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#notes-1) Notes * Event tick isn't the only thing that ticks (i.e. input events, begin overlap, end overlap, etc...) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#functions) Functions * Functions allow for code reusability * Functions can be overriden #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#two-types-of-functions) Two types of functions * **Pure -** Pure functions don't have execution pins and are primarily for returning data and not modifying data * _Note: Pure functions are called each time per pin connection_ * **Impure -** Impure functions have execution pins #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#notes-2) Notes * **Blueprint Function Library -** allows you to create functions that can be called anywhere from your project * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#notes-3) Notes * Macros are more expensive than functions * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users#links) Links * (YouTube) [Unreal Engine 5 | Blueprint for Advanced Users](https://www.youtube.com/watch?v=f-OFKpujoTc&t=2004s) by Smart Poly [Previous(YouTube Videos) Smart Poly Blueprint Beginner Series](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series) [Next(YouTube) Unreal Engine 5 | Blueprint for Intermediate Users (2023)](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023) Last updated 1 year ago --- # (YouTube) Working with Data in Unreal Engine 5 | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#data-table) Data Table * The Data Table is probably the most relatable data type for designers as it allows looking at data akin to a CSV or spreadsheet as a tabular format * Allows USTRUCT's to be ordered and stored in one place * A row can be accessed by a RowName * Rows can also be individually referenced with FDataTableRowHandle variables in both Blueprint and C++ * Allows importing and exporting from JSON and CSV without extra work _(allowing external development)_ * _Note: Be careful with creating more than one source of authority. You can accidentally overwrite in-progress work_ * Always watch out for hard references in data tables. Can turn into explosive source for load times * One user per edit, as it is a single binary file; however you can use Composite Data Tables * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#composite-data-table) Composite Data Table * Composite Data Tables allows us to merge multiple Data Tables * Easy to manage and maintain in the editor, allowing users to Categorize Data Tables of the same UStruct into concepts such as Weapons, Rare Weapons, Collectables, etc... * Allows multiple people to work at the same time as each data table can be checked out individually * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#json-data-and-http-requests) JSON Data and HTTP Requests * Unreal Engine allows you to interface through HTTP calls to access external data * As of UE 5.1 you can now do this in multiple ways in Blueprint * Can be used in an editor context to pull and populate tools or at Runtime for live data * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#blueprint-assets) Blueprint Assets * An individual asset that stores data * simple to use and extend * Powerful for blueprint only projects * Can be instanced or used to hold data * Supports inheritance * The Bulk Property Matrix allows you to look at multiple data assets at a time * Use soft references * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#data-assets) Data Assets * Works similar to Blueprint Assets but are purpose-built Data only assets that live on disk and are cooked * Loaded on demand * Supports Inheritance. (But not data inheritance like our Blueprint Assets) * Slimmed down interface and functionality results in cleaner more transparent experience * Requires minimal amounts of C++ to inherit from UDataAsset. Also works with a Blueprint parent, but this is not recommended * Natively does not support importing and exporting data, but you can add this yourself * There instancing support only allows us to add extra Properties and Functions as a Data Asset Class Level, not at a per data instance level * Use soft references when possible * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#instanced-properties) Instanced Properties * Can be used to place objects inside of other objects * Details panel will automatically list there exposed properties, allowing you to edit there properties at a per instance level * Works with inheritance for some interesting design patterns * Only available with C++ * Fantastic for adding optional parameters to struct/object * Also useful for list of actions * Does not work with data tables * Can be really useful for creating chains of references or tree hierarchies * The object is instanced and fully loaded when its owner is loaded * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#uproperty-meta-tags) UProperty Meta Tags * Meta tags can be used to change the way information is displayed through showing and hiding details or enabling and disabling * Meta tags are editor only * Far easier than using details panel customization * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#curve-tables) Curve Tables * Allow you to store a list of curves * Allows of import and export of curve data for designers to use external tools just like data tables * Supports Linear, Constant or Cubic curves * You can create combined curved data tables just like combined data tables to separate your curve data table assets * You can access a curve from a curve data table with a curve data table row handle type like data table row handle type * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#gameplay-tags) Gameplay Tags * Basically like FNames that are globally predefined * Allows easy selection inside Editor UI * Avoid human error * Has options for Tag containers that contain more then one tag * Has hierarchy to help find tags or relate tags to there parent tags * Supported in reference viewer * Supports redirectors for renaming * Can be baked down to index id for replication * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#asset-registry) Asset Registry * Can be seen as metadata on assets themselves * Can be queried without loading the asset into memory * Can be used to search in the content browser * Works at runtime as well * Easy to add into assets * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5#links) Links * (YouTube Video) [Working with Data in Unreal Engine 5 | Unreal Feast 2022](https://www.youtube.com/watch?v=HOpyZ8552oA&t=2004s) by Unreal Engine [PreviousPerformance Improvement](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement) [Next(YouTube) Overcoming Early Challenges in Unreal](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal) Last updated 1 year ago --- # Git LFS (Large File Storage) | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-large-file-storage#file-.gitattributes) File: .gitattributes Copy # Unreal Engine asset files *.uasset filter=lfs diff=lfs merge=lfs -text *.umap filter=lfs diff=lfs merge=lfs -text # Optional: track other large/binary files *.fbx filter=lfs diff=lfs merge=lfs -text *.3ds filter=lfs diff=lfs merge=lfs -text *.psd filter=lfs diff=lfs merge=lfs -text *.png filter=lfs diff=lfs merge=lfs -text *.mp3 filter=lfs diff=lfs merge=lfs -text *.mp4 filter=lfs diff=lfs merge=lfs -text *.wav filter=lfs diff=lfs merge=lfs -text *.xcf filter=lfs diff=lfs merge=lfs -text *.jpg filter=lfs diff=lfs merge=lfs -text * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-large-file-storage#file-.gitignore) File: .gitignore Copy # UE5 files to ignore Saved/ Intermediate/ DerivedDataCache/ .vscode/ *.VC.db *.opensdf *.sdf *.log *.user *.tmp * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-large-file-storage#resources) Resources * (Article) [Setting Up Git Large File Storage for Unreal Engine Projects](https://vijayasimhabr.medium.com/setting-up-git-large-file-storage-for-unreal-engine-projects-1854d6337177) [PreviousVersion Control](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control) [NextGit LFS + Microsoft Azure](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-+-microsoft-azure) Last updated 5 months ago --- # Version Control | Unreal Engine 5 - Notes * (Documentation) [Source Control in Unreal Engine](https://dev.epicgames.com/documentation/en-us/unreal-engine/source-control-in-unreal-engine) ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control#options) Options: * [GitHub + LFS](https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-git-large-file-storage) * [Extra storage](https://docs.github.com/en/billing/managing-billing-for-git-large-file-storage/upgrading-git-large-file-storage) * [Unity Version Control](https://unity.com/solutions/version-control) * [Pricing](https://unity.com/products/unity-devops#pricing) * Azure DevOps * (YouTube) [Version control using GIT and Azure DevOps for Unreal, Godot, and Unity (in 2023)](https://www.youtube.com/watch?v=migQ_qqR59M) by Anchorpoint * Perforce + Digital Ocean * [Perforce + AWS](https://www.perforce.com/products/helix-core/aws) * [Diversion](https://www.diversion.dev/pricing) [PreviousMaterial Resources](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/materials/material-resources) [NextGit LFS (Large File Storage)](https://mchambers.gitbook.io/unreal-engine-5-notes/unreal-engine/unreal-engine-topics/version-control/git-lfs-large-file-storage) Last updated 6 months ago --- # (YouTube) Unreal Engine 5 | Blueprint for Intermediate Users (2023) | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#enumerations-enums) Enumerations (Enums) * **What is an enum?** An enum is a set of user defined values #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#notes) Notes * Enums start with the E\_ prefix * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#structures-structs) Structures (Structs) * **What is a structure?** A structure is a group of variables #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#notes-1) Notes * You have to break a struct to get access to the data * Structs start with the S\_ prefix * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#arrays) Arrays * **What is an array?** An array is a collection/list of values #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#blueprints) Blueprints * `For Each Loop` Node - can be used to loop through the elements in an array * `Length` Node - can be used to get the length of an array * `Get` Node - can be used to get an element from the array * _Note: You can get by copy or by reference_ * `Add` Node - can be used to add another element to the array #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#notes-2) Notes * Arrays are 0 index, which means that the first element/item in an array starts at 0 * `Random Integer in Range` Node can be used to get a random integer in a specified range * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#functions) Functions * **What are functions?** Functions are nodes that contain logic inside of them #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#notes-3) Notes * Functions can take inputs, called parameters * Functions can output data * Functions are useful to reuse code * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#object-oriented-programming-inheritance) Object Oriented Programming - Inheritance * Inheritance is one way that you can setup your Blueprint classes to share functionality between each other * The child class inheritance any changes from the parent class #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#links) Links * (Wikipedia) [Inheritance](https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#notes-4) Notes * You can debug Blueprints at runtime and step through the code like with an IDE * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023#links-1) Links * (YouTube) [Unreal Engine 5 | Blueprint for Intermediate Users (2023)](https://www.youtube.com/watch?v=cFm4tZqgYvQ&t=6151s) by Smart Poly [Previous(YouTube) Unreal Engine 5 | Blueprint for Advanced Users](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-advanced-users) [Next(YouTube) Blueprint Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication) Last updated 1 year ago --- # (Udemy) Unreal Engine 5 Blueprints - The Ultimate Developer Course by Stephen Ulibarri | Unreal Engine 5 - Notes #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri#naming-contention) Naming Contention * Blueprint classes are prefixed with "BP\_" [PreviousUnreal Engine Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints) [NextSection 1: Introduction](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction) Last updated 1 year ago --- # (YouTube) Overcoming Early Challenges in Unreal | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-pitfall-1-doing-too-much) Common Pitfall#1: Doing Too Much * Unreal is powerful and is used to make many gorgeous projects * It is easy to overlook the fact that intensely rich detail is often achieved by way of much trickery and specialized optimization techniques * Doing too much, too early will cause many difficulties later in production #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#doing-too-much-level-actors) Doing too much: Level Actors * Possibly the most common early mistake * It is very easy for level artists to populate worlds in Unreal Editor * Rich worlds generally look better, so visual people tend to skew toward that * Without vigilance you can get to a place where performance is gone * Meshes, particles, lights, and other actors #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#doing-too-much-characters) Doing too much: Characters * Characters are generally (unavoidably) expensive * Often made of many parts * Complex materials * Lots of bones, vertices * Character movement (CPU cost) * Animation blueprint * Number of characters on screen (this gets expensive quickly) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#why-does-this-happen-so-often) Why does this happen so often? * Chaos of production * Scope or platform changes * Misunderstanding of how Unreal is designed * Lack of knowledge of what tools are available in Unreal and/or how to use them * No ownership of budget/vision #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#how-many-is-too-many) How many is too many? * There is no concrete answer to this * Extremely content dependent * The best answer is build a vertical slice and test * That said, we try to keep actor count around 2,000-3,000 (post culling) * At level design time (pre culling) that number could be double * Please look at this as just a guideline, not a ground truth * You will have to test on target platform #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#techniques-actor) Techniques: Actor * Understand proper reduction techniques * Hierarchical Level of Detail (HLOD) with Proxy LOD tool * HLOD- combines clusters of meshes into a single mesh as player moves away * Proxy LOD- reduce that new single mesh further by combining materials and textures, then reducing polygons * Hierarchical Instanced Static Meshes (HISMs) * Actor Merging #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#techniques-character) Techniques: Character * Test early and often with character counts * Remember to use the lowest common denominator target platform * Watch the Optimizing UE4 for Fortnite presentations from GDC 2018 * Know that if character BPs get too complex, you may need to migrate their event graphs to C++ * Learn the value of significance manager to help with reduction * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-pitfall-2-avoiding-performance-accountability) Common Pitfall#2: Avoiding Performance Accountability * Avoid the janitor model * Encourage all team members to own performance of their systems #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#techniques) Techniques * Stat commands * Show flags * View modes * CPU and GPU profilers * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-pitfall-3-using-blueprint-unwisely) Common Pitfall#3: Using Blueprint Unwisely * Blueprint is extremely powerful and will change how you make games * Blueprint is designed as a programming language for people who do not natively program * That is a good thing, but know the risks involved * Artists and designers often do not know best practices for scripting * Blueprint is a scripting language * It runs on its own scripting layer and is considerably slower than native C++ * How much slower depends on what you are doing * Do not be afraid to use blueprints in your project #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#blueprint-is-your-best-option-when) Blueprint is your best option when: * Used as a prototyping tool for fast iteration by the people you want to enable most of all * Creating and iterating on relatively simple event driven logic * You want to expose native functionality in a "black box" for artists to use * Used as a container for editable variables and references when derived from a base class * You need a way to handle art asset references for a class * You want to free up coders time to work on more important things #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-blueprint-problems) Common Blueprint problems: * Too many hard references to other assets * Hard references are forced to load when the Blueprint loads * We have seen instances where loading the game character loads 95% of the game * Too many components * High component counts slow down spawn time * Scene components will need to have their transforms updated frequently * Too much functionality * As a scripting layer, Blueprint is slower than C++ #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#a-word-on-using-tick) A word on using Tick: * Generally good advice is to not use it at all * By default all Blueprints tick * You can change this by adjusting their defaults in code * If you must use tick * Enable ticking only when you need it, turn it off when finished * Adjust tick frequency and set it as low as you safely can * Somethings are light enough that tick is not a concern * But do not overdo it * In most cases, you can still avoid it * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-pitfall-4-forgetting-target-platforms) Common Pitfall#4: Forgetting Target Platforms * It is very common for projects to grow to more platforms * If you think you might ship on a platform, then you are shipping on that platform * Everyone who can should be testing on target platform * The value of the lowest common denominator * Always build for your weakest platform #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#techniques-1) Techniques * Do not put off testing on target platform * Do not build per platform content * Build content that changes per platform * Quality switches in materials * Feature switch * Even blueprints can be aware of the platform that they are on * Use device profiles to change settings per device * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-pitfalls-5-granularity) Common Pitfalls#5: Granularity * Loading content via level streaming can be expensive * Overdoing it will cause hitches * While you can do async loading, there is no magical solution * Load less * chop the world up into smaller pieces * It helps to get a vertical slice ASAP * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-pitfall-6-fighting-the-tech) Common Pitfall#6: Fighting The Tech * Unreal Engine does a lot of things very well, but is not specialized #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#things-to-know-before-you-change-the-engine) Things to know before you change the engine * Many parts of the engine are interconnected * Getting updates become much more difficult * We almost never take on code changes * We (Epic) may at some point totally rewrite a system #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#how-to-make-changes) How to make changes * Reach out to Epic * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#common-pitfall-7-ignoring-support-structure) Common Pitfall#7: Ignoring Support Structure * Know the difference between UDN and AnswerHub * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-overcoming-early-challenges-in-unreal#links) Links * (YouTube Video) [Overcoming Early Challenges in Unreal | Unreal Feast Europe 2019](https://www.youtube.com/watch?v=Lz5z0nF1WRU&list=PLZlv_N0_O1gbmtS-hQFAVEF_zBOJPCaaX&index=20&t=777s) by Unreal Engine or [Overcoming Early Challenges in Unreal | Dev Days 2018](https://www.youtube.com/watch?v=2edoacF53F0) [Previous(YouTube) Working with Data in Unreal Engine 5](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-working-with-data-in-unreal-engine-5) [Next(YouTube) Fantastic Bottlenecks and Where to Find Them](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement/youtube-fantastic-bottlenecks-and-where-to-find-them) Last updated 1 year ago --- # (Udemy) Unreal Engine 5 C++ for Developers: Learn C++ & Make Video Games | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games#notes) Notes #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games#section-2) Section 2 #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games#section-3) Section 3 #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games#section-4) Section 4 #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games#section-5) Section 5 #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games#section-6) Section 6 * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games#table-of-contents) Table of Contents * Section 2: Warehouse Wreckage * Section 3: Obstacle Assault * Section 4: [PreviousUnreal Engine C++](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++) [NextSection 2: Warehouse Wreckage](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-2-warehouse-wreckage) Last updated 1 year ago --- # Unreal Engine C++ Multiplayer Networking | Unreal Engine 5 - Notes [(Udemy) Unreal Engine 5 C++ Multiplayer: Make An OnlineCo-Op Game by GameDev.TV](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv) [(Udemy) Unreal Engine 5 C++ Multiplayer Shooter by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri) [(Patreon) UE5 Dedicated Servers by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri) [PreviousLecture 22: Finishing Up Multiplayer](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-22-finishing-up-multiplayer) [Next(Udemy) Unreal Engine 5 C++ Multiplayer: Make An OnlineCo-Op Game by GameDev.TV](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv) --- # Unreal Engine Courses | Unreal Engine 5 - Notes [(Udemy) Unreal Engine 5 - Gameplay Ability System - Top Down RPG by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses/udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri) [PreviousPage 6](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/page-6) [Next(Udemy) Unreal Engine 5 - Gameplay Ability System - Top Down RPG by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses/udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri) --- # Section 2: Warehouse Wreckage | Unreal Engine 5 - Notes * **What is blueprint?** Blueprint is Unreal Engines visual scripting system * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-2-warehouse-wreckage#glossary) Glossary * **Event Graph** - The canvas for our Blueprint * **Node** - Premade functionality * **String** - Programmer speak for text * **Event** - A "when" node * Tells us when something should happen * **Pin** - Sockets we can connect up * **Input Pin** - When to run this node * **Output Pin** - What to do after * **Connection** - Wire between pins * **Objects** - Collection of data and functionality * **Actors** \- Objects that can go in a level * **Component** - Objects that can go on an actor * **Reference** - Where to find an object * **Data Pin** - The input or output data for a node * **Execution Pins** - When to run this node * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-2-warehouse-wreckage#blueprint-nodes) Blueprint Nodes * Print String * Event BeginPlay * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-2-warehouse-wreckage#notes) Notes * Blueprints & C++ can work together * Stopped at video#14 for taking notes (but completed the section building the project) [Previous(Udemy) Unreal Engine 5 C++ for Developers: Learn C++ & Make Video Games](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games) [NextSection 3: Obstacle Assault](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault) Last updated 1 year ago --- # Section 7: Bad Bot Wrap-Up and Boss Fight | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-7-bad-bot-wrap-up-and-boss-fight#material-instancing) Material Instancing * Material Instancing allows you to use a parent material as a base for child materials, and customization via parameters * Allows for material reuse * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-7-bad-bot-wrap-up-and-boss-fight#blueprint-interface) Blueprint Interface * Blueprint Interface is a collection of functions with no implementation * The class that implements the interface decides how to implement the interface functions * Classes can implement interface functions different from one another * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-7-bad-bot-wrap-up-and-boss-fight#notes) Notes * Widget Blueprints are HUD elements * Target Point Actor can be used as a spawn point * Array holds a list of elements * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-7-bad-bot-wrap-up-and-boss-fight#blueprint-nodes) Blueprint Nodes * Does Object Implement Interface * Create Widget * Add to Viewport * Line Trace By Channel * Get World Location * Get Forward Vector * Select Vector * Find Look at Rotation * For Each Loop * Set Collision Enabled [PreviousSection 6: Collision Essentials](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials) [NextSection 8: Jetpack Journey - A 3D Platformer with a Jetpack](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack) Last updated 11 months ago --- # Section 1: Introduction | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#video-1-introduction) Video#1: Introduction * **What is Unreal Engine?** Unreal Engine is a game engine * **What is a Game Engine?** A game engine is a software framework that includes multiple components that allow you to build a game * The following are components that can be included in a game engine: Rendering, Input, Audio System, Physics System, Assets, UI System, Scripting, Effects System, Networking, etc... #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#notes) Notes * You don't need to know everything about every system in the game engine * Game developers often specialize in specific areas * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#video-5-our-first-project) Video#5: Our First Project #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#edit-greater-than-project-settings-greater-than-maps-and-modes) **Edit -> Project Settings -> Maps & Modes** * **Editor Startup Map** - used to specify the default map/level that is opened when the project is first started in the editor * **Game Default Map** - used to specify the map/level that the game will open for a packaged game #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#notes-1) Notes * Map/Level are used interchangeably in Unreal Engine * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#video-6-editor-layout) Video#6: Editor Layout * Pressing the F key after clicking on an object in the Outliner will focus your camera view on the object * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#video-11-mesh-scale) Video#11: Mesh Scale * For moveable objects you shouldn't change the objects scale within the editor scene because it can add overhead for the calculations * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction#video-15-migrating-assets) Video#15: Migrating Assets * Use the migrating feature to migrate assets from one project to another * When migrating assets you can only migrate assets to the content folder of a project [Previous(Udemy) Unreal Engine 5 Blueprints - The Ultimate Developer Course by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri) [NextSection 2: The Blueprint Visual Scripting System](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system) Last updated 1 year ago --- # Section 5: Pawns and Enhanced Input | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input#unreal-engine-class-hierarchy) Unreal Engine Class Hierarchy * Unreal Engine is based on a class hierarchy * All classes are descendants of the object class * Inheritance - Is A relationship * Composition - Has A relationship * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input#enhanced-input) Enhanced Input * Input Action * Input Mapping Context - ties inputs to Input Actions * Ex: Fire action is tied to the left mouse button, Jump action is tied to the space bar, etc... #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input#steps) Steps 1. Create Input Action 2. Map Input Actions inside of an Input Mapping Context 3. Tie the Input Mapping Context to the Pawn and add the logic for what the Input Action will do 1. Get Controller -> Cast to Player Controller -> Get Enhanced Input Local Player Subsystem -> Add Mapping Context * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input#movement-components) Movement Components * Projectile Movement Component * Floating Pawn Movement Component * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input#notes) Notes * Camera component should be attached to a spring arm component * You can rotate the controller for movement instead of the mesh * Camera component has a camera lag option * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input#blueprint-nodes) Blueprint Nodes * Get Controller * Get Enhanced Input Local Player Subsystem * Add Mapping Context * Get Control Rotation * Set World Rotation [PreviousSection 4: Bad Bot - A Drone Flying Shooter Game](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game) [NextSection 6: Collision Essentials](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials) Last updated 11 months ago --- # Section 3: Vectors and Rotators | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#video-24-vectors) Video#24: Vectors * Vectors have a direction and magnitude * Two vectors are equal if: * Their components are equal * Their direction and magnitude are equal * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#video-32-vectors-magnitude-practice) Video#32: Vectors Magnitude Practice * Magnitude and vector length are the same thing in Unreal Engine #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#blueprint-nodes) Blueprint Nodes * Vector Length * Distance * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#video-35-vector-normalization-practice) Video#35: Vector Normalization Practice #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#blueprint-nodes-1) Blueprint Nodes * Add Actor World Offset * Normalize * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#video-36-delta-seconds) Video#36: Delta Seconds * Multiplying movement by delta seconds makes movement frame rate independent #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#blueprint-nodes-2) Blueprint Nodes * Get World Delta Seconds * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#video-37-rotator) Video#37: Rotator * Yaw = Z-axis * Pitch = Y-axis * Roll = X-axis * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#video-38-rotator-practice) Video#38: Rotator Practice #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators#blueprint-nodes-3) Blueprint Nodes * Add Actor World Rotation [PreviousSection 2: The Blueprint Visual Scripting System](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system) [NextSection 4: Bad Bot - A Drone Flying Shooter Game](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game) Last updated 1 year ago --- # Section 8: Jetpack Journey - A 3D Platformer with a Jetpack | Unreal Engine 5 - Notes * **State Machines** - allow you to have different movement state and setup how different states transition between each other * **State Alias** - used to clean up state machine transitions * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack#casting) Casting * Casting can impact performance, so you want to keep casting to a minimal * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack#character-class) Character Class * Has a character movement component, skeletal mesh component, arrow component, and camera component by default * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack#character-movement-component) Character Movement Component #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack#properties) Properties * Air Control * Max Acceleration * Gravity * Max Step Height * Walkable Floor Angle * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack#notes) Notes * Movement can be implemented in the Player Controller class * Getters can be turned into validated gets for object references * Animation Blueprints are great for changing the pose based on data * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-8-jetpack-journey-a-3d-platformer-with-a-jetpack#blueprints) Blueprints * Add Pitch Input * Add Yaw Input * Add Mapping Context * Get Controlled Pawn * Get Movement Component * Add Input Vector * Get Control Rotation * Get Forward Vector * Jump * Vector Is Zero * Get Movement Component [PreviousSection 7: Bad Bot Wrap-Up and Boss Fight](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-7-bad-bot-wrap-up-and-boss-fight) [Next(Udemy) Unreal Engine 5: Blueprint Scripting 101](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprint-scripting-101) Last updated 9 months ago --- # Section 6: Simple Shooter | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-6-simple-shooter#code) Code * `AddMovementInput()` * `AddControllerPitchInput()` * `AddControllerYawInput()` * `Jump()` * `GetActorForwardVector()` * `EInputEvent` * `GetMesh()` * `GetWorld()` * `UGameplayStatics` * `FHitResult` * `CreateWidget()` * `GetWorldTimerManager()` * `TActorRange<>()` * `USoundBase` **AI** * `UBehaviorTree` * `GetPawn()` * `GetBlackboardComponent()` #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-6-simple-shooter#line-traces) Line Traces * `LineTraceByObjectType()` * `LineTraceByChannel()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-6-simple-shooter#what-is-a-virtual-method) What is a virtual method? * Override functions in a base class * Allows us to change functionality * Dynamic dispatch * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-6-simple-shooter#ai) AI * **Black Board -** is like the memory for AI * **Behavior Tree -** specifies different behaviors for the AI * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-6-simple-shooter#notes) Notes * The `ACharacter` class has a `Jump()` function * `SpringArmComponent` is often used with the Camera for 3rd person * Multiple meshes can use the same skeleton, which allows for sharing animations * Meshes can have simple collisions and complex collisions * Add the `UPROPERTY()` or `UFUNCTION()` macros for variables/functions that you want handled by the garbage collection or exposed to the editor/blueprints * Delta for Rotators is basically subtraction? * State machines can be used to handle different animation states [PreviousSection 5: Toon Tanks v2](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2) [Next(Udemy) Unreal Engine 5 C++ The Ultimate Game Developer Course](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course) Last updated 1 year ago --- # (YouTube) Blueprints In-depth Part 2 | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2#compilation) Compilation * Compile time has no impact on runtime execution * This is purely a workflow thing that will slow down your iteration time within larger projects * And there can be a memory/loading impact due to how interwind it is with references **Compile times in general are affected by three things** * The number of blueprint nodes present in a graph * Casting and other kinds of references * Circular references **Notes** * The contents of macros are inserted into the graph upon compile and do not help much for compiler * A cast results in another class being referenced. The blueprint cannot compile without also compiling any blueprints it has a reference to * _Note: Even if the cast is invalid, this is still the case_ * Any form of referencing to a class, like casting does, will lead to the same effect **Advice** * Breaking blueprints up into Functions will speed up compile time * Splitting more functionality off into different Blueprint child actors/components/actors would also make a big difference * Moving logic heavy steps to C++ would help tremendously. _In larger projects this is the recommended approach_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2#compilation-casting) Compilation - Casting **Casting Advice** * Casting and referencing should be done with care and thought * Don't cast more than you have to * Some casting is okay, it depends * Casting to a class that is already loaded is fine * Casting to a key framework is usually fine too * Casting from one small blueprint to another small blueprint is usually fine * Casting to a blueprint that only contains variables is fine **Casting Tips** * Situational dependent functionality that is occasionally present _can reference core_ functionality that is always present * Design a system around when and where you cast * Designate a few classes as being ok to cast to * Keep casts one way only where possible. Minimize chain reactions * Use C++ to bridge classes. This is far faster and results in cleaner blueprints and easier workflows * C++ can provide project wide accessible variables/or functions * When you do cast, cast to a parent class where possible * _Note: Casting to a C++ parent class provides no overhead_ * The parent class can contain nothing more than the variables and functions the child needs, without any actual content or functionality * Gameplay tags could be used as an alternative to checking if an object is of a certain class **The best way forward:** * A good casting strategy + Native (C++) + Interfaces + Inheritance * And optionally gameplay tags * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2#compilation-race-condition) Compilation - Race Condition **What is a race condition?** A race condition is when two or more classes depend on each other but can momentarily fail because one class gets initiated before the other one is available. **Notes** * Be conscious of the (unknown?) order blueprint will be initiated in * Build in delays or is valid safety checks for any blueprint that may be hit by a race condition * If many blueprints within the project are interwind through direct references and casts, race conditions are more likely * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2#c) C++ **C++ and Blueprint Relationship** * C++ and Blueprint are closely linked together * Blueprint relies on C++ are all it does. Every node in Blueprint is in C++ * You can easily extend Blueprint with C++ **Where is C++ Better than Blueprint** * C++ is more performant * C++ is better for managing large and complex systems, or math * Somethings simply cannot be done in Blueprint, or can but is difficult/or sub optimal * Save games * Platform or device specific functionality * Control input menus * Special hardware, SDKs, or other integrations * etc... * A good balance between C++ and Blueprint will also greatly improve workflow and collaboration in larger projects **Where is Blueprint Better than C++** * Blueprint is faster for creation and prototype * Blueprint is much faster for iteration * Is better for understanding and reading workflow * It is more flexible and accessible to the wider team * For various memory related reasons, it is much better for content **C++ Best Practices** * In larger projects, most classes should, at all times, be made in C++, but extended in Blueprint * Put all core functionality and most important variables in the C++ class * N_ote: Accessing Blueprint data in C++ isn't easy to do_ * Blueprint can have minor functionality and visual tweaks **Things that should typically be in C++** * Functionality that is used in more than one place * Used per tick, especially if it concerns many actors * Complex in nature, bug prone, or maintenance heavy * Likely to be extended significantly later * Concerning complex and critical features such as save games, networking, etc... * Important variables, enums, etc... **Things that should typically be in Blueprints** * The majority of content references * Anything that is straight forward, or visual in nature * One off functionality, isolated functionality, not part of the core architecture * Functionality that is still being prototyped or rapidly iterated on * Anything else that wouldn't get any benefit from C++ in terms of performance, scaling, bug proofing, etc... * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2#miscellaneous) Miscellaneous * When blueprint nodes are intentionally disconnected, comment the node with DOP (Disconnected On Purpose) - _so that it is recorded as being done on purpose_ * Pure Functions * Expose on Spawn * Call in Editor * Delete Unused Variables - _menu option to automatically delete all unused variables_ * Show 3D Widget * Deprecate * Bookmarks in Blueprints * String Tables * Maps * Sets * IsValid * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2#links) Links * (YouTube) [Blueprints In-depth Part 2 | Unreal Feast Europe 2019](https://www.youtube.com/watch?v=0YMS2wnykbc&t=2s) by Unreal Engine [Previous(YouTube) Blueprints In-depth Part 1](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1) [Next(YouTube Videos) Smart Poly Blueprint Beginner Series](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series) Last updated 1 year ago --- # (Udemy) Unreal Engine 5 - Gameplay Ability System - Top Down RPG by Stephen Ulibarri | Unreal Engine 5 - Notes [Section 3: Intro to the Gameplay Ability System](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses/udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri/section-3-intro-to-the-gameplay-ability-system) [PreviousUnreal Engine Courses](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses) [NextSection 3: Intro to the Gameplay Ability System](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses/udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri/section-3-intro-to-the-gameplay-ability-system) --- # Section 2: The Blueprint Visual Scripting System | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#video-16-what-is-blueprint) Video#16: What is Blueprint #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#c) C++ * Most optimal performance * More access to the code base * Harder to learn #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#blueprint) Blueprint * Easier to learn * Faster to implement behavior * Less performant #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#history-of-blueprints) History of Blueprints * Blueprints was first introduced in Unreal Engine 4 * Unreal Engine 3 had a visual scripting system called "Kismet" #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#two-types-of-blueprints) Two types of Blueprints * Blueprint classes * Level Blueprint #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#notes) Notes * Games use a mixture of both C++ and Blueprint * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#video-17-the-level-blueprint) Video#17: The Level Blueprint #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#notes-1) Notes * Blueprint nodes can have input pins that take in data, and each piece of data passed into a node has a data type * Level Blueprint is tied to a specific level #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#blueprint-nodes) Blueprint Nodes * Print String * Event BeginPlay * Event Tick * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#video-18-creating-a-blueprint-class) Video#18: Creating a Blueprint Class #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#notes-2) Notes * There are different types of Blueprint classes * Blueprints are often prefixed with "BP\_" * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#video-20-append-string) Video#20: Append String #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#blueprint-nodes-1) Blueprint Nodes * Get Actor Location * Get Object Name * Get reference to self * Append * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#video-21-coordinates) Video#21: Coordinates * **Scalar** - a single numeric value * **X Coordinates** - position along x-axis * **XY Coordinates** - position in the XY plane * _Note: Represented by an ordered pair_ * **XYZ Coordinates** - position in 3-dimensional space * _Note: Represented by an ordered triple_ * **(0,0,0)** \- is the origin in 3D space * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#video-22-debug-shapes) Video#22: Debug Shapes #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#notes-3) Notes * Highlighting multiple nodes and hitting the Q key will straighten them #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#blueprint-nodes-2) Blueprint Nodes * Draw Debug Sphere * Draw Debug Arrow * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#video-23-local-vs-global-scope) Video#23: Local vs Global Scope #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#notes-4) Notes * X-axis is the forward direction * Y-axis is the right direction * Z-axis is the up direction #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-2-the-blueprint-visual-scripting-system#blueprint-nodes-3) Blueprint Nodes * Draw Debug Coordinate System * Get Actor Rotation [PreviousSection 1: Introduction](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-1-introduction) [NextSection 3: Vectors and Rotators](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators) Last updated 1 year ago --- # (YouTube) Making Better Blueprints | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#the-4-cs-of-blueprints) The 4 Cs of Blueprints * Cleanliness * Creation * Classes & sharing * Communication * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#cleanliness) Cleanliness * Remove spaghetti code * Ticking * Soft references * Blueprint debugging * Blueprint Header tool * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#cleanliness-removing-spaghetti-code) Cleanliness - **Removing Spaghetti Code** * Color coding * You can color code comments * Blueprint bookmarks * Comments + Node comments * Collapsing nodes * Math expression node * Pure vs Impure * Validated Get * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#cleanliness-ticking) Cleanliness - **Ticking** * Manual tick/Start with enabled * Tick interval * Ticking groups * Tick prerequisites * Timelines * Looping events * Blueprint lifespan * DumpTicks * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#cleanliness-soft-references) Cleanliness - **Soft References** * Hard references can create long chains of unnecessary loaded assets from each blueprint loading them * Soft references only load when called; while hard references loads it all to memory * Data Tables with a massive list should be using soft references instead of hard references * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#cleanliness-blueprint-debugging) Cleanliness - Blueprint Debugging * Breakpoints * Blueprint watch window * Call stack * Execution trace * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#cleanliness-bp-header-tool) Cleanliness - BP Header Tool * Generate C++ Headers straight from Blueprint * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#creation) Creation * Construction script * Splines * Exposed functions * Editor utility * Geometry script * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#creation-splines) Creation - Splines * Has easily accessible * Direction * Rotation * Length * Axis * Spawn meshes along its path * Use spline meshes to warp meshes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#creation-exposed-function) Creation - Exposed Function * Functions in blueprints can be exposed to the details panel * Useful for manually calling a function for in the editor work * Tagging is used to reference back to the original blueprint * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#creation-editor-utility) Creation - Editor Utility * Blueprint/Python can be used to * create scripts to modify base content in the content browser * generate new content * modify or generate actors in a level * create custom editor widgets to manage assets or display data * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#creation-geometry-script) Creation - Geometry Script * Allows for procedural generation of 3D assets either in editor or at runtime * Can be controlled directly from blueprints * Check out project Lyra for some examples * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#classes-and-sharing) Classes & Sharing * Class inheritance * Function overrides * Data tables (structs and enums) * Function/Macro libraries * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#classes-and-sharing-class-inheritance) Classes & Sharing - Class Inheritance * Define data in the parent which can be shared or modified per child * Share functions/base functions that can be overridden * Cast to the parent rather than the child to avoid hard referencing * Retrieve variables initially set at the parent level * Trigger events or functions initially set at the parent level * Makes it easier to group content together and search in batches * Check out parent or child without disturbing others * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#classes-and-sharing-overrides) Classes & Sharing - Overrides * Children inherit the BeginPlay event from their parent actor * Can add more events before/after or disable the parents BeginPlay event * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#classes-and-sharing-data-tables) Classes & Sharing - Data Tables * Data is defined by a struct * Store lots of easily accessible data * Use soft references when referencing data * Search by name * Useful for seeing data side by side * Can be exported/imported as JSON/CSV * You can use an excel spreadsheet with macros for the formulas to balance different stats, then import the CSV as a data table into Unreal Engine * You can create a composite data table that brings together separate data tables. This can be used to separate the data tables for different people to work on, then bring all the data tables together * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#classes-and-sharing-function-macro-libraries) Classes & Sharing - Function/Macro Libraries * Create multi-use functions and macros in custom libraries * Share logic across blueprints without inheritance * Function and Macro libraries can be independently checked out * You can create direct access to variables via casting _(only use if cast is to GM or GI and logic isn't needed across other game projects)_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#communication) Communication * Event Dispatching and Binding * Interfaces * Tagging * Tracing * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#communication-event-dispatching-and-binding) Communication - Event Dispatching and Binding * Good for attaching to events from other sources * Requires the specific actor to work * Multiple actors can bind to the same event * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#communication-interfaces) Communication - Interfaces * Great for sending event triggers to actors without knowing their specific class * Avoids hard referencing and casting * Requires an interface blueprint to be added to the target actor * Add input and out variables to pass data * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#communication-tracing) Communication - Tracing * Send out a ray and get information about the impact * Can be a position or actor * Relies on visibility or collision channel * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints#links) Links * (YouTube) [Making Better Blueprints | Unreal Feast 2022](https://www.youtube.com/watch?v=mW0IlgjF-iw) by Unreal Engine [Previous(YouTube) Blueprint Communication](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication) [NextPerformance Improvement](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/performance-improvement) Last updated 1 year ago --- # Page 4 | Unreal Engine 5 - Notes [PreviousS1 L9](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/s1-l9) [NextPage 6](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/page-6) --- # (Udemy) Unreal Engine 5 C++ Multiplayer: Make An OnlineCo-Op Game by GameDev.TV | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv#notes) Notes #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv#section-2) Section 2 #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv#section-3) Section 3 #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv#section-4) Section 4 * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv#table-of-contents) Table of Contents [PreviousUnreal Engine C++ Multiplayer Networking](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking) [NextSection 2: Multiplayer Fundamentals](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals) Last updated 1 year ago --- # Section 4: Co-op Adventure Gameplay | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-4-co-op-adventure-gameplay#code) Code * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-4-co-op-adventure-gameplay#notes) Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-4-co-op-adventure-gameplay#links) Links [PreviousSection 3: Online Subsystem](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem) [Next(Udemy) Unreal Engine 5 C++ Multiplayer Shooter by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri) Last updated 1 year ago --- # Section 3: Intro to the Gameplay Ability System | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses/udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri/section-3-intro-to-the-gameplay-ability-system#notes) Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses/udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri/section-3-intro-to-the-gameplay-ability-system#links) Links * (Documentation) [Gameplay Ability System](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-ability-system-for-unreal-engine?application_version=5.3) [Previous(Udemy) Unreal Engine 5 - Gameplay Ability System - Top Down RPG by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses/udemy-unreal-engine-5-gameplay-ability-system-top-down-rpg-by-stephen-ulibarri) Last updated 1 year ago --- # Section 3: Obstacle Assault | Unreal Engine 5 - Notes * **How can you log data to the console in C++?** `UE_LOG()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#glossary) Glossary * **Source Code** - Human readable code (like C++) * **Binary Executable** \- Machine readable code * **Compiler** - Transfers human readable code to machine code * **Source Code Editor** - Makes writing human readable code easier * **Constructor** \- Creates an object and sets any values for the object being created * **Operator** \- Symbols that do something (e.g. +, -, \*, /, etc...) * **Dot Operator** \- Gets something from within a struct or class * **Frame -** A single picture in a video * **Frame Rate -** How many frames per section (fps) * **Tick -** Called every frame * **Pseudocode -** Plain language description of the steps in an algorithm * **Comments -** Code that is ignored by the compiler; for humans to read * **Expression -** Fragment of code that produces a value * **Statement -** An action to be performed * **Scope Resolution Operator -** `(::)` Looks inside of a class * **Game Mode -** An Actor that controls the "rules". (e.g. Who should spawn where) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#game-loop) Game Loop 1. Process input 2. Update game state 3. Render to display * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#scope) Scope * How long does the variable live * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#using-deltatime) Using DeltaTime * Using **DeltaTime** in Unreal can tell us how long each frame took to execute * When we multiply something by **DeltaTime** it makes our game frame rate independent * i.e. The game behaves the same on a fast and slow computers * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#data-types) Data Types Data Type Description int32 float bool FVector FString * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#code) Code * `UPROPERTY(EditAnywhere)` - * `UPROPERTY(EditAnywhere, Category="")` - * `UPROPERTY(VisibleAnywhere)` - * `SetActorLocation()` - * `GetActorLocation()` - * `GetActorRotation()` - * `UE_LOG(TempLog, Display, TEXT("Your message"))` - * `UE_LOG(TempLog, Warning, TEXT("Your message"))` - * `UE_LOG(TempLog, Error, TEXT("Your message"))` - * `GetName()` - * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#blueprint-nodes) Blueprint Nodes * GetActorRotation * MoveUpdateComponent * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#notes) Notes * Variable names are pascal case * You can create Blueprint classes derived from C++ classes * You can right click in the level and select "Play from here" * When adding a string (FString) to UE\_LOG() you will need to add an asterisk before its name * Ex: `UE_LOG(TempLog, Error, TEXT("My string: %s"), *MyString)` * Only `const` functions can be called within a `const` function * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault#links) Links * (Documentation) [Elog Verbosity](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/Logging/ELogVerbosity__Type?application_version=5.3) * (Documentation) [FString](https://dev.epicgames.com/documentation/en-us/unreal-engine/fstring-in-unreal-engine?application_version=5.3) * [C++ Format Specifiers](https://cplusplus.com/reference/cstdio/printf/) [PreviousSection 2: Warehouse Wreckage](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-2-warehouse-wreckage) [NextSection 4: Crypt Raider](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider) Last updated 1 year ago --- # Page 6 | Unreal Engine 5 - Notes [PreviousPage 4](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/page-4) [NextUnreal Engine Courses](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-courses) --- # Section 5: Toon Tanks v2 | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2#code) Code **Components** * `USceneComponent` * `UCapsuleComponent` * `UStaticMeshComponent` * `UCameraComponent` * `USpringArmComponent` * `UProjectileMovementComponent` * `UPrimitiveComponent` * `UParticleSystemComponent` * `RootComponent` **Macros** * `TEXT()` **Reflection System** * `UPROPERTY()` **Data Types** * `int32` * `float` * `FVector` * `FRotator` **Data Structures** * `TArrays<>` **Extra** * `Cast<>()` * `GetOwner()` * `GetActorLocation()` * `GetActorRotation()` * `CreateDefaultSubobject<>()` * `UWorld` * `GetWorld()` * `UWorld::SpawnActor<>()` * `AActor::AddActorLocalOffset()` * `AActor::AddActorLocalRotation()` * `APawn::GetController()` * `UGameplayStatics` * `UGameplayStatics::GetWorldDeltaSeconds()` * `UGameplayStatics::GetPlayerPawn()` * `UGameplayStatics::GetAllActorsOfClass()` * `UGameplayStatics::SpawnEmitterAtLocation()` * `UParticleSystem` * `ECollisionChannel` * `FColor` * `FTimerManager` * `FTimerHandle` * `FTimerDelegate` * `GetWorldTimerManager()` * `TSubclassOf<>` * `UClass::StaticClass()` * `Destroy()` * `SetActorHiddenInGame()` * `SetActorTickEnabled()` * `USoundBase` * `ULegacyCameraShake` * `UCameraShakeBase` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2#blueprint-nodes) Blueprint nodes * Select * Switch * Print String * Create Widget * Add to Viewport * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2#forward-declaring) Forward Declaring * Include only what you use in .cpp * We should `#include` as little as possible in the .h file * We don't need the header file to declare a pointer; instead you can forward declare * We do need the header to construct an object * We do need the header file to access members * We do need the header file for inheritance * Make movement frame rate independent with `DeltaTime` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2#scene-component-vs-actor-component) Scene Component vs Actor Component * **Scene Component** * Has a transform * Supports attachment * **Actor Component** * No transform * No attachment * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2#blueprint-implementable-event) Blueprint Implementable Event * `UFUNCTION(BlueprintImplmentableEvent)` * Called from C++, but is implemented in Blueprints * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2#notes) Notes * You can reparent Blueprints from the classes that it derived from * Kismet is the older version of Blueprints. So, whenever you see Kismet think Blueprints * Unreal Engine has a built in damage system * `auto` keyword can be used to infer the type * You can create a variable inside of an if condition to then use inside of the if block * v5.1+ `UMatineeCameraShake` is now named `ULegacyCameraShake` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2#links) Links * (Article) [Understand Forward Declarations in C++](https://favtutor.com/blogs/forward-declaration-cpp) * (Documentation) [UGameplayStatics](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Kismet/UGameplayStatics?application_version=5.3) * (Documentation) [FTimerManager](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/FTimerManager?application_version=5.3) * (Documentation) [Gameplay Timers](https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-timers-in-unreal-engine?application_version=5.3) * (Documentation) [APawn::DisableInput](https://docs.unrealengine.com/4.26/en-US/API/Runtime/Engine/GameFramework/APawn/DisableInput/) * (Documentation) [ULegacyCameraShake](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Plugins/GameplayCameras/ULegacyCameraShake?application_version=5.3) [PreviousSection 4: Crypt Raider](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider) [NextSection 6: Simple Shooter](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-6-simple-shooter) Last updated 1 year ago --- # Section 4: Bad Bot - A Drone Flying Shooter Game | Unreal Engine 5 - Notes * **Validated Get** - a getter can be converted to a validated get instead of using the is valid node * **Life Span** - is a property that actors have that can be set to specify how long an actor should "live" * _Note: Blueprint node Set Life Span can also be used_ * * * #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#moving-an-actor) Moving an actor: 1. Use a movement component 2. Code the logic to move the actor such as by using blueprint node `Add Actor World Offset` #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#destroying-an-actor) Destroying an actor: 1. Code the logic and use the `Destroy Actor` blueprint node 2. Use the life span option for an actor * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#sound) Sound * **What do sounds need in order to have a fall off?** An attenuation * **Mono** - plays the sound the same in both ears * **Stereo** - each ear can play the sound differently * (Asset) Meta Sound Source #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#nodes) Nodes * Random Get * Wave Player * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#game-mode) Game Mode * Keeps track for rules of game * Determines class to spawn for default pawn * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#notes) Notes * Static meshes should be positioned/pointed in the correct X,Y,Z direction * Pure Functions don't have input/output execution pins * Post process volumes allow you to define the look and feel of a level * You can create categories for variables to group them * Timer is an alternative to using a delay * You can create your own custom events * You can right click on a Blueprint and select refresh node in case a new input isn't showing * Setting a variable to instance editable and expose on spawn allows the spawn Blueprint node to add the variable as an input * Casting allows you to convert an object from one class to another that's part of the objects class hierarchy/a class the object inherited from * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#blueprint-nodes) Blueprint Nodes * Get Object Name * Branch * IsA * Flip Flop * Delay * Set Timer by Event * RInterp To * FInterp To * VInterp To * Get Socket Location * Add Actor World Offset * Quit Game * Get Game Mode * Cast To #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#vector) Vector * Make Vector * Get Actor Forward Vector * Get Forward Vector #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#events) Events * Event Tick #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#debugging) Debugging * Draw Debug Sphere * Print String #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#spawning) Spawning * Spawn Actor From Class * Spawn System #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#destroying-actor) Destroying Actor * Destroy Actor * Set Life Span #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#location) Location * Get Actor Location #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#rotation) Rotation * Set Actor Rotation * Get Actor Rotation * Find Look at Rotation * Add Actor World Rotation * Random Rotation * Random Rotator #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#object-reference) Object Reference * Get All Actors of Class #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#input-validation) Input Validation * Is Valid Index * Is Valid #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#loops) Loops * For Each Loop * Get #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#sound-1) Sound * Play Sound 2D * Play Sound at Location #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#delta-time) Delta Time * Get World Delta Seconds * Get Delta Time #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-4-bad-bot-a-drone-flying-shooter-game#timers) Timers * Set Timer By Event [PreviousSection 3: Vectors and Rotators](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-3-vectors-and-rotators) [NextSection 5: Pawns and Enhanced Input](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input) Last updated 11 months ago --- # (Udemy) Unreal Engine 5 C++ Multiplayer Shooter by Stephen Ulibarri | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri#notes) Notes #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri#section-2) Section 2 * Covers Unreal Engines Online Subsystem * Shows how to build a multiplayer plugin using the Online Subsystem (Steam) * Shows how to create and join game sessions, and have other players join your game session * Shows how to connect a UMG Menu Screen to create or join a game session * Shows how to switch levels (i.e. join/or create a game session and switch tot he lobby level) #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri#section-3) Section 3 * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri#table-of-contents) Table of Contents [PreviousSection 4: Co-op Adventure Gameplay](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-4-co-op-adventure-gameplay) [NextSection 2: Creating a Multiplayer Plugin](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin) Last updated 1 year ago --- # (YouTube) Blueprints In-depth Part 1 | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#introduction) Introduction **Correct use of Blueprints is important for 3 reasons** _**(in order of importance)**_**:** 1. Future Proofing 2. Collaboration 3. Performance * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#feature-overview) Feature Overview **C++** * Combined smoothly with Blueprint * Functionality can be bounced back and forth between Blueprint and C++ * Faster performance * In large projects, much better to collaborate * Can do things Blueprints cannot **Inheritance** * Inheritance is an Object-Oriented Programming Concept * Inheritance is when a Blueprint or C++ class inherits functionality from a parent class * Or extend/or override inherited functionality * Hugely important for everything that we do in Unreal Engine **Framework Classes** * Standard foundational classes that provide functionality for player movement, input, etc... * Used extensively, especially in games * How much to use the available class structure differs from project to project **Components** * Functionality can be put into components, (C++ or Blueprint), to provide common functionality * Usually not central to a typical workflow * Commonly used for specific solutions **Child Actors** * Any actor class can be added to another actor class as a child actor * More powerful than components, but also adds more overhead * Typically used for specific purposes only **Libraries** * Blueprint functionality can be added to functions and macros * These can exist in independent blueprint libraries, accessible by all blueprints in the project * Could be done via C++ as well * Used fairly commonly **Interfaces** * Used for communication between blueprints * Used for generic interactions between many different classes * Alternative to casting, and more efficient **Data Tables/Curves** * Saves values into spreadsheet like assets * Or Curves * Good for getting an overview * Easy to tweak values, especially within larger teams and projects **Data Assets** * Classes containing only data (variables) * Can be used to store data outside of the regular classes * Better for sharing data between many different classes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#the-big-picture) The Big Picture Once you're past the hurdle of understanding how to make something work _(using Blueprints and/or C++)_, the challenge becomes how to do it in a clean, correct, and efficient manner. **Questions to ask yourself when building a system** 1. Did I do everything as clean and in as few steps as possible? 2. If someone else would take over my work, would they understand what is happening? 3. Do I have a logical distribution of functionality and variables between classes? 1. _Note: Functionality = Functions/Methods_ 2. _Note: Variables = variables/properties/fields_ 4. Did I take casting, memory management, and performance considerations into account? 5. If we ever would want to grow this in the future, for example by adding in multiple variations, did I prepare the functionality for that? how? **Notes** * Keep things as simple as possible, by having enough complexity * Don't overcomplicate things when you don't have to * Use advanced features where it simplifies things. Balance is key * Functionality must be scalable. All solutions made must be agnostic and scalable as justifiable for the project and budget * Performance and scalability is taken into account from day one. * Constantly consider how the script could avoid bugs, exceptions, and slow downs _Note: Collaboration on blueprints is also helped tremendously by designing the right architecture_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#performance) Performance Even when performance is not an issue, paying attention to the overhead caused by Blueprints can lead to cleaner use of Blueprints; and a deeper understanding of the language. **Run Time Performance** * Blueprints is slower than C++; but it is not slow * The most common reason to move over to C++ tend to be workflow and collaboration related than performance * Nonetheless, Blueprints can have a significant performance impact **Blueprints Slow - Reason#1** * Performance loss could come from executing large network nodes * The connections between the nodes is what is expensive * Anything related to complex logic or math is therefore expensive in Blueprints **Blueprints Slow - Reason#2** * Anything related to quick loops is relatively expensive in Blueprints **Blueprints Slow - Reason#3** * Anything that requires iteration over a large number of actors/classes can be expensive in Blueprints **Blueprints Slow - Reason#4** * Ticking is slightly more expensive in Blueprints than C++ * In general, the abuse of ticking is the most common cause of performance loss with Blueprints **Notes** * For everyday usage, you are not likely to experience slow downs * If you use these a lot then eventually the tiny bits of performance loss will start adding up * Do not use ticking at all if performance is very important * Blueprints are currently all executed single threaded * By default blueprints have a 1m (250 000) instruction execution per tick for all blueprints * _Note: You cannot hit the limit unless you are building things in very sub-optimal ways_ * A Blueprint in itself has no significant overheads * Merely embedding content into a Blueprint, (prefab system style), will have no measurable impact on performance **There are huge difference in Blueprint performance depending on how the project is run:** * Play in Editor (PIE) * Dev Play * _Note: Starting the game without shipping or packaging the game_ * Shipping Play * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#performance-ticking) **Performance - Ticking** **Ticking** * The number one cause for Blueprint performance loss is typically abuse of ticking * Ticking is per frame update * _Note: It should be used with care_ * The tick event itself is not the only thing ticking * Timeline is ticking when it runs * MouseX or other inputs can be ticking * Update Animation in animation blueprints are ticking * UMG when you bind something it is ticking **Ticking Advice** * Limit the use of ticking wherever you can * When you use ticking, it must be a well thought out and deliberate decision * In 80-90% of cases, you can find other routes than using ticking * You can disable ticking on blueprint by default * Timers and Events can take care of _almost_ anything * When using timers consider adding a random loop time to them to prevent spikes when all Blueprint instances of this class update simultaneously * Work event based. Let things update only when you are certain they need to refresh * UMG: Instead of doing bind, use an event instead * You can turn off ticking in a Blueprint, or change its tick frequency * _Note: If a blueprint doesn't use ticking in its graph, turning off ticking in the properties won't make a difference_ * Build in conditions to limit when and how often ticking is active * Often you can split the logic from the visual effects. The visuals could remain on tick, but the logic can update slower * Sometimes even visual animations can easily be moved out of Blueprint _Note: Lastly, you could move whatever you must have on ticking over to C++. However, prior to moving it over to C++ profile it first to verify it would truly benefit performance_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#profiling-and-debugging) Profiling and Debugging **Blueprint Debugging Tools** * Blueprint Visualizer * Visual Logger * Stat Window * Profiler * Automated Tests * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#memory-and-loading) Memory and Loading * Blueprints can majorly impact memory consumption and loading times * Blueprints differ fundamentally from C++ when it comes to memory and loading. It is regarded as content * While C++ code is loaded right away in its entirety on boot, Blueprint is only loaded as it is required * You need to plan ahead in how you will organize and manage references **C++** * All classes are loaded on project boot **Content** * Art and Audio assets, Levels, Blueprints, etc... * Only loaded on an as needed basis * If C++ references content, and C++ is loaded on project boot; the content is loaded on project boot with the C++ **Notes** * Use the Reference Viewer to see dependencies to assets * You can right click in the content browser and select "Reference Viewer" to see what references it * Site Map shows you what is loaded * Any form of referencing between Blueprint and another Blueprint, or content, will load it * If you have many uncontrolled references across blueprints, you might very well be loading every asset referenced in every blueprint you have * Casts are counted as references **Advice** * Prevent Blueprints that reference a huge number of (especially large) assets. Instead, split those off into child Blueprint classes before it gets out of hand **Moving forward, the best technique is to create a clear hierarchy with rules in place for where asset references live:** 1. Every key class is defined in C++ 2. A Blueprint is then inherited from that C++ class 3. Another Blueprint is then inherited from the parent blueprint in turn **Note:** * Content is ideally referenced by the third step * Also, a clear set of rules regarding what is allowed to cast to what **Libraries** * Care should also be given to function libraries * If a single function of a library is used, then the entire library is loaded * Any reference to an asset, or a cast to another class, anywhere within the library will result in that content also getting loaded in * For this reason, function libraries should focus solely on functionality **Advice** * One of the intended uses of Game Modes is to help with this * You can also use dynamic asset loading * Soft references can precisely control when an asset is loaded * Soft references are the only way forward when having very large numbers of configurable parts * _Note: When working with soft references you can use maps to make it easier_ * Lastly to note, loading times within the editor are very different from the final packaged project * Content is loaded and managed differently in the editor * And blueprints compile on load, which can cause a loading chain reaction * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#garbage-collection) Garbage Collection * Garbage collection is the process of collecting and removing any objects that are no longer required * If something is destroyed in game, it is marked for garbage collection * At regular intervals, the engine will iterate through all objects that currently exist and retrieve the ones marked as destroyed * It then has to fully remove these by cleaning up the memory space they are occupying * Garbage collection is somewhat expensive because it needs to iterate through all objects _Note: All of this is done automatically behind the scenes, and there is no need to think about it or take it into account... unless you are crating and destroying a large number of actors_ **Advice** * Consider caching/Pooling, a common technique * Instead of spawning/destroying actors, have a pool of actors available that are never destroyed, (they are simply hidden), and can be recycled as needed * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-1#links) Links * (YouTube) [Blueprints In-depth - Part 1 | Unreal Feast Europe 2019](https://www.youtube.com/watch?v=j6mskTgL7kU) by Unreal Engine [Previous(YouTube Videos) Blueprints In-Depth](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth) [Next(YouTube) Blueprints In-depth Part 2](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-blueprints-in-depth/youtube-blueprints-in-depth-part-2) Last updated 1 year ago --- # (YouTube) Blueprint Communication | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#what-is-blueprint-communication) What is Blueprint Communication? * A means for separate individual objects to interact with each other #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#example-imagine-a-light-blueprint-and-a-lightswitch-blueprint) Example: Imagine a Light Blueprint and a LightSwitch Blueprint * How would you get one to work with the other? #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#useful-for-doing-things-like) Useful for doing things like: * Telling a specific object to do something * Querying another object * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#a-simple-primer) A Simple Primer * UE4 has no way to just send a broad signal to everyone * _Note: UE2 used to have a way to send a broad signal to everyone, but it isn't very efficient_ * Communication will always involve the following: * A Sending Blueprint * At least one Receiving Blueprint * Communication will **always** require a reference _at some point_ * In other words, one party (the Sender or the Receiver) has to become aware of the other * This is because, as stated above, there is no broad spectrum communication system * All Blueprint communication is 1-way * Blueprints can send data back and forth, but it requires both Blueprints to set up their own individual communication paths * Queries are possible, but are initiated by the Sender (still 1-way) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#blueprint-communication-methods) Blueprint Communication Methods * Direct Communication * Blueprint Interface Message Calls * Event Dispatchers _Note: There maybe other types, but they're probably extensions of the three listed above_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#when-to-use-different-types) When to Use Different Types 1. **First question: The flow of communication** 1. Is the sender pushing data to the receiver? If yes, 1. Direct Communication 2. Blueprint Interface Communication 2. Are the receivers actively listening for the sender to do something? If yes, 1. Event Dispatchers 2. **Second question: Which party can get a reference to the other** 1. Can the sender get a reference to the receiver(s)? If yes, 1. Direct Communication 2. Blueprint Interface Communication 2. Can only the receiver get a message to the sender? If yes, 1. Event Dispatchers * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#direct-communication-concept) Direct Communication - Concept * One blueprint is talking to another blueprint * Sender gains access to Receiver * Sender can then * Query data and variables * Send data and update variables * Call functionality on the Receiver * Always 1-to-1 communication, not 1-to-many * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#direct-communication-when-to-use-it) Direct Communication - When to Use It * You already know the following: * The Sending object * The Receiving object; or at least have a clear way to get a reference to them * What functionality or data you're going to tap into * If you don't know everything: * You will likely end up making a lot of Branch (If) nodes. * Ex: if it's a box open, if it's a light turn on * Ex: casting a lot to check the class type _Note: This isn't good to do, so you should probably be using a different form of communication_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#direct-blueprint-communication-in-action) Direct Blueprint Communication in Action * Sender gets a reference to the Receiver * Many, many ways to do this. Examples would be: * Assigned at the start of game (BeginPlay) * Overlaps * Get All Objects/Actors of Class (very slow, use with caution) * Sender may need to Cast this reference to the thing it wants to talk to * If the Cast is successful, then the connection is complete * Sender can send data to, or pull data from, the Receiver * Sender can call functions directly on the Receiver * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#a-word-on-casting) A Word on Casting * Casting confuses a lot of non-programmers _(it's a programming term)_ * Think of Casting as just a way to verify what you're talking to * Once you've Cast to a given type, only then can you access its functionality * If a Cast fails, you can always Cast to something else: _**Important to note: If you already have a reference of the proper type, you don't need to Cast!**_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#casting-and-object-orientation) Casting and Object Orientation * Casting to a too high parent class locks you out of specific functionality found only in lower child classes * Casting to a too low child class lowers your flexibility and eliminates the possibility of accessing sibling classes without further testing #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#tip-when-adding-functionality-to-your-blueprint-classes-keep-the-hierarchy-in-mind) Tip: When adding functionality to your Blueprint classes keep the hierarchy in mind! * Shared concepts belong in higher base classes * Don't duplicate work * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#blueprint-interfaces-concept) Blueprint Interfaces - Concept * A way to specify functionality without any kind of implementation * Blueprint Interfaces are 1 to 1 communication * The Sender still needs some reference to the Receiver #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#the-nice-thing) The nice thing: * Interfaces don't really care whether or not the Receiving object knows about them * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#blueprint-interfaces-how-they-work) Blueprint Interfaces - How They Work * Interfaces are a unique form of communication; they're their own asset * You send data (called Interface Messages) through that asset to listening objects * By default nothing receives Interface Messages * You have to implement the Blueprint Interface onto the blueprints that will be receiving * Anything can send interface messages whether they implement the Blueprint Interface or not * It's perfectly safe to send interface messages that don't implement the Blueprint Interface * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#blueprint-interfaces-when-to-use-them) Blueprint Interfaces - When to Use Them * When you're sending a signal to some other object, and you don't care what it does once it receives the signal * _Note: In fact, you don't even care if the receiver knows about the signal_ _Side Note: Interfaces can be used for communication between sub-levels_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#blueprint-interfaces-in-action) Blueprint Interfaces in Action * Only Receivers need to implement the Blueprint Interface * Anything can call an Interface * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#implementing-interfaces-events) Implementing interfaces - Events * If the interface has no return value (output), it gets implemented as an event on the Receiver * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#implementing-interfaces-functions) Implementing Interfaces - Functions * If the interface has a return value (output), it gets implemented as a function on the Receiver * _Note: Useful when the Sender needs to perform functionality on the Receiver, and then get something back from it_ * Once an interface function has been implemented on the Receiver, it can then be called by the Sender * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#bonus-trick-self-calling-interface-functionality) Bonus Trick - Self-calling Interface Functionality * Once an interface function has been implemented on the Receiver, the Receiver can then call that functionality on itself * This is useful to guarantee that a given object has a certain set of functionality * _Note: Think of this like a shortcut so you don't have to repeatedly setup the same functions on objects that inherit from different class hierarchy branches_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#collapse-node-vs-function-vs-macro) Collapse Node vs Function vs Macro * **Collapse Node:** Each copy is its own individual collection of the nodes * **Function:** Reserve function use when external objects need to call and reference the functionality * **Macro:** Collapses nodes to a single node, and any change will be updated to all other macro copies * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#event-dispatchers-concept) Event Dispatchers - Concept * Is a way to setup a listening type of relationship so that the Receiver is listening for an event on the Sender to take place. It can then respond however it likes * Observer Pattern * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#event-dispatchers-when-to-use-them) Event Dispatchers - When to Use Them * When you have a single event on a Sender that needs to be received by a lot of different Receivers, each doing their own thing * _Note: The Sender cannot receive a return value from the receivers_ * You know who the Sender is * But you don't know or care who the Receivers are * You plan to setup n-number of Receivers * The Receivers call all get a reference (know about) the Sender * The Receivers also know when to start listening for specific events * Also potentially knowing when to stop listening * Depending on your setup, it may be dangerous to leave a bind in place forever * In this case, you may need to unbind * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#event-dispatchers-in-action) Event Dispatchers in Action #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#in-the-sender-class) In the Sender Class * Create a new Event Dispatcher in the My Blueprints panel * At some point in your Event Graph your Sender must call this Event Dispatcher #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#in-the-receiver-class) In the Receiver Class * You must have a reference to the Sender! It's your responsibility to get that * Once you've confirmed the Sender class is the one you want _(note: you might need to Cast here)._.. * You bind to the Event Dispatcher by name * Create a Custom Event from the Event Pin * That Custom Event will be fired whenever the Sender calls their Event Dispatcher * Know that you may need to stop listening at some point * This means unbinding the event * This is really easy if you stored a reference to the Sender class before Binding #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#note) Note * If no objects have made a bind to an Event Dispatcher, when the Event Dispatcher is called nothing will happen since no one is listening * _Note: This is perfectly safe_ * Event Dispatchers cannot have an output * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#notes) Notes * To inherit functionality from one blueprint to another you need to make a child class * Binding data in UMG for UI is not performant because it updates on every tick * Player Screen node is for Split Screen * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-blueprint-communication#links) Links * (YouTube) [Blueprint Communications](https://www.youtube.com/watch?v=EM_HYqQdToE) by Unreal Engine [Previous(YouTube) Unreal Engine 5 | Blueprint for Intermediate Users (2023)](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-videos-smart-poly-blueprint-beginner-series/youtube-unreal-engine-5-or-blueprint-for-intermediate-users-2023) [Next(YouTube) Making Better Blueprints](https://mchambers.gitbook.io/unreal-engine-5-notes/youtube-notes/unreal-engine-blueprints/youtube-making-better-blueprints) Last updated 1 year ago --- # Section 4: Crypt Raider | Unreal Engine 5 - Notes * **How do you change the default map?** Project Settings -> Project: Maps & Modes -> Editor Startup Map and/or Default Map * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#glossary) Glossary * **Inheritance** - A child class automatically has all of the functionality of the parent * Relationship: Is-A * **Composition** - Class A has an instance of Class B, it can choose to use its functionality but doesn't have to * Relationship: Has-A * **Dependency Injection** - I need another object but cannot find it myself * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#code) Code * `UE_Log()` * `TEXT()` * `FVector::Distance()` * `GetOwner()` * `GetWorld()` * `GetOwner()->GetActorLocation()` * `GetOwner()->SetActorLocation()` * `GetForwardVector()` * `FMath` * `#include "Math/UnrealMathUtility.h"` * `UWorld` * `#include "Engine/World.h"` * `UPhysicsHandleComponent` * `#include "PhysicsEngine/PhysicsHandleComponent.h"` * `UPrimitiveComponent` * `FColor` * `FString` * `FHitResult` * `FQuat` * `FCollisionShape` * `NAME_None` * `UFUNCTION()` * `UFUNCTION(BlueprintCallable)` * `TArray<>` * `Actor->HasActorTag()` * `Cast<>` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#line-trace-and-geometry-trace) Line Trace & Geometry Trace * Can be used to detect objects * You can create new trace channels * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#world) World * `UWorld` is the top level object where levels are contained inside * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#references-vs-pointers) References vs Pointers * **References** * A reference variable cannot hold a reference variable as a value * **Pointers** * A pointer can hold another pointer as a value Pointer Reference can be null Yes No must be assigned at initialization No Yes can use arithmetic operations Yes No accessing contents \*ActorPtr ActorRef accessing address ActorPtr &ActorRef * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#const-references) Const References Copy // reference parameters should be made constant if they aren't supposed to be change void PrintDamage(const float& Damage) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#output-parameters) Output Parameters Copy /* Example of using a reference parameter to make the parameter an output parameter to be able to pass more outputs from a function */ bool HasDamage(float& OutDamage) { OutDamage = 5; return true; } #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#notes) Notes * References can be used for function parameters to make the parameter an output parameter * If a variable is being declared without a value and instantly passed into a function, it could be an "out parameter" * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#notes-1) Notes * You can reset the transform with grid snapping to set the location back to the defaults * Selecting the 4 screens (maximize viewport) in the editor is useful when level designing to see 4 different views of your level * Change the level lighting to "unlit" when your level doesn't have lighting * You can create "Actor tags" * _Note: You can search for "tag" for the actor properties in the editor_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-4-crypt-raider#links) Links * (Documentation) UWorld-> [https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UWorld/](https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UWorld/) * (Article) [C++ References vs Pointers](https://www.geeksforgeeks.org/pointers-vs-references-cpp/) * (Article) [Collision Filtering](https://www.unrealengine.com/en-US/blog/collision-filtering) * (Article) [A quick intro to Dependency Injection: what is is, and when to use it](https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/) by FreeCodeCamp * (YouTube) [Dependency Injection, The Best Pattern](https://www.youtube.com/watch?v=J1f5b4vcxCQ&t=129s) * (YouTube) [Dependency Injection In A Nutshell](https://www.youtube.com/watch?v=yunF2PgJlHU) [PreviousSection 3: Obstacle Assault](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-3-obstacle-assault) [NextSection 5: Toon Tanks v2](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-5-toon-tanks-v2) Last updated 1 year ago --- # Section 6: Collision Essentials | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collisions-vs-queries) Collisions vs Queries * Collisions - Geometries collide or intersect * Queries - Checking the environment to see if collisions would occur * Line Trace * Shape Sweep (also called Shape Trace) * Overlap Query * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collision-data) Collision Data * Part of your responsibility as a game developer is to manage the collision data for objects in your game #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#two-parts-collision-data-consist-of) Two Parts Collision Data Consist Of: 1. Collision Geometry 1. Mesh 1. Complex Geometry 2. Simple Collision 1. Simple Geometry 2. Preferred over complex due to being simpler and more performant 3. Shape Components 4. Collision can take other forms such as foliage, landscapes, physics asset, etc... 2. Collision Settings 1. Determines how the collision geometry will be treated by the engine 2. Which types of calculations to be used 1. Physics System 2. Query System * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collision-settings) Collision Settings * Collision Enabled - What this component is used for? * i.e. is it just a visual prop, does it need to interact with the world, etc... * No Collision - Object will not be involved in collision calculations * Query Only (No Physics Collision) - Only uses the Query System * No physics collision * Can use Spatial Queries (i.e. overlaps, traces) * Physics Only (No Query Collision) - Only uses the Physics System * Detects collisions as a result of physics * Collision Enabled (Query and Physics) - Uses both the Query and Physics Systems * Probe Only (Contact Data, no Query or Physics Collision) - Does not impart forces as a result of collisions * Can detect collision data as a result of physics (executes hit callbacks) * Does not use the Query System * Query and Probe (Query Collision, and Contact Data, no Physics Collision) * Uses the Query System * Does not impart forces as a result of collisions * Detect collision data as a result of physics (executes hit callbacks) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collision-object-type) Collision Object Type * Collision Channel - Identifies this component as a type from a collision standpoint * Two types of channels: 1) Trace Channels; 2) Object Channels * Collision interactions require us to be able to differentiate between objects * Collision Object Type #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#two-types-of-collision-channels) Two Types of Collision Channels: 1. Trace Channels - cannot be assigned to objects (components) 2. Object Channels - meant to be assigned to objects (components) * The engine has built-on collision channels (i.e. WorldStatic, WorldDynamic, etc...) * We can create custom collision channels * You can only create a limited number of collision channels * Best not to create too many custom collision channels because each object with collision must decide how to respond to each collision channel * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collision-responses) Collision Responses * Collision Responses - How this object responds to each collision channel * Ignore * No collision interaction * No callbacks * Overlap * Objects pass through each other * Can trigger overlap callbacks * Block * Objects do not pass through each other * If simulating physics * If sweeping * Can trigger hit callbacks * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collision-presets) Collision Presets * Collision Profile - Collision Enabled, Collision Object Type, and Collision Responses * Profiles can be saved as named presets * Components with collision have their own collision presets property * Unreal engine has built in collision presets * You can create custom collision presets * No limit to how many collision presets you can create * Encouraged over creating custom collision channels * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collision-filtering) Collision Filtering * Collision Filtering - How we determine the types of interactions between objects (components) * When two objects meet we look at their collision Object Types and Collision Responses * We choose the least blocking interaction - Ignore < Overlap < Block * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#collision-callbacks) Collision Callbacks * Collision Callbacks - Executed in response to registered collision interactions * Overlap Callbacks * Hit Callbacks * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#method-of-movement) Method of Movement * The actual outcome of collisions will depend on the method of movement #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#ways-to-move-an-object) Ways to move an object: 1. Moved Directly 1. Set Actor Location, Add Actor World Offset 1. Sweeping or No Sweeping 1. No Sweeping - Can place two objects in the same location 2. Sweeping - Block objects don't overlap (uses the Query System) 2. Moved via Physics 1. Add Force 3. Movement Component 1. Projectile Movement Component 2. Character Movement Component * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#notes) Notes * Collision all starts with the primitive component * Actors can have multiple components with collision data * You can create custom simple collisions with convex decomposition/Collision Hull * Cannot simulate physics if using complex as simple * If you're using physics, you don't have to sweep * If you're not using physics, you have to sweep * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-6-collision-essentials#blueprint-nodes) Blueprint Nodes * Line Trace By Channel [PreviousSection 5: Pawns and Enhanced Input](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-5-pawns-and-enhanced-input) [NextSection 7: Bad Bot Wrap-Up and Boss Fight](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-blueprints/udemy-unreal-engine-5-blueprints-the-ultimate-developer-course-by-stephen-ulibarri/section-7-bad-bot-wrap-up-and-boss-fight) Last updated 11 months ago --- # Section 3: Project Creation | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#code) Code * `USpringArmComponent` * `#include "GameplayFramework/SpringArmComponent.h"` * `UCameraComponent` * `#include "Camera/CameraComponent.h"` * `UTextBlock` * `CreateDefaultSubobject<>()` * `GetMesh()` * `Cast<>()` * `UPROPERTY()` * `TEXT()` * `FString` * `FText` * `FRotator` * `FVector` * `float` * `int32` * `UWorld` * `ULevel` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#seamless-traveling-and-lobby) Seamless Traveling & Lobby #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#non-seamless-travel) Non-Seamless Travel * Client disconnects from server * Client reconnects to the same server Non-seamless travel occurs: * When loading a map for the first time * When connecting to a server for the first time * When ending a multiplayer game and starting a new one #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#seamless-travel) Seamless Travel * Results in a smoother experience * Avoids any reconnection issues Enableing Seamless Travel: * Enable seamless travel on the game mode * `bUseSeamlessTravel` * We need a transition map * A map must always be loaded at any given time * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#travel-in-multiplayer) Travel In Multiplayer #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#uworld-servertravel) UWorld::ServerTravel * Server Only * Jumps the server to a new level * All connected clients will follow * Server calls `APlayerController::ClientTravel` #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#aplayercontroller-clienttravel) APlayerController::ClientTravel * When called from a client, travel to a new server * When called from a server, makes the player travel to a new map * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#network-role) Network Role #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#enetrole) ENetRole * `ENetRole::ROLE_Authority` * `ENetRole::ROLE_SimulatedProxy` * `ENetRole::ROLE_AutonomousProxy` * `ENetRole::ROLE_None` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#notes) Notes * You can migrate assets from one engine version to another, but you'll need a compatible engine version first to access the assets * Sometimes when moving folders the folder that you moved is still present. So, you can right click on the folder where you moved it to-> select "Update redirects", then you can delete the folder in the original location that you were trying to move it from * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation#links) Links * (YouTube) [Retargeting Animations in 5.4 is Finally Easy](https://www.youtube.com/watch?v=iE474cUpR-o) by Druid Mechanics * (Documentation) [Online Subsystem Steam](https://dev.epicgames.com/documentation/en-us/unreal-engine/online-subsystem-steam-interface-in-unreal-engine?application_version=5.3) * (Documentation) [Plugins](https://dev.epicgames.com/documentation/en-us/unreal-engine/plugins-in-unreal-engine?application_version=5.3) [PreviousSection 2: Creating a Multiplayer Plugin](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin) [NextSection 4: The Weapon](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-4-the-weapon) Last updated 1 year ago --- # Section 3: Online Subsystem | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#code) Code * `IOnlineSubsystem` * `#include "OnlineSubsystemh"` * `IOnlineSubsystem::Get()` * `IOnlineSubsystem::GetSubsystemName()` * `IOnlineSubsystem::GetSessionInterface()` * `IOnlineSessionPtr` * `#include "Interfaces/OnlineSessionInterface.h"` * `IOnlineSessionPtr::CreateSession` * `IOnlineSessionPtr::FindSessions` * `IOnlineSessionPtr::JoinSession` * `FName` * `FOnlineSessionSettings` * `#include "OnlineSessionSettings.hs"` * `GetWorld()` * `GetWorld()->ServerTravel()` * Ex for switching map to listen server: `GetWorld()->ServerTravel("/Game/ThirdPerson/Maps/ThirdPersonMap?listen")` * `FNameOnlineSession` * `TSharedPtr<>` * `MakeShareable()` * `SEARCH_PRESENCE` * `#include "Online/OnlineSessionNames.h"` * `TArray<>` * `EOnlineDataAdvertisementType` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#blueprint-nodes) Blueprint Nodes * Quit Game * Create Widget * Add to Viewport * Get Player Controller * Set Show Mouse Cursor * Set Input Mode UI Only * Get Game Instance * Is Valid * Set Active Widget Index * Get Text * Set Is Enabled * Event Construct * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#online-subsystem) Online Subsystem * With the **Online Subsystem** we can connect across the internet * **What is the Online Subsystem?** The Online Subsystem is an abstraction layer that handles communication between online service providers like Steam * This will make our lives easier because we only have to learn how to use the Online Subsystem code base #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#setup) Setup * You have to enable the Online Subsystem plugin that you want to use in the editor * You have to add the `"OnlineSubsystem"` and `"OnlineSubsystemSteam"` (or other platform) to your **.Build.cs** file * You have to add the DefaultEngine.ini code from the documentation * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#what-is-a-session) What is a session? * A session is basically an instance of the game running on the server * Picture an online game lobby that lists all of the games currently being played. Each game in the list is a session * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#session-interface) Session Interface * The session interface provides functionality for setting up sessions that allow players to find and join online games * This includes session management, finding sessions through search, as well as joining and leaving those sessions * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#notes) Notes * Widget Switcher can be used to switch between UI menus * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem#links) Links * (Documentation) [Online Subsystem - Steam](https://dev.epicgames.com/documentation/en-us/unreal-engine/online-subsystem-steam-interface-in-unreal-engine?application_version=5.2) * (Documentation) [FOnlineSubsystemSteam](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Plugins/OnlineSubsystemSteam/FOnlineSubsystemSteam?application_version=5.2) * (Documentation) [USubsystem](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Subsystems/USubsystem?application_version=5.2) * (Documentation) [UGameInstance](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Engine/UGameInstance?application_version=5.2) * (Documentation) [Programming Subsystems](https://dev.epicgames.com/documentation/en-us/unreal-engine/programming-subsystems-in-unreal-engine?application_version=5.2) [PreviousSection 2: Multiplayer Fundamentals](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals) [NextSection 4: Co-op Adventure Gameplay](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-4-co-op-adventure-gameplay) Last updated 1 year ago --- # (Patreon) UE5 Dedicated Servers by Stephen Ulibarri | Unreal Engine 5 - Notes [S1 L9](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/s1-l9) [Page 4](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/page-4) [Page 6](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/page-6) [PreviousSection 4: The Weapon](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-4-the-weapon) [NextS1 L9](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/s1-l9) --- # Section 1: | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-1#notes) Notes * PIE = Play In Editor [Previous(Udemy) Unreal Engine 5 C++ The Ultimate Game Developer Course](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course) [NextSection 2:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-2) Last updated 1 year ago --- # Section 9: | Unreal Engine 5 - Notes [PreviousSection 8: The Character Class](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-8-the-character-class) [NextSection 10: Collisions and Overlaps](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-10-collisions-and-overlaps) --- # Page 2 | Unreal Engine 5 - Notes [PreviousSection 13:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-13) [NextPage 1](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/page-1) --- # Section 4: The Weapon | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-4-the-weapon#code) Code * `UWidgetComponent` * `SetRootComponent()` * `HasAuthority()` * `GetLocalRole()` * `IsLocallyControlled()` **Macros** * `FORCEINLINE` * `DOREPLIFETIME()` * `#include "Net/UnrealNetwork.h"` * `UPROPERTY()` * `UENUM()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-4-the-weapon#rep-notifies) Rep Notifies * RepNotify functions aren't called on the server * Replication works one-way; from server-to-client * RepNotify functions can only have input parameters of the variable type that the function is replicating * OnRepNotify functions are prexifed with `OnRep_` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-4-the-weapon#notes) Notes * Components don't need to be registered in get lifetime registered props, you only need to set them to be replicated * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-4-the-weapon#links) Links * (Documentation) [Replicate Actor Properties](https://dev.epicgames.com/documentation/en-us/unreal-engine/replicate-actor-properties-in-unreal-engine?application_version=5.3) [PreviousSection 3: Project Creation](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation) [Next(Patreon) UE5 Dedicated Servers by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri) Last updated 1 year ago --- # S1 L9 | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/s1-l9#links) Links * [https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-engines-setup-unreal.html](https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-engines-setup-unreal.html) * [https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-unreal-actions.html](https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-server-sdk5-unreal-actions.html) * [https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html](https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html) [Previous(Patreon) UE5 Dedicated Servers by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri) [NextPage 4](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/patreon-ue5-dedicated-servers-by-stephen-ulibarri/page-4) Last updated 1 year ago --- # Page | Unreal Engine 5 - Notes [PreviousPage 1](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/page-1) [Next(tomlooman.com) Professional Game Development in C++ and Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine) --- # Section 11: | Unreal Engine 5 - Notes [PreviousSection 10: Collisions and Overlaps](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-10-collisions-and-overlaps) [NextSection 12:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-12) --- # Page 1 | Unreal Engine 5 - Notes [PreviousPage 2](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/page-2) [NextPage](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/page) --- # (Udemy) Unreal Engine 5 C++ The Ultimate Game Developer Course | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course#table-of-contents) Table of Contents * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course#course-review) Course Review [PreviousSection 6: Simple Shooter](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-for-developers-learn-c++-and-make-video-games/section-6-simple-shooter) [NextSection 1:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-1) Last updated 1 year ago --- # Section 13: | Unreal Engine 5 - Notes [PreviousSection 12:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-12) [NextPage 2](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/page-2) --- # Section 2: | Unreal Engine 5 - Notes [PreviousSection 1:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-1) [NextSection 3: Vectors, Rotators, and Trigonometry](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-3-vectors-rotators-and-trigonometry) --- # Section 2: Creating a Multiplayer Plugin | Unreal Engine 5 - Notes * LAN = Local Area Network * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#code) Code * `UFUNCTION()` * `UFUNCTION(BlueprintCallable)` * `FName` * `FString` * `FString::Printf()` * `UWorld` * `GetWorld()` * `GetWorld()->ServerTravel()` * `GetWorld()->GetFirstLocalPlayerFromController()` * `UGameplayStatics` * `#include "Kismet/GameplayStatics.h"` * `UGameplayStatics::OpenLevel()` * `GetGameInstance()` * `GetGameInstance()->GetFirstLocalPlayerController()` * `APlayerController::ClientTravel` * `ETravelType` * `IOnlineSubsystem` * `#include "IOnlineSubsystem.h"` * `IOnlineSubsystem::GetSessionInterface()` * `IOnlineSubsystem::GetSubsystemName()` * `IOnlineSessionPtr` * `#include "Interfaces/OnlineSessionInterface.h"` * `IOnlineSessionPtr::GetNamedSession()` * `IOnlineSessionPtr::DestroySession()` * `IOnlineSessionPtr::CreateSession()` * `IOnlineSessionPtr::FindSessions()` * `NAME_GameSession` * `TSharedPtr<>()` * `MakeShareable()` * `GEngine` * `GEngine->AddOnDebugScreenMessage()` * `FColor` * `TEXT()` * `FOnSessionCompleteDelegate` * `FOnSessionCompleteDelegate::CreateUObject()` * `ULocalPlayer` * `FOnlineSessionSearch` * `FDelegateHandle` * `SEARCH_PRESENCE` * `#include "Online/OnlineSessionNames.h"` * `TSoftObjectPtr` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#blueprint-nodes) Blueprint Nodes * Open Level * Execute Console Command * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#multiplayer-types) Multiplayer Types * Peer-to-Peer Model * Client Server Model * Unreal Engines multiplayer is an Authoritative Client Server Model * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#get-ip-address-on-mac) Get IP Address on Mac Copy // get ip address if on wifi ipconfig getifaddr en0 #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#links) Links * (Article) [How to run ipconfig on a Mac](https://www.xda-developers.com/how-run-ipconfig-mac/) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#online-subsystem) Online Subsystem * Provides way to access functionality of online services * **What is a session?** A session is an instance of the game running on the server #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#setup-requirements) Setup Requirements * Add the `"OnlineSubsystem"` to the **.Build.cs** file * _Note: If you want to use Steam then you must also add_ `_"OnlineSubsystemSteam"_` * Add the code for the **DefaultEngine.ini** file from the [Online Subsystem Steam Documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/online-subsystem-steam-interface-in-unreal-engine?application_version=5.3) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#plugins) Plugins * Plugins are collections of code and data designed for a specific purpose * Plugins can be easily enabled and disabled * Per project basis * Can add runtime gameplay functionality or editor functionality * Enabled from the Plugin Editor * Plugins are made up of one or more modules #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#modules) Modules * A distinct unit of C++ code * Contains a build file (Build.cs) * Code only (no uassets) * Encapsulation (each module has a distinct purpose) * Our project itself is a module #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#notes) Notes * Plugins and modules are broken into hierarchical levels * Plugins and modules can only depend on other plugins or modules at the same level * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#which-parent-class) Which parent class? #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#game-instance) Game Instance * Spawned at game creation * Not destroyed until the game is shutdown * Persist between levels #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#game-instance-subsystem) Game Instance Subsystem * Created after the game instance is created * Destroyed and garbage collected when the game instance is shut down * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#game-state) Game State #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#game-mode) Game Mode * Rules for the game * Moving players to levels * Selecting spawn locations #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#game-state-1) Game State * Let clients monitor the state of the game * Not specific to individual players * Array of player states * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#notes-1) Notes * You can place an asterisk before an `FString` variable to convert it to an `FName` * Ex: \*Address * Unreal Engine has an Online Subsystem called `"NULL"`, so if you see "NULL" for the Online Subsystem name, then it's the null subsystem * You can select the Play Standalone Game option to be able to test the Online Subsystem Steam without packaging the project * `ThisClass` can be used as a shorthand for the name of the class fully qualifying name * Steam Dev App ID 480 is the default id for testing multiplayer games on Steam * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-2-creating-a-multiplayer-plugin#links-1) Links Peer to Peer Model * (Article) [Peer to Peer Gaming](https://medium.com/tashi-gg/peer-to-peer-gaming-9991600c6707) * (Article) [Building a peer to peer multiplayer game with pub/sub](https://ably.com/blog/peer-to-peer-game-with-pub-sub) Client Server Model * (Article) [Client Server Game Architecture](https://www.gabrielgambetta.com/client-server-game-architecture.html) Peer to Peer vs Client Server Model * (Article) [Peer to peer vs client server architecture for multiplayer games](https://blog.hathora.dev/peer-to-peer-vs-client-server-architecture/) Extra * (Documentation) [Online Subsystem - Steam](https://dev.epicgames.com/documentation/en-us/unreal-engine/online-subsystem-steam-interface-in-unreal-engine?application_version=5.3) * (Documentation) [Programming Subsystems](https://dev.epicgames.com/documentation/en-us/unreal-engine/programming-subsystems-in-unreal-engine?application_version=5.3) * (Documentation) [TSoftObjectPtr](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/UObject/TSoftObjectPtr?application_version=5.3) [Previous(Udemy) Unreal Engine 5 C++ Multiplayer Shooter by Stephen Ulibarri](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri) [NextSection 3: Project Creation](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-shooter-by-stephen-ulibarri/section-3-project-creation) Last updated 1 year ago --- # Section 12: | Unreal Engine 5 - Notes [PreviousSection 11:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-11) [NextSection 13:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-13) --- # Section 4: C++ in Unreal Engine | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-4-c++-in-unreal-engine#c-refresher) C++ Refresher **Unreal Engine Hierarchy:** * UObject * AActor * APawn * ACharacter **UObject** * store data * cannot be placed in the level **AActor** * can be placed in the level * can have a visual representation **APawn** * can be possessed by a controller **ACharacter** * has a character movement component * has character specific functionality * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-4-c++-in-unreal-engine#reflection-and-garbage-collection) Reflection and Garbage Collection * **What is reflection?** Reflection is the ability for a program to examine itself at runtime, and harvest data about the program * **What is garbage collection?** Garbage collection is when a program manages memory associated with the project, and automatically deletes objects when they're no longer being used; this frees up the memory * Unreal Engine has its own reflection system built into it **Harvest Data:** * The Unreal Editor System * Expose data to Blueprints * Garbage Collection * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-4-c++-in-unreal-engine#notes) Notes * A controller is a type of actor designed for controlling pawns * Is-A vs Has-A relationships * For a class to participate in Unreal Engines garbage collection system, the class must make use of special macros * Ex: UCLASS() [PreviousSection 3: Vectors, Rotators, and Trigonometry](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-3-vectors-rotators-and-trigonometry) [NextSection 5: The Actor Class](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class) Last updated 1 year ago --- # Section 8: The Character Class | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-8-the-character-class#the-character-class) The Character Class * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-8-the-character-class#character-inputs) Character Inputs * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-8-the-character-class#character-camera-and-springarm) Character Camera and SpringArm * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-8-the-character-class#the-rotation-matrix) The Rotation Matrix * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-8-the-character-class#controller-directions) Controller Directions **Code** * `GetControlRotation()` * `FRotationMatrix()` * (Data Type) `FRotator` [PreviousSection 7: The Pawn Class](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class) [NextSection 9:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-9) Last updated 1 year ago --- # Section 3: Vectors, Rotators, and Trigonometry | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-3-vectors-rotators-and-trigonometry#coordinates) Coordinates * Scalar - A single numeric value * X Coordinates - Position along X-Axis * XY Coordinates - Position in the XY plane * Represented by an ordered pair * XYZ Coordinates - Position in 3-dimensional space * Represented by an ordered triple * The point in space where all coordinates are 0 is the "origin"/world origin * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-3-vectors-rotators-and-trigonometry#vectors) Vectors * An arrow with a starting point and ending point is known as a "vector" * A vector contains two pieces of information: * Direction * Magnitude * Has X and Y components (in 2 dimensions) * Has X, Y, and Z components (in 3 dimensions) * Two vectors are equal if: * Their components are equal * Their direction and magnitude are equal * Can calculate a vectors components by using: 2D (x2 - x1, y2 - y1) OR 3D (x2 - x1, y2 - y1, z2 - z1) * _Note: The coordinates of the head minus the coordinates of the tail_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-3-vectors-rotators-and-trigonometry#vector-magnitude) Vector Magnitude * v^2 = x^2 + y^2 * The pythagorean theorem can be used to find the magnitude of a vector * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-3-vectors-rotators-and-trigonometry#rotators) Rotators * X-Axis = Forward * Y-Axis = Right * Z-Axis = Up * Yaw - An objects rotation about the Z-Axis * Pitch - Rotation about the Y-Axis * Roll - Rotation about the X-Axis * Rotator * Pitch * Yaw * Roll * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-3-vectors-rotators-and-trigonometry#notes) Notes * Vector normalization? [PreviousSection 2:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-2) [NextSection 4: C++ in Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-4-c++-in-unreal-engine) Last updated 1 year ago --- # Section 10: Collisions and Overlaps | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-10-collisions-and-overlaps#collision-presets) Collision Presets * **What is a collision hull?** A collision hull refers to simple collisions for a mesh * No Collision: Component will pass through object * Query Only (No Physics Collision): Used for spatial query * Ex: Raycasts, sweeps, overlaps * Physics Only (No Query Collision): Used for physics simulation * Physics collisions * Physics engine works on the component * Collision Enabled (Query and Physics): The most expensive * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-10-collisions-and-overlaps#overlap-events) Overlap Events * You can add a collision component to a mesh **Blueprint Node** * On Component Begin Overlap * Get Object Name * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-10-collisions-and-overlaps#delegates) Delegates * (Design Pattern) Observer Pattern * Delegates is Unreal Engines version of the Observer Pattern * UPrimitiveComponent * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-10-collisions-and-overlaps#on-component-begin-overlap) On Component Begin Overlap * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-10-collisions-and-overlaps#on-component-end-overlap) On Component End Overlap [PreviousSection 9:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-9) [NextSection 11:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-11) Last updated 1 year ago --- # Lecture 17: | Unreal Engine 5 - Notes [PreviousLecture 16:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-16) [NextLecture 19: Multiplayer 1 Network Replication](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication) --- # Section 7: The Pawn Class | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class#capsule-component) Capsule Component * Detecting collisions via the mesh is expensive because meshes have complex collisions, instead you can use simple collisions * If you include header files, then they must be included before the **.generated.h** header file * The **.generated.h** header file must be the last header file included **Code** * `UCapsuleComponent` * `SetRootComponent()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class#forward-declarations) Forward Declarations * **What does forward declaring mean?** Forward declaring means declaring a class type without actually defining it * **What is an incomplete type?** A type that describes an identifier without information needed to determine its size * If you don't need to include the header file, then you can forward declare the class instead and include the header in the .cpp file * You can end up with circular dependencies with including header files inside of header files * _Note: You can fix this by forward declaring_ **When must you include header files?** * When inheriting from a parent class * When you need the types size * Constructing a new instance of the class * When accessing member variables/functions **Links** * (Wikipedia) [Forward Declaration](https://en.wikipedia.org/wiki/Forward_declaration) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class#skeletal-mesh-component) Skeletal Mesh Component **Code** * `USkeletalMeshComponent` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class#binding-inputs) Binding Inputs **Code** * `EAutoReceiveInput` * `FName()` **Links** * (YouTube) [UE5 C++ Enhanced Input - 1 - Core Concepts and Documentation](https://www.youtube.com/watch?v=bIo97TLsXkY) by Druid Mechanics * (YouTube) [UE5 C++ Enhanced Input - 2 - Bind C++ Functions to Actions](https://www.youtube.com/watch?v=fW1pXOAIviw) by Druid Mechanics * (YouTube) [UE5 C++ Enhanced Input - 3 - Float Value Types and Negative Modifiers](https://www.youtube.com/watch?v=XPN7rzPR1H8) by Druid Mechanics * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class#camera-and-springarm) Camera and SpringArm **Code** * `USpringArmComponent` * `UCameraComponent` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class#adding-controller-input) Adding Controller Input * Axis Mappings are executed every frame * Issue: A default pawn is being spawned in the game due to the default game mode specifying to spawn the default spawn * Fix: Create a game mode and specify the pawn to spawn **Links** * (YouTube) [UE5 C++ Enhanced Input - 4 -Using Two Dimensional Input Actions](https://www.youtube.com/watch?v=_HsFpxESi9U) by Druid Mechanics [PreviousSection 6: Moving Objects with Code](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code) [NextSection 8: The Character Class](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-8-the-character-class) Last updated 1 year ago --- # Lecture 16: | Unreal Engine 5 - Notes [PreviousLecture 12: More AI, Environment Query Spawn Logic](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-12-more-ai-environment-query-spawn-logic) [NextLecture 17:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-17) --- # Section 5: The Actor Class | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#blueprint-creation) Blueprint Creation * Create Blueprints that inherit from C++ classes * You should prefix your Blueprints * Ex: BP\_Item * Events in Blueprints are delegates * **Construction Script** \- Is called before the game starts * **Event Graph** - Is executed during the game **Code** * (macro) `UE_LOG()` * `UE_LOG(LogTemp, Warning, TEXT("insert text"))` * (macro) `TEXT()` **Blueprint Nodes** * Print String * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#onscreen-debug-messages) Onscreen Debug Messages **Code** * `GEngine` * `GEngine->AddOnScreenDebugMessage()` * `FColor` * `FString` * `FString()` - calling the FString constructor to create a new string **Blueprint Nodes** * Log String * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#formatting-strings) Formatting Strings * **How to change the default map?** Project Settings -> Maps & Modes **Code** * `GetName()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#drawing-debug-sphere) Drawing Debug Sphere * We can create our own custom function macros **Code** * (Data Type) `UWorld` * (Data Type) `FVector` * (Data Type) `int32` * `GetWorld()` * `DrawDebugSphere()` * `#include "DrawDebugHelpers.h"` * `GetWorldLocation()` **Blueprint Node** * Draw Debug Sphere * Get Actor Location * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#drawing-debug-lines) Drawing Debug Lines **Code** * `DrawDebugLine()` * `#include "DrawDebugHelpers.h"` * `GetActorForwardVector()` **Blueprint Node** * Draw Debug Line * Get Actor Forward Vector * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#drawing-debug-points) Drawing Debug Points **Code** * `DrawDebugPoint()` * `#include "DrawDebugHelpers.h"` **Blueprint Node** * Draw Debug Point * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#custom-header-files) Custom Header Files * You can create your own custom header file such as to store your macros * _Note: You might want to put the header file inside of the source folder_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class#links) Links * [Coding Standards](https://docs.unrealengine.com/4.26/en-US/ProductionPipelines/DevelopmentSetup/CodingStandard/) * [FString](https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Core/Containers/FString?application_version=5.1) * [More FString Info](https://docs.unrealengine.com/4.26/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/FString/) * [Printf C++](https://cplusplus.com/reference/cstdio/printf/) [PreviousSection 4: C++ in Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-4-c++-in-unreal-engine) [NextSection 6: Moving Objects with Code](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code) Last updated 1 year ago --- # (tomlooman.com) Professional Game Development in C++ and Unreal Engine | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine#table-of-contents) Table of Contents * [Lecture 2: Project Start & Version Control](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/278/course-notes/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control) * [Lecture 3: Gameplay, Collision, and Physics](https://app.gitbook.com/o/qwWR9IUndkp6ygQyDXEG/s/xaZ8XpHqqYqt0G9sd4P7/~/changes/278/course-notes/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-3-gameplay-collision-and-physics) * [Lecture 4: Interfaces & Collision Queries](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-4-interfaces-and-collision-queries) * Lecture 5: * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine#course-review) Course Review #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine#pros) Pros #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine#cons) Cons * Shows version control (Git & GitHub) but doesn’t actually teach it * Expects prior programming knowledge * _Note: The course does say that prior programming knowledge is expected_ [PreviousPage](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/page) [NextLecture 2: Project Start & Version Control](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control) Last updated 1 year ago --- # Lecture 6: Debugging Tools | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-6-debugging-tools#code) Code * `UE_LOG(LogTemp, Log, TEXT(""))` * `UE_LOG(LogTemp, Warning, TEXT(""))` * `DrawDebugString()` * `GetNameSafe()` * `GetWorld()->TimeSeconds` - time since starting the game * `FString` * `FString::Printf()` * `FColor` * `ensure()` * `ensureAlways()` * `check()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-6-debugging-tools#blueprint-nodes) Blueprint Nodes * Create Widget * Add to Viewport * Find Look At Rotation * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-6-debugging-tools#notes) Notes * To step into engine code when debugging, you need to have the editor symbols for debugging * UMG- By default Canvas Panel is no longer added, so you'll need to add it * **DebugGame Editor** can be used for detailed debugging to troubleshoot an issue * * * Links * [Logging and Printing in C++](https://nerivec.github.io/old-ue4-wiki/pages/logs-printing-messages-to-yourself-during-runtime.html) * [Asserts for Debugging](https://dev.epicgames.com/documentation/en-us/unreal-engine/asserts-in-unreal-engine) [PreviousLecture 5: Blueprints 101](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-5-blueprints-101) [NextLecture 7: UMG & (Player) Attributes](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes) Last updated 1 year ago --- # Lecture 12: More AI, Environment Query Spawn Logic | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-12-more-ai-environment-query-spawn-logic#code) Code * `FMath` * `FName` * `FVector` * `UCurveFloat` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-12-more-ai-environment-query-spawn-logic#blueprint-nodes) Blueprint Nodes * Get All Actors of Class * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-12-more-ai-environment-query-spawn-logic#game-mode-base) Game Mode Base * Doesn't use BeginPlay, will need to use StartPlay instead * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-12-more-ai-environment-query-spawn-logic#notes) Notes * Nav Modifier Volume can be used to delete navmesh locations [PreviousLecture 11: Intermediate AI with Custom Tasks & EQS](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-11-intermediate-ai-with-custom-tasks-and-eqs) [NextLecture 16:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-16) Last updated 1 year ago --- # Lecture 22: Finishing Up Multiplayer | Unreal Engine 5 - Notes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-22-finishing-up-multiplayer#notes) Notes [PreviousLecture 21: Multiplayer 3](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-21-multiplayer-3) [NextUnreal Engine C++ Multiplayer Networking](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking) Last updated 1 year ago --- # Lecture 11: Intermediate AI with Custom Tasks & EQS | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-11-intermediate-ai-with-custom-tasks-and-eqs#pawn-sensing-vs-ai-perception) Pawn Sensing vs AI Perception * PawnSensing is the older version of AIPerception * PawnSensing is the easiest to use * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-11-intermediate-ai-with-custom-tasks-and-eqs#notes) Notes * The nodes on the left side of a behavior tree are considered the highest priority * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-11-intermediate-ai-with-custom-tasks-and-eqs#links) Links * [Visual Logger](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-insights-in-unreal-engine) * [Environment Query System](https://dev.epicgames.com/documentation/en-us/unreal-engine/environment-query-system-in-unreal-engine) * [AI Perception](https://dev.epicgames.com/documentation/en-us/unreal-engine/ai-perception-in-unreal-engine) * [Pawn Sensing](https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/AI/Components/PawnSensing?application_version=5.3) [PreviousLecture 10: Basic AI & Behavior Trees](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees) [NextLecture 12: More AI, Environment Query Spawn Logic](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-12-more-ai-environment-query-spawn-logic) Last updated 1 year ago --- # Lecture 9: Audio, Animation, UI | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-9-audio-animation-ui#code) Code * `UCLASS(ABSTRACT)` * `DisableInput()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-9-audio-animation-ui#blueprint-nodes) Blueprint Nodes * Destroy Actor * Is Simulating Physics * Get Reference to Self * Project World to Screen * Get Owning Player * Set Render Translation * Get Viewport Scale * Event Construct * Delay * Remove From Parent * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-9-audio-animation-ui#notes) Notes * Can make objects such as item pickups that have a static location turn invisible then make visible, instead of destroying and respawning the object * Assign assets in Blueprints instead of C++ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-9-audio-animation-ui#links) Links * [Design Paradigms: Composition vs Inheritance vs Interfaces](https://forums.unrealengine.com/t/design-paradigm-composition-vs-inheritance-vs-interface-in-unreal-with-example-need-help/96423) [PreviousLecture 8: (Dynamic) Materials for Gameplay](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay) [NextLecture 10: Basic AI & Behavior Trees](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees) Last updated 1 year ago --- # Lecture 4: Interfaces & Collision Queries | Unreal Engine 5 - Notes * **Why are interfaces useful?** Interfaces are useful because they allow for a shared API without having to specify the implementation in the interface. The classes that implement the interface will specify the implementation of the interface * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-4-interfaces-and-collision-queries#code) Code * `UFUNCTION(BlueprintNativeEvent)` - * `UFUNCTION(BlueprintImplementableEvent)` - * `TEXT()` - * `FRotator()` - * `SetRelativeRotation()` - * `GetOwner()` - * `DrawDebugLine()` - * `LineTraceSingleByObjectType()` - * `TArray<>` - * `FQuat` - * `FTimerHandle` - * `TSubclassOf<>` - * `FHitResult` - * `FCollisionObjectQueryParams` - * `FColor` - * `GetActorEyesViewPoint()` - * `Cast<>()` - * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-4-interfaces-and-collision-queries#notes) Notes * Unreal Interfaces end with the word **"Interface"** * Ex: SGameplayInterface * You need to add **\_Implementation** to the implemented interface name at the end * Ex: `void Interact_Implementation(APawn* InstigatorPawn);` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-4-interfaces-and-collision-queries#links) Links * [C++ Interfaces](https://dev.epicgames.com/documentation/en-us/unreal-engine/interfaces-in-unreal-engine?application_version=5.0) [PreviousLecture 3: Gameplay, Collision, and Physics](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-3-gameplay-collision-and-physics) [NextLecture 5: Blueprints 101](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-5-blueprints-101) Last updated 1 year ago --- # Lecture 5: Blueprints 101 | Unreal Engine 5 - Notes * **What is an instigator?** An instigator is whatever object is responsible for another object * Ex: A player is the instigator for a bullet if a player fires a bullets from a weapon * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-5-blueprints-101#blueprints) Blueprints * Node based visual scripting * Sits on top of C++ * Lots of functionality exposed to C++, but not all * Not as fast as C++, but mostly fast enough * Successor to Kismet * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-5-blueprints-101#code) Code * `UFUNCTION(BlueprintCallable)` - * `UPROPERTY(BlueprintReadOnly)` \- * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-5-blueprints-101#blueprint-nodes) Blueprint Nodes * Timeline * Set Relative Rotation * Make Rotator * Flip Flop * Branch * Get Actor Location * Spawn Emitter At Location * Destroy Actor * Get Instigator * Ignore Actor When Moving * Make Transform * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-5-blueprints-101#notes) Notes * Events can be bound to things like timers * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-5-blueprints-101#links) Links * [Intro to Blueprints](https://www.youtube.com/watch?v=EFXMW_UEDco) * [Blueprint kickstart](https://dev.epicgames.com/community/learning/courses/vW/unreal-engine-blueprint-kickstart/qjK/blueprint-intro-and-philosophy) * [Blueprint Essentials](https://dev.epicgames.com/community/learning/courses/QGD/unreal-engine-blueprint-essential-concepts/P7L/unreal-engine-introduction-to-blueprint-essential-concepts) * [Blueprint Best Practices](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Blueprints/BestPractices/) * [Content Examples](https://dev.epicgames.com/documentation/en-us/unreal-engine/content-examples-sample-project-for-unreal-engine) [PreviousLecture 4: Interfaces & Collision Queries](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-4-interfaces-and-collision-queries) [NextLecture 6: Debugging Tools](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-6-debugging-tools) Last updated 1 year ago --- # Lecture 3: Gameplay, Collision, and Physics | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-3-gameplay-collision-and-physics#player-controller) (Player) Controller * Controller.h - shared base for AI and players, not visually represented in the world * Has “Control Rotation” (for camera use, etc…), separate from Pawns rotation * PlayerController.h * one per player, persists for entire session (or until level changes) * posses “Pawn” and forwards input from player * Pawn can “die” and be destroyed, but player controller persists * AIController.h - one per AI. holds the logic that controls the Pawn * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-3-gameplay-collision-and-physics#code) Code * `bUsePawnControlRotation` - * `bUseControlRotationYaw` - * `bOrientRotationToMovement` - * `UPROPERTY(VisibleAnywhere)` - * `UPROPERTY(EditAnywhere)` - * `GetWorld()` - * `GetMesh()` - * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-3-gameplay-collision-and-physics#notes) Notes * Kismet means Blueprint. Kismet was the old system prior to Blueprint * X = Forward (Red) * Y = Right (Green) * Z = Up (Blue) * Spawning is always done through `GetWorld()` * You can create your own physics/collision profiles * We use Blueprints to assign assets such as assigning a mesh to a character * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-3-gameplay-collision-and-physics#links) Links * [Collision Filtering](https://www.unrealengine.com/en-US/blog/collision-filtering) * [Unreal Engine C++ Complete Guide](https://www.tomlooman.com/unreal-engine-cpp-guide/#Delegates_Events) * [(Blog) Delegates Events](https://www.tomlooman.com/unreal-engine-cpp-guide/#Delegates_Events) * [(Documentation) Unreal Engine 5 Migration Guide](https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-5-migration-guide?application_version=5.0) * Note: TObjectPtr instead of raw pointers * [Why should I replace raw pointers with TObjectPtr?](https://forums.unrealengine.com/t/why-should-i-replace-raw-pointers-with-tobjectptr/232781/10) [PreviousLecture 2: Project Start & Version Control](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control) [NextLecture 4: Interfaces & Collision Queries](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-4-interfaces-and-collision-queries) Last updated 1 year ago --- # Lecture 21: Multiplayer 3 | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-21-multiplayer-3#blueprint-nodes) Blueprint Nodes * Get Owner * Get Owning Component * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-21-multiplayer-3#notes) Notes [PreviousLecture 20: Multiplayer 2](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2) [NextLecture 22: Finishing Up Multiplayer](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-22-finishing-up-multiplayer) Last updated 1 year ago --- # Lecture 10: Basic AI & Behavior Trees | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees#unreal-ai-system) Unreal AI System * **Navigation Mesh -** Provides data on where AI is allowed to move (Path Finding) * **Behavior Tree -** Brains of AI. Tree executing from top to bottom and left to right * Selector, Sequence * Task, Service, Decorator * **Blackboard -** Memory of AI. Data storage, no logic * **Environment Query System -** Spatial queries for finding objects/locations based on tests * **PawnSensing & AIPerception -** Senses to see or hear others * Debugging Tools * Gameplay Debugger * Visual Logger * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees#behavior-tree) Behavior Tree * Selector: pick one child node (evaluate left to right) * check Decorators if allowed to run * Sequence: run all sequentially, left to right * cancel sequence on any failure * Task: actions like attack, move to, etc... * Service: runs repeatedly for background tasks * Decorator: condition checks, flow control. (return true/false) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees#code) Code * `UBehaviorTree` * `RunBehaviorTree()` * `UGameplayStatistics::GetPlayerPawn()` * `GetBlackboardComponent()` * `FBlackboardKeySelector` * `AAIController->LineOfSightTo()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees#notes) Notes * Might have to add modules to the **.Build.cs** file * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees#comment-so-as-i-understand-ue-interprets-0-0-0-as-an-unset-vector-in-bb.-what-is-the-common-industry) Comment: So, as I understand, UE interprets {0,0,0} as an unset vector in BB. What is the common industry workaround for a case when this is actually a valid location in the world? Introduce a separate boolean flag like `LocationIsSet`? Push some NaNs to the vector? Answer- _That's indeed what I've seen done within AI. They have an IsSet() function on the struct that tracks whether it was set to a valid location._ _Unreal has TOptional which supports this too. So perhaps TOptional is what you need?_ ~ Tom Looman * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-10-basic-ai-and-behavior-trees#links) Links * [AI Documentation](https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/ArtificialIntelligence/) * [Gameplay Debugger](https://dev.epicgames.com/documentation/en-us/unreal-engine/using-the-gameplay-debugger-in-unreal-engine?application_version=5.3) * [Introduction to AI with Blueprints](https://dev.epicgames.com/community/learning/courses/67R/unreal-engine-introduction-to-ai-with-blueprints/mX27/introduction-to-ai-with-blueprints) * [TOptional](https://benui.ca/unreal/toptional/) [PreviousLecture 9: Audio, Animation, UI](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-9-audio-animation-ui) [NextLecture 11: Intermediate AI with Custom Tasks & EQS](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-11-intermediate-ai-with-custom-tasks-and-eqs) Last updated 1 year ago --- # Section 6: Moving Objects with Code | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#setactorlocation) SetActorLocation **Code** * `SetActorLocation()` * `FVector()` - constructor to create a FVector **Blueprint Node** * Set Actor Location * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#setactorrotation) SetActorRotation **Code** * `SetActorRotation()` * `FRotator()` - constructor to create a FRotator **Blueprint Node** * Set Actor Rotation * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#actor-world-offset) Actor World Offset * DeltaTime is used to make code frame rate independent * If we're moving every frame, then we should use DeltaTime to scale the movement **Code** * `AddActorWorldOffset()` * `GetActorLocation()` **Blueprint Node** * Add Actor World Offset * Add World Rotation * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#the-sine-function) The Sine Function * You can assign basic variables inside of the header files **Code** * `FMath` * `FMath::Sin()` * `AddActorWorldOffset()` **Blueprint Node** * Sin * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#exposing-variables-to-blueprints) Exposing Variables to Blueprints * You need to add the UPROPERTY() macro to expose a variable/property in C++ to the editor **Code** * `UPROPERTY()` * `UPROPERTY(EditDefaultsOnly)` - only allows you to edit inside of the default blueprint * `UPROPERTY(EditInstanceOnly)` - only allows you to edit the instance * `UPROPERTY(EditAnywhere)` - can edit anywhere * `UPROPERTY(VisibleDefaultsOnly)` - can only see inside of the default blueprint * `UPROPERTY(VisibleInstanceOnly)` - can only see for the instance * `UPROPERTY(VisibleAnywhere)` - can see anywhere, but not editable * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#exposing-variables-to-the-eventgraph-blueprints) Exposing Variables to the EventGraph (Blueprints) * You need to show the exposed variables in the Blueprint EventGraph to see the C++ exposed variables **Code** * `UPROPERTY(BlueprintReadOnly)` - only allows you to get the variable using the getter * `UPROPERTY(BlueprintReadWrite)` - allows you to both get the variable using the getter, and setting the variable * `UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = true))` - allows you to expose a private property to the Blueprint EventGraph * `UPROPERTY(Category="insert_name")` - adds the property to the specified category **Blueprint Node** * Clamp * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#exposing-functions-to-blueprints) Exposing Functions to Blueprints * (Access Modifier) public - if the code will be called from external classes * (Access Modifier) protected - if the code will be called from derived/child classes only * (Access Modifier) private - if the code will only be called from the same class * You need to add the UFUNCITON() macro to expose a function in C++ to Blueprints * You can split a struct pin on a Blueprint node **Code** * `UFUNCTION()` * `UFUNCITON(BlueprintCallable)` - allows the function to be callable from Blueprints * `UFUNCITON(BlueprintPure)` - allows the function to be callable from Blueprints as a pure function * `FMath::Cos()` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#template-functions) Template Functions * Template functions allow you to pass any data type to the function **Code** * `template>` * `FVector::ZeroVector` * `FVector` * `FRotator` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#components) Components * Every actor has at least 1 component * In Blueprint, you can drag a new component over the root component to replace it * You cannot move the root component in Blueprint, but anything attached to the root component you can move **USceneComponents** * Has a transform * Location (FVector) * Rotation (FRotator) * Scale (FVector) * Can be attached to other components **UStaticMeshComponent** * UStaticMeshComponent is derived from the USceneComponent * Has a transform (derived from USceneComponent) * Can be attached to other components * Has a mesh (UStaticMesh) **Code** * `RootComponent` * `USceneComponent` * `UStaticMeshComponent` * `UStaticMesh` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-6-moving-objects-with-code#components-in-c) Components in C++ * Adding UPROPERTY() marks a variable to participate in the reflection system **Code** * `CreateDefaultSubobject(TEXT(""))` - is used to create an object. It returns the address of the created object, so you'd store a reference to the address in a pointer * Ex: CreateDefaultSubobject(TEXT("Minion")) * `TEXT("")` * `RootComponent` [PreviousSection 5: The Actor Class](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-5-the-actor-class) [NextSection 7: The Pawn Class](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/udemy-unreal-engine-5-c++-the-ultimate-game-developer-course/section-7-the-pawn-class) Last updated 1 year ago --- # Lecture 2: Project Start & Version Control | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#version-control) Version Control * GitHub has an Unreal Engine **.gitignore** template * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#class-hierarchy) Class Hierarchy * **Object** - base class for all unreal objects * **Actor** - objects that can be placed or spawned in the world * **Pawn** - actors that can be controlled by players or AI * **Character** - pawn that implements walking movement * **SCharacter** - our C++ class (with our own prefix) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#class-prefixes) Class Prefixes Unreal expects classes to be prefixed consistently. _Note: Not the same as our prefix “S”_ * U - Classes deriving from UObject * A - deriving from Actor * F - Structs * E - Enums * I - Interfaces **Examples:** * ACharacter (Class) * FHitResult (Struct) * EDirection (Enum) * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#code) Code * `CreateDefaultSubobj<>()` - creates a sub object for an actor * `→SetAttachment()` - can be used to set the component as a child of another component. You call the method on the component that you want to set as a child to another component * `GetActorForwardVector()` - returns a vector for the direction the actor is looking * `UPROPERTY()` - used to make C++ code exposed in Blueprints * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#actor-components) Actor Components * Components live inside of actors * A component handles a particular task (i.e. movement, physics interaction, etc…) * Components are commonly created in the constructor of an Actor * You can create and destroy components at runtime * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#notes) Notes * When creating new C++ classes the naming convention is to prefix the class name with something. This is so that you can tell which classes are yours vs the built-in engines classes * Ex: SCharacter, FortCharacter, etc… * Yaw = Horizontal Axis * Pitch = Vertical Axis * You can create folders in the Outliner to group objects together * _Note: If you delete the folder in the Outliner, then it will not delete the items inside of the folder_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#note-to-self) Note to Self * Do not delete the unreal engine project files and copy them over like Tom Looman showed in the video, that caused problems for Rider as well as unreal engine crashing when trying to save current level * Rider IDE: You can hover over code and it will bring up a pop-up for the definition of it, you can then click the three dots and select “jump to source” to take you to where it is defined * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-2-project-start-and-version-control#links) Links * [Project Style Guide](https://github.com/Allar/ue5-style-guide) * [Comprehending Project & File Structure](https://dev.epicgames.com/community/learning/courses/qpR/unreal-engine-comprehending-projects-and-file-structure/jR8/introduction-to-the-launcher) * [Coding Standard](https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine?application_version=5.3) * [Gameplay Framework Classes](https://www.tomlooman.com/unreal-engine-gameplay-framework/) * [Unreal Editor Basics](https://dev.epicgames.com/community/learning/courses/D95/unreal-engine-editor-fundamentals/e913/unreal-engine-editor-fundamentals-overview) * [Unreal Engine Portal](https://dev.epicgames.com/community/) * [Unreal's Property System](https://www.unrealengine.com/en-US/blog/unreal-property-system-reflection) * [UFUNCTION Examples](https://www.tomlooman.com/unreal-engine-ufunction-specifiers/) * [UProperty Specifiers](https://benui.ca/unreal/uproperty/) * [Official Enhanced Input Documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/enhanced-input-in-unreal-engine) * [Enhanced Input Video Tutorial by Druid Mechanics](https://www.youtube.com/watch?v=fW1pXOAIviw) * Extra: * [C++ Hide and Seek Tutorial Series](https://dev.epicgames.com/community/learning/tutorials/bXy3/unreal-engine-hide-and-seek-c-tutorial-series-part-i) [Previous(tomlooman.com) Professional Game Development in C++ and Unreal Engine](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine) [NextLecture 3: Gameplay, Collision, and Physics](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-3-gameplay-collision-and-physics) Last updated 1 year ago --- # Lecture 8: (Dynamic) Materials for Gameplay | Unreal Engine 5 - Notes * **What is PBR?** Physically Based Rendering * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay#what-is-physically-based-rendering-pbr) **What is Physically Based Rendering (PBR)?** * Unreal uses real world values to simulate physical properties of light * Materials will react to light in a more realistic way * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay#code) Code * `GetInstigator()` * `SetScalarParameterValueOnMaterials()` * `GetWorld()->TimeSeconds` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay#nodes) Nodes * Sine * Time * Constant * Constant3Vector * LinearInterpolate * Add * Multiply * DebugeScalarValues * OneMinus * Clamp * LinearGradient * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay#blueprint-nodes) Blueprint Nodes * Get Time Seconds * Get Dynamic Material * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay#notes) Notes * Materials are called "shaders" in other game engines like Unity * Lerp nodes can be useful to blend between two values * Material instances and promoting values to parameters allows you to tweak a material in the editor without having to compile for the changes to take affect * There are pre-built functions that you can use for various things * Material names start with a **"M\_"** * You can create your own material functions * When creating a material function you need to select "Expose to Library" so your function shows up in the panel * You can create UI materials such as a health bar * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay#links) Links * [Material (Physically Based Rendering) Fundamentals (Video)](https://dev.epicgames.com/community/learning/courses/nDz/unreal-engine-unreal-editor-fundamentals-materials/RWR/introduction-to-physically-based-rendering) * [Material Editor Fundamentals (Video)](https://dev.epicgames.com/community/learning/courses/pm/unreal-engine-material-editor-fundamentals-for-game-development/V1X/unreal-engine-introduction-to-the-course) * Note: Stopped at video#7 * [Physically Based Materials Overview](https://dev.epicgames.com/documentation/en-us/unreal-engine/physically-based-materials-in-unreal-engine) * [Material Inputs Overview](https://dev.epicgames.com/documentation/en-us/unreal-engine/material-inputs-in-unreal-engine) * [Intro to Materials (10 Video Playlist)](https://www.youtube.com/watch?v=lngF4VVNER4&list=PLZlv_N0_O1gbQjgY0nDwZNYe_N8IcYWS-) [PreviousLecture 7: UMG & (Player) Attributes](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes) [NextLecture 9: Audio, Animation, UI](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-9-audio-animation-ui) Last updated 1 year ago --- # Lecture 7: UMG & (Player) Attributes | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#uproperty-ufunction-attributes) UPROPERTY/UFUNCTION Attributes * `EditAnywhere` - edit in Blueprint editor and per instance level * `VisibleAnywhere` - read only in editor and level * `EditDefaultsOnly` - hide variable per instance, edit in Blueprint editor only * `VisibleDefaultsOnly` - read only editing of instances (eg. when placed in level) * `BlueprintReadOnly` - read only in Blueprint scripting (does not affect details panel) * `BlueprintReadWrite` - read-write access in Blueprints * `BlueprintAssignable` - * `BlueprintCallable` - * `Category` - display only for detail panels and Blueprint context menu * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#code) Code * `Cast<>()` * `::StaticClass()` * `Destroy()` * `nullptr` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#blueprint-nodes) Blueprint Nodes * Get Owing Player Pawn * Get Owning Player Controller * Get Component By Class * Cast To Player Controller * Is Valid * Spawn Actor From Class * Set Percent * Class Defaults * Get Class * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#unreal-engine-string-types) Unreal Engine String Types * **FString** * Most commonly used for debugging * Allows string manipulation (append, split, etc...) * **FName** * Hashed for faster string comparisons * Used by system and gameplay logic (eg. GetMuzzleLocation(FName) * Does not change once assigned * **FText** * Front end text to display in UI * Easily localized into different languages * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#umg-construct-vs-pre-construct) UMG - Construct vs Pre Construct Type UMG Designer Viewport Construct No Yes Pre-Construct Yes Yes * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#comment-question-whats-the-proper-dependency-flow-for-gamestate-gamemode-playercontroller-playerstat) Comment - Question: What's the proper dependency flow for GameState, GameMode, PlayerController, PlayerState, GameInstance? **Answer-** _Epic has recently even come out with the View Model framework for UMG. It sits between UI and Game logic as a storage for data._ _Calling from game code into HUD will become a nightmare of dependencies and really isn't neccesary if you have a proper framework that's event based._ _The intend for things like GameState and GameMode to my understanding has always been to have one matching GameState class per GameMode class. You don't need to overcomplicate that part of the framework with interfaces. Consider how many types you'll have for everything. GameInstance is always available and has a lifetime for the entire game's duration. That shouldn't include game mode specific logic for that reason._ _It may be easier to understand these classes and their intention by looking back at Unreal Tournament for which this was originally designed (minus GameInstance, that didn't exist back then)._ _Also Subsystems are relatively new. They provide a great place for individual features that would have otherwise existed inside of the 'traditional' framework classes. You can see that at the very end of the course we move SaveGame logic out of the GameMode class and into a Subsystem which is now the 'better' location._ _I hope this gives somewhat of an insight! ~ Tom Looman_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#notes) Notes * UMG widgets are not by default exposed to the Blueprint Event graph. You'll need to expose them * Ex: You can expose a widget by checking "is variable" * You don't want your code to point into your UI, you want your UI to grab/listen to changes * UMG Constructor (`Event Construct`) runs once the UI is ready to be added to the viewport * UMG PreConstruct (`Event Pre Construct`) is run before it is added to the UI, and even in the designer * End UMG animation names with **"Anim"** * Select "Restore Pre-Animated State" if your text size changes while animating * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-7-umg-and-player-attributes#links) Links * [String Handling (FString, FName, FFText)](https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/StringHandling/) * [UMG Viewmodel](https://dev.epicgames.com/documentation/en-us/unreal-engine/umg-viewmodel) * [UMG Viewmodels: Building More Robust and Testable UIs using MVVM | Unreal Feast 2023](https://dev.epicgames.com/community/learning/tutorials/pw3Y/unreal-engine-umg-viewmodels-building-more-robust-and-testable-uis-using-mvvm-unreal-fest-2023) * Extra: * (YouTube) [Unreal Engine Challenge Code Review at Game Job Fair Autumn 2022](https://www.youtube.com/watch?v=jFyMcY_oXrM&t=1507s) by Games Factory Talents * (YouTube) [Asset Dependency Chains: The Hidden Danger | Unreal Feast 2022](https://www.youtube.com/watch?v=4-oRyDLfo7M&t=4s) by Unreal Engine * [Refactoring: Cleaning Your Code](https://refactoring.guru/refactoring) [PreviousLecture 6: Debugging Tools](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-6-debugging-tools) [NextLecture 8: (Dynamic) Materials for Gameplay](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-8-dynamic-materials-for-gameplay) Last updated 1 year ago --- # Lecture 20: Multiplayer 2 | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#gameplay-classes) Gameplay Classes ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252Foz7muYSYyJaLY8yS5FBZ%252FScreenshot%25202024-04-14%2520at%25209.15.57%2520PM.png%3Falt%3Dmedia%26token%3Df28b9bb8-d3a5-44d6-a87a-24f2988c4d07&width=768&dpr=4&quality=100&sign=ecacce21&sv=2) * PlayerController exists only on local machine and server, not the "other" clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#game-mode) Game Mode ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FO2fMeYedorr0s503Ven3%252FScreenshot%25202024-04-14%2520at%25209.18.09%2520PM.png%3Falt%3Dmedia%26token%3Dd4f83027-ff7c-4cb7-969e-e53b204adfe9&width=768&dpr=4&quality=100&sign=8e92f224&sv=2) * GameMode exists only on server, never on clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#pawn-class) Pawn Class ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FjGK9RgCtpWhKFa9n17rr%252FScreenshot%25202024-04-14%2520at%25209.19.32%2520PM.png%3Falt%3Dmedia%26token%3D68073b6d-5ba7-4187-8c5a-fbbf64808351&width=768&dpr=4&quality=100&sign=f69a039d&sv=2) * Copied between all servers and clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#multicast-vs-repnotify) Multicast vs RepNotify * **Multicast** \- Use Multicast for transient events, something that happens in the moment but doesn't change the ongoing state * Ex: Barrel Explosion * **RepNotify** - Use RepNotify for state changes * Ex: Boolean variable for whether the player is alive * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#blueprint-nodes) Blueprint Nodes * Is Local Controller * Is Player Controller * Has Authority * Set life Span * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#code) Code * `SetIsReplicatedByDefault()` - used in components to turn on replication * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#notes) Notes * Everything goes from server-to-client except for when you have Server RPCs * Collision queries runs on both client and server, it isn't owned by anyone * Multicast: When marked as unreliable it considers relevancy * Multicast: When marked as reliable it ignores relevancy * You can set the life span, hide the object, then trigger the vfx to go off * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2#links) Links * [Replicated Sub Objects](https://dev.epicgames.com/documentation/en-us/unreal-engine/replicated-subobjects-in-unreal-engine) [PreviousLecture 19: Multiplayer 1 Network Replication](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication) [NextLecture 21: Multiplayer 3](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-21-multiplayer-3) Last updated 1 year ago --- # Lecture 19: Multiplayer 1 Network Replication | Unreal Engine 5 - Notes * **What is Replication?** In Unreal Engine, Replication is the name for the process of synchronizing data and procedure calls between clients and servers * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#client-server-model) Client Server Model ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FE1HpMJ1zbZqqGea0Jr8y%252FScreenshot%25202024-04-14%2520at%25208.21.37%2520PM.png%3Falt%3Dmedia%26token%3Defa56c90-bbe9-4d44-917a-f6ea533d3024&width=768&dpr=4&quality=100&sign=98984815&sv=2) * Data is sent between the client and server, but never directly from client to client * It is a server authoritative model * **Server:** The server is responsible for the game state (i.e. updating health, spawning actors, running AI behavior, etc...) * **Client:** The client receives data (via packets) from the server and updates their state accordingly * Clients do not decide the game state. Clients only simulate based on what they are being told by the server * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#actor-replication) Actor Replication Actors are updated in two ways: 1. Property Updates- Automatically send updated variables from server to clients 2. RPCs (Remote Procedure Calls)- Execute functions on the other machine Examples: * Player is damaged, reducing its health. New health value will now be updated for all clients to keep the game state synchronized * Player presses left mouse button (primary attack), we send an RPC from this client to the server which will execute the attack logic * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#property-replication) Property Replication ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FqvUwc9KGWDBg6xJAhgiQ%252FScreenshot%25202024-04-14%2520at%25208.31.12%2520PM.png%3Falt%3Dmedia%26token%3Ddba99152-0d18-4b1e-98ac-2d95aca73730&width=768&dpr=4&quality=100&sign=91d1f07d&sv=2) * Variables are synced from server to client * _Note: NOT Client to server_ * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#types-of-rpc) Types of RPC * Server * Client * Net Multicast * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#rpc-server) RPC: Server ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FT1TTBAmOKYeoFBuUVpxS%252FScreenshot%25202024-04-14%2520at%25208.33.19%2520PM.png%3Falt%3Dmedia%26token%3D5f4dd04e-d44d-418c-be84-e6bd4c27947c&width=768&dpr=4&quality=100&sign=92dad76d&sv=2) * When called from the client, requests the server to execute the function * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#rpc-client) RPC: Client ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252F9i4dqTWniJd7NUaNu0zL%252FScreenshot%25202024-04-14%2520at%25208.34.53%2520PM.png%3Falt%3Dmedia%26token%3Df04cb80d-e4be-4815-99db-dd98c4601276&width=768&dpr=4&quality=100&sign=5e686652&sv=2) * Called by server to run on a specific client * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#rpc-net-multicast) RPC: Net Multicast ![](https://mchambers.gitbook.io/unreal-engine-5-notes/~gitbook/image?url=https%3A%2F%2F936356230-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxaZ8XpHqqYqt0G9sd4P7%252Fuploads%252FTDFbokrK2yLDAk0ATnV2%252FScreenshot%25202024-04-14%2520at%25208.35.43%2520PM.png%3Falt%3Dmedia%26token%3Deb313325-6481-4acd-be3a-37f1d7d72b3e&width=768&dpr=4&quality=100&sign=1bbcf68&sv=2) * Called by server to run a function on all clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#early-challenges) Early Challenges * **Where is my code being executed?** * Add a ton of logs with "client" and "server" strings * **Where should my code be executed?** * Changing game state? Execute on server * Cosmetic? Execute on clients * Often mixed to predict game state and reduce latency (lag) for clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#steps-to-implement-multiplayer) Steps to Implement Multiplayer * Play game and observe the game state differences between client and server * _Note: Eventually you'll be proficient enough to design for this ahead of time_ * Mark an actor or component as "replicated" * Mark variables we need to synchronize as "replicated" * Add RPCs to route our code to server and/or to clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#code) Code * (TCP) `Reliable` - Will always arrive, eventually. Request will be re-sent unless an acknowledgement is received * (UDP) `Unreliable` - Not guaranteed. Packet can get lost and won't retry * `Replicated` * `bReplicates` * `TArray<>` * (RepNotify) `ReplicatedUsing` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#notes) Notes * When using ReplicatedUsing (RepNotify) in C++, you have to call the OnRep function for the server * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-19-multiplayer-1-network-replication#links) Links * [Networking & Multiplayer (Documentation Main Page)](https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-and-multiplayer-in-unreal-engine) * [Actor Replication](https://dev.epicgames.com/documentation/en-us/unreal-engine/networking-overview-for-unreal-engine) * [Property Replication](https://dev.epicgames.com/documentation/en-us/unreal-engine/replicate-actor-properties-in-unreal-engine) * [RPCs](https://dev.epicgames.com/documentation/en-us/unreal-engine/remote-procedure-calls-in-unreal-engine) [PreviousLecture 17:](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-17) [NextLecture 20: Multiplayer 2](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++/tomlooman.com-professional-game-development-in-c++-and-unreal-engine/lecture-20-multiplayer-2) Last updated 1 year ago --- # Section 2: Multiplayer Fundamentals | Unreal Engine 5 - Notes ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#code) Code * `GetWorld()` * `GetWorld()->ServerTravel()` * `GetWorld()->SpawnActor<>()` * `GetGameInstance()` * `GetGameInstance()->GetFirstLocalPlayerController()` * `APlayerController` * `APlayerController::ClientTravel()` * `GetLifetimeReplicatedProps()` * `DOREPLIFETIME()` * `#include "Net/UnrealNetwork.h` * `bReplicates` * `SetReplicates()` * `SetReplicateMovement()` * `UPROPERTY(Replicated)` * `UPROPERTY(ReplicatedUsing = )` * `GPlayInEditorID` * `FString::Printf()` * `GEngine` * `GEngine->AddOnScreenDebugMessage()` * `EComponentMobility` * `IsRunningDedicatedServer()` * `EPSCPoolMethod` * `FActorSpawnParameters` * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#blueprint-nodes) Blueprint Nodes * Print String * Quit Game * Host LANGame * Join LANGame * Cast * Has Authority * Make Literal Text * Make Literal String * Random Integer * Is Locally Controlled * For Each Loop * Branch * Get All Actors Of Class * Get Display Name * Append * Get Overlapping Actors * Delay * Do Once * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#multiplayer-and-networking) Multiplayer and Networking * **Single Player -** In a single player game, there is only a single instance of the game running on a single machine * **Multiplayer -** In a multiplayer game, multiple instances of the same game are running at the same time * These can be different processes on the same machine * Different computers on the same local network (LAN) * Or players in different areas playing over the internet * All the different instances of the game need to communicate with each other, and build a consistent game world * Connected machines need to share information with each other in order to have a consistent game world * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#unreal-engine-networking) Unreal Engine Networking * Unreal implements the client-server-model * All clients connect to a server, and the server has the canonical and authoritative version of the game world * When something changes on the server, those changes will be sent to the client. This process is called **replication** * Each time a client wants to make a change they need to send a request to the server, and the server decides if the client is allowed to make the change or not * If YES, then the server can allow the change and replicate it across clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#replication) Replication * Unreal's replication system is integrated in a way that abstracts the difficult parts of network programming * You can easily develop a game without having to do all the cumbersome networking work like sending and receiving packets, managing connections, etc... * You can simply set a property to be replicated and Unreal will take care of the rest * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#netmode) NetMode * **Network Mode -** Describes a computers relationship to a network multiplayer session * i.e. is it the server, client, or single player game? * An instance of a game can take on any of the following network modes: * NM\_Standalone * NM\_DedicatedServer * NM\_ListenServer * NM\_Client * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#nm_standalone) NM\_Standalone * The game is running as a server, that does not accept connections from remote clients * Any players participating in the game are strictly local players * This mode is used for single player and local multiplayer games * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#nm_client) NM\_Client * The game is running as a client, that is connected to a server in a network multiplayer session * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#nm_listenserver) NM\_ListenServer * The game is running as a server hosting a network multiplayer session * It accepts connections from remote clients and has local players directly on the server * This mode is often used for casual cooperative games * Listen Servers are easy for users to setup spontaneously since any user with a copy of the game can both start a listen server and play on the same computer * However, because the player, who is hosting a listen server, is playing on the server directly, they have an advantage over other players. that must use a network connection to play * These factors make listen servers less suitable for games in highly competitive settings but makes them ideal for more casual multiplayer games * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#nm_dedicatedserver) NM\_DedicatedServer * The game is running as a server hosting a network multiplayer session * It accepts connections from remote clients, but has no local players, so it discards graphics, sound, input, and other player oriented features in order to run more efficiently * This mode is often used for games requiring more persistent, secure, or large scale multiplayer * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#netmode-1) NetMode Playable Has Authority Clients Can Join NM\_Standalone X x NM\_ListenServer X X X NM\_DedicatedServer X X NM\_Client X * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#replication-basics) Replication Basics * Once a multiplayer game is running, Unreal's **replication system** starts working behind the scenes to make sure all the different instances of the game are in sync * Each system builds their own version of the shared game world. So the replication system makes sure all of them agree on what is happening in that world * The server holds a list of connections for each connected client * A **channel** is used to send data to the clients * An **actor channel** is created for each actor that is set to be replicated * This means that replication happens on the level of actors * If you need an actor to stay in sync over the network you need to configure that actor to be replicated * By default, most actors do not have replication enabled and will perform all of their functions locally #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#how-can-you-enable-replication-for-an-actor) How can you enable replication for an actor? * **C++:** You can enable replication for an actor by setting the `bReplicates` variable in C++ to true * **Blueprints:** Set the replicates setting of an actor blueprint to true * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#actor-replication) Actor Replication * The following are common replication features Unreal offers: * **Creation and Destruction** * i.e. actors being spawned and destroyed * **Movement Replication** * i.e. location of actors * **Variable Replication** * **Remote Procedure Calls (RPCs)** * etc... * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#creation-and-destruction) Creation & Destruction * When a replicated actor is spawned on the server, it automatically generates remote proxies of itself on all connected clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#movement-replication) Movement Replication * If an authoritative actor has replicate movement enabled, or `bReplicateMovement` is set to true in C++, it will automatically replicate its Location, Rotation, and Velocity * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#variable-replication) Variable Replication * Any variables that are designated as being replicated will automatically replicate from the authoritative actor to its remote proxies whenever their values change * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#remote-procedure-calls-rpcs) Remote Procedure Calls (RPCs) * RPCs are special functions that are transmitted to specific machines in a network game * No matter what machine an RPC is initially called on, its implementation will run only on the machine it is intended for #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#there-are-3-types-of-rpcs) There are 3 types of RPCs: * **Server** - only runs on the server * **Client** - only runs on the actors owning client * **NetMultiCast** - runs on every machine connected to the session, including the server * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#network-role-and-authority) Network Role & Authority * An actor's network role determines whose machine has control over the actor during a network game * An authoritative is considered to have control over that actor's state, and will replicate information to other machines within the network multiplayer session * In Unreal the server always has authority over the game state, and information will always replicate from the server to clients * A remote proxy is a copy of that actor on a remote machine, and it receives replicated information from the authoritative actor * For the most part we only care about whether we have authority or not #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#aactor-getlocalrole) AActor::GetLocalRole * We can learn the local role of an actor by calling `AActor::GetLocalRole()` function * The return type can take the following values: * ROLE\_None * ROLE\_Authority * ROLE\_SimulatedProxy * _For actors controlled by the authoritative actor_ * ROLE\_AutonomousProxy * _For actors controlled by the player_ * We can check `GetLocalRole() == ROLE_Authority`, to see if the local machine has authority over the actor * The function `AActor::HasAuthority()` is a shorthand way of doing the check * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#repnotifies) RepNotifies * You can designate a RepNotify function, that will be called in response to an actor successfully receiving replicating information for specific variables * RepNotifies only trigger locally, when a variable is updated, making them a low overhead way to trigger gameplay logic in response to variable changes on an authoritative actor * **Blueprint -** Automatically calls the OnRep function for both the server and the client * **C++ -** Only automatically calls the OnRep function for the client * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#rpcs) RPCs * Remote Procedure Calls (RPCs) are also referred to as replicated functions. They can be called from any machine, but will direct their implementation to happen on a specific machine that is connected to the network session * Three types of RPCs available: * **Server:** Called on the client, but executed on the server * **Client:** Called on the server, but executed on the client * **NetMultiCast:** Called from the server, and then executed on the server as well as all currently connected clients * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#rpc-syntax) RPC Syntax * You can designate a function in C++ as being an RPC by providing either the `Server`, `Client`, or `NetMultiCast` specifier in its `UFUNCTION` macro. Their implementations use the suffix **\_Implementation** in their code implementations * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#rpc-reliability) RPC Reliability * You must designate RPCs as being reliable or unreliable. Unreliable RPCs are not guaranteed to arrive at their destination. Use the `Reliable` keyword to make sure the call is executed on the other machine #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#reliable-rpcs) Reliable RPCs * Reliable = TCP * If the task is critical, then use reliable RPCs #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#unreliable-rpcs) Unreliable RPCs * Unreliable = UDP * Ex: Player Movement uses Unreliable RPCs * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#small-warning-for-reliable-rpcs) Small Warning for Reliable RPCs * Don't over use Reliable RPCs, limit their use or you might run into problems like overflowing the network queue * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#server-rpcs) Server RPCs * Called from the client, executed on the server * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#rpc-validation) RPC Validation * You can validate any function arguments for RPCs * You have to add the `WithValidation` UFUNCTION() specifier and implement the validate function in the .cpp file * The validation function will be executed before the RPC function * If a client passes invalid data to the validate RPC function, then the client will be kicked from the game * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#multicast-rpcs) Multicast RPCs * Multicast RPCs are designed to be called from the server, and then executed on the server as well as all currently connected clients * To declare a multicast function, you simply use the NetMulticast keyword * Multicast RPCs can also be called from clients but will only execute locally in this case * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#ownership) Ownership * Ownership is an important concept for actor replication * Every actor can have another actor designated as its owner * You can set the owner at spawn or by calling SetOwner at runtime * The APlayerController class has special importance when it comes to ownership * Each connected client has a player controller associated with it * The client connection owns the player controller * By extension the client connection owns any actors that can trace their ownership back to the PlayerController * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#rpcs-and-ownership) RPCs and Ownership * Ownership status is important for RPCs as well * If RPC is being called from server to be executed on a client, only the client who actually owns that actor will execute the function * If the RPC is being called from client to be executed on the server, the client must own the actor that the RPC is being called on. Otherwise, the RPC is dropped * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#client-rpcs) Client RPCs * Called from an actor on the server * Executed on the client that owns the actor * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#final-tips) Final Tips * Use RPCs sparingly, try to use RepNotify as much as you can * _Note: RPCs can create a lot of extra traffic on the network_ * Multicast RPCs in particular will create a lot of network traffic if you abuse them * If you are calling an RPC very often you should make it Unreliable/(UDP) * _Note: Reliable RPCs if you use them often can overflow the network and cause problems_ * Avoid calling meaningless RPCs: * Client RPC called on the Client * Client RPC called on server on server-owned/unowned actor * Server RPC called on the server * Multicast RPC called on the client #### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#some-good-principles-to-remember) Some good principles to remember: * Use replicated properties for replicating stateful events * Use Multicast/Client RPCs for replicating transient (not stateful) or cosmetic in nature events * Use Server RPCs to make the client communicate with the server (basically it's the only way), and almost always validate its data * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#notes) Notes * Networking is tightly integrated into Unreal Engine * Sometimes packaging a game doesn't work, so you need to delete some folders and retry * If using C++ and replicating variables, then you must override the function `GetLifetimeReplicatedProps()` * Sometimes setting `bReplicates` in the constructor doesn't work, so you can try setting it in `BeginPlay()` * It's a good idea to prefix the RPC function name with either "Server" or "Client" * `#if 0 #endif` - can be used to enable or disable code. You can just replace the "0" with a "1" to enable * * * ### [](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-2-multiplayer-fundamentals#links) Links * (Documentation) [Replicate Actor Properties](https://dev.epicgames.com/documentation/en-us/unreal-engine/replicate-actor-properties-in-unreal-engine) * (Documentation) [Remote Procedure Calls](https://dev.epicgames.com/documentation/en-us/unreal-engine/remote-procedure-calls-in-unreal-engine?application_version=5.3) * (Article) [Differences between TCP and UDP](https://www.geeksforgeeks.org/differences-between-tcp-and-udp/) * (Article) [Understanding TCP and UDP: Building Blocks of Connectivity](https://medium.com/@abhirup.acharya009/understanding-tcp-and-udp-building-blocks-of-connectivity-ec96e208b852) [Previous(Udemy) Unreal Engine 5 C++ Multiplayer: Make An OnlineCo-Op Game by GameDev.TV](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv) [NextSection 3: Online Subsystem](https://mchambers.gitbook.io/unreal-engine-5-notes/course-notes/unreal-engine-c++-multiplayer-networking/udemy-unreal-engine-5-c++-multiplayer-make-an-onlineco-op-game-by-gamedev.tv/section-3-online-subsystem) Last updated 1 year ago ---