<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Unreal Engine on Maceage's Blog</title><link>https://blog.maceage.com/categories/unreal-engine/</link><description>Recent content in Unreal Engine on Maceage's Blog</description><generator>Hugo</generator><language>en-au</language><copyright>© Graham Mace</copyright><lastBuildDate>Sun, 07 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.maceage.com/categories/unreal-engine/index.xml" rel="self" type="application/rss+xml"/><item><title>Completing My Unreal Engine Course</title><link>https://blog.maceage.com/posts/2025/completing-my-unreal-engine-course/</link><pubDate>Sun, 07 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/completing-my-unreal-engine-course/</guid><description>&lt;p&gt;After what feels like an eternity, I have finally reached the end of my &lt;a href="https://www.cgspectrum.com/courses/game-programming-foundations" target="_blank"&gt;Game Programming Foundations&lt;/a&gt; course that I &lt;a href="https://blog.maceage.com/posts/2025/learning-unreal-engine/"&gt;started back in March&lt;/a&gt;!&lt;/p&gt;&#10;&lt;p&gt;I can honestly say it has been an absolutely incredible journey, and I&amp;rsquo;ve met some amazing people along the way.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://www.credential.net/965dcf9f-7576-4fec-828c-ba3cc7cfb077" target="_blank"&gt;&lt;img src="certificate.png#center" alt="Game Programming Foundations certificate" loading="lazy"&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="the-journey"&gt;The Journey&lt;/h2&gt;&#10;&lt;p&gt;When I first started, I was nervous about the course and unsure if I would be able to keep up. Those nerves turned out to be unfounded – but it certainly wasn&amp;rsquo;t all smooth sailing.&lt;/p&gt;</description></item><item><title>Unreal Engine: Miscellaneous</title><link>https://blog.maceage.com/posts/2025/unreal-engine-miscellaneous/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-miscellaneous/</guid><description>&lt;p&gt;After learning all about &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-18-testing-and-profiling/"&gt;testing and profiling&lt;/a&gt;, the final week of my &lt;a href="https://www.cgspectrum.com/courses/game-programming-foundations" target="_blank"&gt;&lt;strong&gt;Game Programming Foundations&lt;/strong&gt; course&lt;/a&gt; was a capstone - exploring various aspects of Unreal Engine development that hadn&amp;rsquo;t been covered in earlier lessons, or needed consolidation: the &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/environment-query-system-in-unreal-engine" target="_blank"&gt;Environment Query System (EQS)&lt;/a&gt;, &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/data-driven-gameplay-elements-in-unreal-engine" target="_blank"&gt;Data Tables&lt;/a&gt; (again), &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/networking-and-multiplayer-in-unreal-engine" target="_blank"&gt;Networking and Multiplayer&lt;/a&gt;, and &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/online-subsystems-and-services-in-unreal-engine" target="_blank"&gt;Online Subsystems and Services&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Notes below – and fair warning, this is the longest and most fragmented of the series.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="setting-up-tantrumn"&gt;Setting Up Tantrumn&lt;/h2&gt;&#10;&lt;p&gt;The course started with a practical project: building from the &lt;a href="https://github.com/sawnoff-studios/tantrumn-source" target="_blank"&gt;&lt;strong&gt;Tantrumn&lt;/strong&gt; source&lt;/a&gt; (Unreal&amp;rsquo;s third-person reference character).&lt;/p&gt;</description></item><item><title>Unreal Engine: Testing and Profiling</title><link>https://blog.maceage.com/posts/2025/unreal-engine-18-testing-and-profiling/</link><pubDate>Wed, 29 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-18-testing-and-profiling/</guid><description>&lt;p&gt;After last week&amp;rsquo;s &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-17-state-machines/"&gt;state machines&lt;/a&gt;, this week was about &lt;strong&gt;testing and profiling&lt;/strong&gt;: the [Automation Test Framework]https://dev.epicgames.com/documentation/unreal-engine/automation-test-framework-in-unreal-engine, &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/low-level-tests-in-unreal-engine" target="_blank"&gt;functional and unit testing&lt;/a&gt;, and &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/introduction-to-performance-profiling-and-configuration-in-unreal-engine" target="_blank"&gt;performance analysis&lt;/a&gt; with Unreal Insights – the discipline that keeps everything built so far from quietly rotting.&lt;/p&gt;&#10;&lt;p&gt;Notes below.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="automated-testing"&gt;Automated Testing&lt;/h2&gt;&#10;&lt;p&gt;The starting questions: what can go wrong, and what do you test to build your test cases?&lt;/p&gt;&#10;&lt;p&gt;The motivating example from the course: a third-person stealth game whose &lt;strong&gt;core feature is AI perception&lt;/strong&gt;. You want to guarantee AI sight always works. But with a large world and many levels containing spawners, testing a change by playing through the entire game is tedious – so you set up tests to make sure the major feature isn&amp;rsquo;t broken.&lt;/p&gt;</description></item><item><title>Unreal Engine: State Machines</title><link>https://blog.maceage.com/posts/2025/unreal-engine-17-state-machines/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-17-state-machines/</guid><description>&lt;p&gt;This week followed on from the &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-16-introduction-to-ai/"&gt;AI fundamentals&lt;/a&gt; and dove into &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/state-machines-in-unreal-engine" target="_blank"&gt;&lt;strong&gt;state machines&lt;/strong&gt;&lt;/a&gt; – the design pattern that gives AI behaviour its structure .&lt;/p&gt;&#10;&lt;p&gt;For future reference, the example project for this week&amp;rsquo;s content was committed and uploaded here:&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/sawnoff-studios/state-machine-demo" target="_blank"&gt;sawnoff-studios/state-machine-demo&lt;/a&gt;&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="introduction-to-state-machines"&gt;Introduction to State Machines&lt;/h2&gt;&#10;&lt;p&gt;A state machine is a design pattern that allows an object to change behaviour based on its internal state: distinct behaviours (states) with explicit rules for switching between them.&lt;/p&gt;</description></item><item><title>Unreal Engine: Introduction to AI</title><link>https://blog.maceage.com/posts/2025/unreal-engine-16-introduction-to-ai/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-16-introduction-to-ai/</guid><description>&lt;p&gt;After last week&amp;rsquo;s deeper dive into &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-15-game-effects/"&gt;game effects&lt;/a&gt;, this week was &lt;strong&gt;AI fundamentals&lt;/strong&gt;: &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/artificial-intelligence-in-unreal-engine" target="_blank"&gt;AI Characters&lt;/a&gt;, &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/ai-controllers-in-unreal-engine" target="_blank"&gt;AI Controllers&lt;/a&gt;, and the &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/navigation-system-in-unreal-engine" target="_blank"&gt;Navigation System&lt;/a&gt; (&lt;a href="https://dev.epicgames.com/documentation/unreal-engine/modifying-the-navigation-mesh-in-unreal-engine" target="_blank"&gt;NavMesh&lt;/a&gt;) – the three pillars of making entities that can think, move, and collide.&lt;/p&gt;&#10;&lt;p&gt;Rather than re-invent the wheel, I took advantage of the existing codebases and examples from the course and uploaded them to the following repositories for future reference:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/sawnoff-studios/nav-mesh-demo" target="_blank"&gt;sawnoff-studios/nav-mesh-demo&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/sawnoff-studios/avoidance-demo" target="_blank"&gt;sawnoff-studios/avoidance-demo&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Notes below.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="the-key-elements-of-ai"&gt;The Key Elements of AI&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;AI Character&lt;/strong&gt; – the entity in the game world. Humanoids typically derive from the &lt;strong&gt;Character&lt;/strong&gt; class (getting movement, health, collision); non-humanoids (drones, tanks) from &lt;strong&gt;Pawn&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AI Controller&lt;/strong&gt; – the &amp;ldquo;brain&amp;rdquo; for AI actors (move, attack). Distinct from the AI Character and exists separately – the same controller/pawn split the player side has had since the controllers week&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Navigation System (NavMesh)&lt;/strong&gt; – AI characters rely on the NavMesh to understand traversable space and calculate paths from A to B&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="what-the-split-buys-you"&gt;What the split buys you&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Delegation of tasks:&lt;/strong&gt; the controller issues commands (move to this location), the character executes them&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Separation of awareness:&lt;/strong&gt; the character physically exists in the world; the controller handles high-level decision-making&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Classic example:&lt;/strong&gt; an AI guard patrols an area → the guard &amp;ldquo;sees&amp;rdquo; the player → the controller abandons patrolling and chases&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="adding-the-navmesh"&gt;Adding the NavMesh&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Place a &lt;strong&gt;NavMeshBoundsVolume&lt;/strong&gt; (Volumes section) to designate the nav mesh area - the volume acts as a container for the NavMesh&lt;/li&gt;&#10;&lt;li&gt;Paths are built automatically from the geometry inside the volume; green areas are walkable surfaces&lt;/li&gt;&#10;&lt;li&gt;Walls, stairs, and uneven terrain are all taken into account&lt;/li&gt;&#10;&lt;li&gt;View it by pressing &lt;strong&gt;P&lt;/strong&gt;, or the &lt;code&gt;Show Navigation&lt;/code&gt; console command&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="view-modes-and-debugging"&gt;View modes and debugging&lt;/h3&gt;&#10;&lt;p&gt;A &lt;strong&gt;RecastNavMesh&lt;/strong&gt; actor is created automatically when the NavMesh is added – this does the actual generation work. Useful view modes on it:&lt;/p&gt;</description></item><item><title>Unreal Engine: Game Effects</title><link>https://blog.maceage.com/posts/2025/unreal-engine-15-game-effects/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-15-game-effects/</guid><description>&lt;p&gt;After covering the complex but incredibly powerful &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-14-gameplay-ability-system/"&gt;Gameplay Ability System&lt;/a&gt; last week, this week &lt;strong&gt;revisited&lt;/strong&gt; game effects – a deeper look at &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/creating-visual-effects-in-niagara-for-unreal-engine" target="_blank"&gt;Niagara Systems&lt;/a&gt;, &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/getting-started-in-niagara-effects-for-unreal-engine" target="_blank"&gt;Niagara Emitters&lt;/a&gt;, &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/working-with-audio-in-unreal-engine?lang=en-US" target="_blank"&gt;Sound Effects&lt;/a&gt;, and &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/metasounds-in-unreal-engine?lang=en-US" target="_blank"&gt;MetaSounds&lt;/a&gt;.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="niagara-vfx"&gt;Niagara VFX&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Niagara VFX&lt;/strong&gt; is the primary tool for particle effects in modern Unreal, using both CPU and GPU resources. C++ manages graphics libraries, threads, and system resources, while procedures and tasks are grouped in &lt;strong&gt;Niagara Emitters&lt;/strong&gt;. Each &lt;strong&gt;Niagara System&lt;/strong&gt; can run and manage multiple Niagara Emitters.&lt;/p&gt;</description></item><item><title>Unreal Engine: Gameplay Ability System</title><link>https://blog.maceage.com/posts/2025/unreal-engine-14-gameplay-ability-system/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-14-gameplay-ability-system/</guid><description>&lt;p&gt;Last week was &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-13-inventory-systems/"&gt;inventory systems&lt;/a&gt;; this week, the &lt;strong&gt;Gameplay Ability System (GAS)&lt;/strong&gt; – the framework that gives designers and artists a way to compose abilities, effects, and attributes without writing bespoke code for every interaction.&lt;/p&gt;&#10;&lt;p&gt;GAS is famously one of the more complex systems in Unreal – the course eased into it with a well-known example: the &lt;strong&gt;Half-Life gravity gun&lt;/strong&gt;. The gun has the &lt;em&gt;ability&lt;/em&gt; to lift; the wooden crate has the &lt;em&gt;ability&lt;/em&gt; to be lifted – a target→source relationship.&lt;/p&gt;</description></item><item><title>Unreal Engine: Inventory Systems</title><link>https://blog.maceage.com/posts/2025/unreal-engine-13-inventory-systems/</link><pubDate>Wed, 24 Sep 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-13-inventory-systems/</guid><description>&lt;p&gt;Following on from &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-12-character-movement/"&gt;last week&amp;rsquo;s deep dive into character movement&lt;/a&gt;, this week was &lt;strong&gt;inventory systems&lt;/strong&gt; and their implementation in Unreal Engine.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ll be honest: I didn&amp;rsquo;t think it was worth the time creating a dedicated repository for this week&amp;rsquo;s work, since the exercise was more about interface patterns than persistent gameplay code.&lt;/p&gt;&#10;&lt;p&gt;Notes below – and like the mathematics week, much of this content draws more heavily than usual from the course material itself.&lt;/p&gt;</description></item><item><title>Unreal Engine Design Patterns</title><link>https://blog.maceage.com/posts/2025/unreal-engine-design-patterns/</link><pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-design-patterns/</guid><description>&lt;p&gt;&lt;em&gt;This post isn&amp;rsquo;t from the &lt;a href="https://www.cgspectrum.com/courses/game-programming-foundations" target="_blank"&gt;Game Programming Foundations&lt;/a&gt; course itself, but from my own reading alongside it – notes taken while reading &lt;a href="https://www.amazon.com.au/dp/B0B7FLQSF2" target="_blank"&gt;Game Development Patterns with Unreal Engine 5 – Stuart Butler &amp;amp; Tom Oliver&lt;/a&gt;, a tour of design patterns as they apply specifically to Unreal Engine.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://www.amazon.com.au/dp/B0B7FLQSF2" target="_blank"&gt;&lt;img src="game-development-patterns-book.jpg#center" alt="Game Development Patterns with Unreal Engine 5 – Stuart Butler &amp;amp; Tom Oliver" loading="lazy"&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="anti-pattern-problems-and-their-solutions"&gt;Anti-Pattern Problems (and Their Solutions)&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;The Moving Box Problem&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Naive&lt;/strong&gt;: check every tick whether the box has arrived at its location&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Better&lt;/strong&gt;: a &lt;strong&gt;Timeline lerping between two locations&lt;/strong&gt; – more performant, no per-tick comparison needed&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;The Rotating Box Problem&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Unreal Engine: Character Movement</title><link>https://blog.maceage.com/posts/2025/unreal-engine-12-character-movement/</link><pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-12-character-movement/</guid><description>&lt;p&gt;With last week&amp;rsquo;s &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-11-visual-and-audio-effects/"&gt;visual and audio effects&lt;/a&gt; wrapped up, this week was all about how players actually &lt;em&gt;move&lt;/em&gt;: the &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/character-movement-component?application_version=4.27" target="_blank"&gt;&lt;strong&gt;Character Movement Component (CMC)&lt;/strong&gt;&lt;/a&gt; – the machinery that&amp;rsquo;s been quietly doing all my movement work since week two – and the &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/mover-in-unreal-engine" target="_blank"&gt;&lt;strong&gt;Mover Plugin&lt;/strong&gt;&lt;/a&gt;, the experimental system slated to eventually replace it.&lt;/p&gt;&#10;&lt;p&gt;There&amp;rsquo;s also a link to a repository demonstrating the practical half of the week: implementing &lt;strong&gt;wall-running&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;Commits for this week:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Character animation demo repository: &lt;a href="https://github.com/sawnoff-studios/character-animation-demo" target="_blank"&gt;sawnoff-studios/character-animation-demo&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Wall-running demo: &lt;a href="https://github.com/sawnoff-studios/wall-running-character-demo" target="_blank"&gt;sawnoff-studios/wall-running-character-demo&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Notes below – with the caveat that much of this week&amp;rsquo;s content is drawn more heavily than usual from the course material itself.&lt;/p&gt;</description></item><item><title>Unreal Engine: Visual and Audio Effects</title><link>https://blog.maceage.com/posts/2025/unreal-engine-11-visual-and-audio-effects/</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-11-visual-and-audio-effects/</guid><description>&lt;p&gt;While last week covered &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-10-animation-and-montages/"&gt;animation and animation montages&lt;/a&gt;, this week was &lt;strong&gt;juice&lt;/strong&gt;: the legacy &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/cascade-particle-systems?application_version=4.27" target="_blank"&gt;Cascade particle system&lt;/a&gt; and its successor &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/overview-of-niagara-effects-for-unreal-engine" target="_blank"&gt;Niagara&lt;/a&gt;, sounds, sound cues and &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/metasounds-in-unreal-engine" target="_blank"&gt;MetaSounds&lt;/a&gt;, camera shake, post-process effects, and force feedback.&lt;/p&gt;&#10;&lt;p&gt;Updates were committed to &lt;a href="https://github.com/sawnoff-studios/niagara-system-demo" target="_blank"&gt;sawnoff-studios/niagara-system-demo&lt;/a&gt; as I followed along – notes below.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="cascade-legacy-particle-system"&gt;Cascade (Legacy Particle System)&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Add via the Add button → Add Feature or Content Pack → Miscellaneous → &lt;strong&gt;Cascade Particle System (Legacy)&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;Open a particle effect and enable/disable modules via checkboxes&lt;/li&gt;&#10;&lt;li&gt;Worth learning a little anyway: concepts carry across to Niagara&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="cascade-to-niagara-converter"&gt;Cascade to Niagara Converter&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The plugin can convert Cascade systems, but results are generally error-prone&lt;/li&gt;&#10;&lt;li&gt;Warnings on opening (e.g. scale being off); it can attempt to automatically fix issues&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="niagara-emitters"&gt;Niagara Emitters&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Emitters are like blueprint nodes – &lt;strong&gt;modular, reusable components&lt;/strong&gt; – and unlike Cascade, you can access them individually&lt;/li&gt;&#10;&lt;li&gt;Create an Emitter and pick a template to start from&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Selecting and configuring properties:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Unreal Engine: Animation and Montages</title><link>https://blog.maceage.com/posts/2025/unreal-engine-10-animation-and-montages/</link><pubDate>Wed, 06 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-10-animation-and-montages/</guid><description>&lt;p&gt;&lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-09-user-interface/"&gt;Last week was UI&lt;/a&gt;; this week, &lt;strong&gt;animation&lt;/strong&gt; – and it&amp;rsquo;s a big one: input controls, skeletal meshes, animation graphs, jumping, blend spaces, montages, sockets, notifies, aim offsets, and finally shooting.&lt;/p&gt;&#10;&lt;p&gt;This was the first week when everything from the series so far converges into something that actually resembles a game.&lt;/p&gt;&#10;&lt;p&gt;Heads up for anyone following the links: this week a &lt;strong&gt;new repository&lt;/strong&gt; was started for the second project, since the course moved on from the first:&lt;/p&gt;</description></item><item><title>Unreal Engine: User Interface</title><link>https://blog.maceage.com/posts/2025/unreal-engine-09-user-interface/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-09-user-interface/</guid><description>&lt;p&gt;&lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-07-collision-detection/"&gt;Last week was collision&lt;/a&gt;; this week, User Interfaces – covering both the legacy &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/slate-user-interface-programming-framework-for-unreal-engine" target="_blank"&gt;&lt;strong&gt;Slate&lt;/strong&gt; framework&lt;/a&gt; and the newer &lt;a href="https://dev.epicgames.com/documentation/unreal-engine/building-your-ui-in-unreal-engine" target="_blank"&gt;&lt;strong&gt;UMG&lt;/strong&gt; (Unreal Motion Graphics) system&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Given my prior experience with &lt;a href="https://learn.microsoft.com/en-us/dotnet/desktop/winforms/overview/" target="_blank"&gt;Windows Forms&lt;/a&gt; and &lt;a href="https://learn.microsoft.com/en-us/dotnet/desktop/wpf/overview/" target="_blank"&gt;WPF&lt;/a&gt; in the .NET world, there wasn&amp;rsquo;t a huge amount of genuinely new learning here. Most of it was mapping familiar concepts onto Unreal&amp;rsquo;s equivalents – so this post is shorter and sparser than usual, and mostly serves as a reference to myself of where things live.&lt;/p&gt;</description></item><item><title>Unreal Engine: Collision Detection</title><link>https://blog.maceage.com/posts/2025/unreal-engine-07-collision-detection/</link><pubDate>Wed, 23 Jul 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-07-collision-detection/</guid><description>&lt;p&gt;Last week was all about &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-06-communication/"&gt;how objects communicate&lt;/a&gt;; this week, quite possibly the most important topic in game development: &lt;strong&gt;collision&lt;/strong&gt;. Types, custom channels, visualising, debugging, and detection.&lt;/p&gt;&#10;&lt;p&gt;As ever, my changes were committed to the repository as I followed along, with my notes below.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/sawnoff-studios/first-project" target="_blank"&gt;sawnoff-studios/first-project&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="collision-types"&gt;Collision Types&lt;/h2&gt;&#10;&lt;p&gt;Every component&amp;rsquo;s &lt;strong&gt;Collision Preset&lt;/strong&gt; (Details panel, right side) determines how it interacts with everything else. Conceptually it&amp;rsquo;s like a &lt;strong&gt;Venn diagram&lt;/strong&gt; of three responses:&lt;/p&gt;</description></item><item><title>Unreal Engine: Communication</title><link>https://blog.maceage.com/posts/2025/unreal-engine-06-communication/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-06-communication/</guid><description>&lt;p&gt;After covering the &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-05-mathematics-for-games/"&gt;common mathematics and equations&lt;/a&gt; that underpins game development, this week was back into Unreal Engine proper – this time to learn the various ways objects talk to each other. Casting, interfaces, and event dispatchers/delegates turned out to be one of those topics where the choice of mechanism matters as much as the mechanics themselves, because each one trades flexibility against coupling.&lt;/p&gt;&#10;&lt;p&gt;As ever, I&amp;rsquo;ve been committing changes to the repository as I follow along:&lt;/p&gt;</description></item><item><title>Unreal Engine: Mathematics for Games</title><link>https://blog.maceage.com/posts/2025/unreal-engine-05-mathematics-for-games/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-05-mathematics-for-games/</guid><description>&lt;p&gt;Last week I covered &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-03-actors-components-and-blueprints/"&gt;actors, components, and blueprints&lt;/a&gt;, and this week was a slight divergence away from Unreal Engine itself.&lt;/p&gt;&#10;&lt;p&gt;If, like me, your relationship with vectors ended at school maths lessons, this week was a rude awakening in the best possible way. Nearly every gameplay behaviour - knowing whether an enemy is behind you, where a grenade lands, how high a jump goes - reduces to a handful of operations on vectors.&lt;/p&gt;</description></item><item><title>Unreal Engine: Actors, Components, and Blueprints</title><link>https://blog.maceage.com/posts/2025/unreal-engine-03-actors-components-and-blueprints/</link><pubDate>Wed, 02 Jul 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-03-actors-components-and-blueprints/</guid><description>&lt;p&gt;Following on from &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-02-controllers-and-game-modes/"&gt;controllers and game modes&lt;/a&gt;, this week was about actors, components, and blueprints – the object model that underpins basically everything in Unreal.&lt;/p&gt;&#10;&lt;p&gt;As ever, I&amp;rsquo;ve been committing changes to the repository as I go – notes below.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/sawnoff-studios/first-project" target="_blank"&gt;sawnoff-studios/first-project&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="game-objects-renderable-and-non-renderable"&gt;Game Objects: Renderable and Non-Renderable&lt;/h2&gt;&#10;&lt;p&gt;Not everything in a level is something you can see. Useful mental split:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Renderable&lt;/strong&gt;: enemies, players, pick-ups, props, projectiles, scenery&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Non-renderable&lt;/strong&gt;: waypoints, volumes, triggers, sounds&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="inheritance-vs-composition"&gt;Inheritance vs Composition&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Inheritance (&amp;ldquo;is a&amp;rdquo;):&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Unreal Engine: Controllers and Game Modes</title><link>https://blog.maceage.com/posts/2025/unreal-engine-02-controllers-and-game-modes/</link><pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-02-controllers-and-game-modes/</guid><description>&lt;p&gt;Following on from last week&amp;rsquo;s &lt;a href="https://blog.maceage.com/posts/2025/unreal-engine-01-introduction-to-unreal/"&gt;introduction to the Unreal editor&lt;/a&gt;, this week was all about controllers and game modes – how Unreal decides what the player is, where they spawn, and how input reaches the pawn.&lt;/p&gt;&#10;&lt;p&gt;As I&amp;rsquo;ve been following along with the course, I&amp;rsquo;ve been committing changes to the repository as I go, so you can see the state of the project at each stage of the series:&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/sawnoff-studios/first-project" target="_blank"&gt;sawnoff-studios/first-project&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Here are my notes from this week&amp;rsquo;s content.&lt;/p&gt;</description></item><item><title>Meeting my Unreal Engine mentor</title><link>https://blog.maceage.com/posts/2025/meeting-my-unreal-engine-mentor/</link><pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/meeting-my-unreal-engine-mentor/</guid><description>&lt;p&gt;This week marked a milestone in my &lt;a href="https://www.cgspectrum.com/courses/game-programming-foundations" target="_blank"&gt;Game Programming Foundations&lt;/a&gt; course at &lt;a href="https://www.cgspectrum.com/mentors" target="_blank"&gt;CG Spectrum&lt;/a&gt;: my first mentorship session with &lt;a href="https://www.linkedin.com/in/firas-hosn-77182412/" target="_blank"&gt;Firas Hosn&lt;/a&gt;, who leads the Unreal Engine modules.&lt;/p&gt;&#10;&lt;p&gt;Having worked at &lt;a href="http://www.siliconknights.com/" target="_blank"&gt;Silicon Knights&lt;/a&gt;, &lt;a href="https://www.ubisoft.com/" target="_blank"&gt;Ubisoft&lt;/a&gt;, &lt;a href="https://www.buildarocketboy.com/" target="_blank"&gt;Build A Rocket Boy&lt;/a&gt;, and &lt;a href="https://www.splashdamage.com/" target="_blank"&gt;Splash Damage&lt;/a&gt; across AAA titles like &lt;a href="https://www.callofduty.com/au/en/" target="_blank"&gt;Call of Duty&lt;/a&gt;, &lt;a href="https://www.ubisoft.com/en-au/games/watch-dogs-legion" target="_blank"&gt;Watch Dogs&lt;/a&gt;, &lt;a href="https://www.ubisoft.com/en-us/games/far-cry" target="_blank"&gt;Far Cry&lt;/a&gt;, &lt;a href="https://www.ubisoft.com/en-us/company/about-us/our-brands/tom-clancy-s-splinter-cell" target="_blank"&gt;Splinter Cell&lt;/a&gt;, and &lt;a href="https://en.wikipedia.org/wiki/Too_Human" target="_blank"&gt;Too Human&lt;/a&gt;, Firas brings decades of experience to the virtual classroom.&lt;/p&gt;&#10;&lt;p&gt;Going into the meeting, I&amp;rsquo;ll admit I was a little starstruck – but I&amp;rsquo;d also prepared a notebook full of questions about Unreal Engine versions, Blueprints versus C++, and how large-scale games actually get built.&lt;/p&gt;</description></item><item><title>Unreal Engine: Introduction to Unreal</title><link>https://blog.maceage.com/posts/2025/unreal-engine-01-introduction-to-unreal/</link><pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/unreal-engine-01-introduction-to-unreal/</guid><description>&lt;p&gt;Following on from the &lt;a href="https://blog.maceage.com/posts/2025/delving-into-c-plus-plus/"&gt;C++ portion&lt;/a&gt; of my course, it&amp;rsquo;s time to dive into the world of Unreal Engine. This week&amp;rsquo;s focus was on getting familiar with the engine&amp;rsquo;s interface and understanding its core concepts.&lt;/p&gt;&#10;&lt;p&gt;Here are my notes from watching the content for the first week of &lt;a href="https://www.cgspectrum.com/courses/game-programming-foundations/" target="_blank"&gt;Game Programming Foundations&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="getting-started-with-the-editor"&gt;Getting Started with the Editor&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The &lt;strong&gt;F key&lt;/strong&gt; focuses the camera on your selected object – essential for navigating big levels quickly&lt;/li&gt;&#10;&lt;li&gt;The &lt;strong&gt;Outliner&lt;/strong&gt; panel shows every object currently loaded in your level&lt;/li&gt;&#10;&lt;li&gt;You can replace the default map and set it as your startup map (found in Project Settings → Maps &amp;amp; Modes)&lt;/li&gt;&#10;&lt;li&gt;World origin sits at &lt;code&gt;0,0,0&lt;/code&gt; - good to know when placing objects&lt;/li&gt;&#10;&lt;li&gt;Unreal&amp;rsquo;s units are in &lt;strong&gt;centimeters&lt;/strong&gt;, not meters&lt;/li&gt;&#10;&lt;li&gt;Hold &lt;strong&gt;Left Alt + drag&lt;/strong&gt; to duplicate objects in the viewport&lt;/li&gt;&#10;&lt;li&gt;Dragging objects onto others in the Outliner assigns parent-child relationships&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="setting-up-git-lfs"&gt;Setting Up Git LFS&lt;/h2&gt;&#10;&lt;p&gt;Unreal&amp;rsquo;s asset files (&lt;code&gt;*.uasset&lt;/code&gt;, &lt;code&gt;*.umap&lt;/code&gt;) are large binaries that&amp;rsquo;ll break regular Git repos fast. You need Git LFS:&lt;/p&gt;</description></item><item><title>Delving into C++</title><link>https://blog.maceage.com/posts/2025/delving-into-c-plus-plus/</link><pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/delving-into-c-plus-plus/</guid><description>&lt;p&gt;As &lt;a href="https://blog.maceage.com/posts/2025/learning-unreal-engine/"&gt;mentioned previously&lt;/a&gt;, a prerequisite of the &lt;a href="https://www.cgspectrum.com" target="_blank"&gt;CG Spectrum&lt;/a&gt; &lt;a href="https://www.cgspectrum.com/courses/game-programming-foundations" target="_blank"&gt;Game Programming Foundations&lt;/a&gt; course is a basic understanding of the &lt;a href="https://en.wikipedia.org/wiki/C%2B%2B" target="_blank"&gt;C++ programming language&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;My programming experience has mostly been with higher-level languages. I started with &lt;a href="https://en.wikipedia.org/wiki/Visual_Basic_%28classic%29" target="_blank"&gt;Visual Basic&lt;/a&gt; before moving on to &lt;a href="https://en.wikipedia.org/wiki/Java_%28programming_language%29" target="_blank"&gt;Java&lt;/a&gt; and then &lt;a href="https://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29" target="_blank"&gt;C#&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Of those, I&amp;rsquo;ve always found C# particularly intuitive, but I&amp;rsquo;ve also wanted to learn C++ for a long time.&lt;/p&gt;&#10;&lt;p&gt;Since I already had a solid understanding of the core principles, I saw little value in taking extensive notes on concepts I was already familiar with, and instead committed code to:&lt;/p&gt;</description></item><item><title>Learning Unreal Engine</title><link>https://blog.maceage.com/posts/2025/learning-unreal-engine/</link><pubDate>Fri, 28 Feb 2025 00:00:00 +0000</pubDate><guid>https://blog.maceage.com/posts/2025/learning-unreal-engine/</guid><description>&lt;p&gt;From my early days of using computers, starting with the green-screened &lt;a href="https://en.wikipedia.org/wiki/Amstrad_CPC_464" target="_blank"&gt;Amstrad CPC-464&lt;/a&gt;, followed by the vivid colour graphics of the &lt;a href="https://en.wikipedia.org/wiki/Amiga_500" target="_blank"&gt;Amiga 500&lt;/a&gt;, portable playability of the &lt;a href="https://en.wikipedia.org/wiki/Game_Boy" target="_blank"&gt;Nintendo Gameboy&lt;/a&gt;, sheer joy of the local player-enabled &lt;a href="https://en.wikipedia.org/wiki/Super_Nintendo_Entertainment_System" target="_blank"&gt;Super Nintendo Entertainment System&lt;/a&gt; and then the many complexities of a &lt;a href="https://en.wikipedia.org/wiki/I486" target="_blank"&gt;486 desktop PC&lt;/a&gt;, video games have always held a special place in my heart.&lt;/p&gt;&#10;&lt;p&gt;As a lifelong gamer I&amp;rsquo;ve always been curious about this form of software entertainment and the experiences they provide for millions. With more and more video games having the graphical fidelity of blockbuster movies, I&amp;rsquo;ve always had a deep interest in wanting to know how they work under-the-hood.&lt;/p&gt;</description></item></channel></rss>