I make games and teach practical Unreal Engine C++, gameplay programming, and performance across CPU and GPU. 17+ years of experience, formerly at Epic Games.

Amsterdam
Five years ago today, I launched my Unreal Engine C++ course. Today, the completely rebuilt UE5 edition is LIVE! With 30+ hours of newly recorded lessons, redesigned code and gameplay systems, and a new curriculum. Existing C++ students get it for FREE! tomlooman.com/courses/unreal…
13
67
552
Replying to @chriskwallis
Congrats! Will we hear more about the engine changes through talks? Curious about the necessary improvements to Nanite (and everything else tbh)
1
6
Replying to @ChebzReal
I'm teaching this to beginners, so I just might tell you about for loops next.
5
Replying to @Brekketos
Yes using the same approach or by using 1 array with a struct to hold the item data (Called 'Array of Structs'). You then also need to represent them visually in some way. Could be Niagara or Meshes. I have another implementation example using DoD for projectiles in Project Orion. Will show more for that soon.
1
Replying to @JuanX20160166
Correct. It's large and you don't need any of its data, it's not the right tool for the job
Replying to @Link345_1
I bet they do. Its pretty standard when you have many of something, coins, loot, projectiles etc.
1
Replying to @paumarin96_
Depends on the implementation requirements. Possibly a proxy marker to easily add/edit locations. Or procedurally based on some parameters... These proxies don't even need to exist and load in the cooked game. Their locations can be stored in arrays again. So yeah it depends.
1
Replying to @puzzabug
I'd say profile it. Just thinking of the networking side of it, the standard (polling) replication gets more expensive on GameThread per object replicated. The new "Iris" replication can enable Push Based (supported for BP) which avoids that cost. That's worth looking into and understanding.
Replying to @chhopsky
Thanks for sharing!
1
4
Replying to @ssobehtoxna
Yes folks tend to use OOP which isn't great for many things. Nothing new is discovered here as pointed out in the post, DoD is old. But many programmers start by learning OOP.
3
Replying to @xLexemeX
An Actor is a wrapper around Components. You can just register a instanced mesh component directly into the World without using an Actor.
4
Replying to @AgentNightRaven
It's a free upgrade! You will already have access, it's in your student dashboard.
2
What began as a simple UE5 upgrade, turned into a year-long rebuild. I’m proud of the result and grateful for all the support on the original course. The Anniversary Sale ends in a few hours (23:59 UTC), save $100 using “FIVEYEARS” and get the upcoming multiplayer module free.
Five years ago today, I launched my Unreal Engine C++ course. Today, the completely rebuilt UE5 edition is LIVE! With 30+ hours of newly recorded lessons, redesigned code and gameplay systems, and a new curriculum. Existing C++ students get it for FREE! tomlooman.com/courses/unreal…
2
6
84
Replying to @Ian_Fisch
Sure, usually single array and struct is the easiest and can be just as fast. In this case with 3 arrays, the code is still pretty straightforward imo. The bigger point remains, which is to avoid using Actors for everything. github.com/tomlooman/ActionR… You can see the implementation in the pickup subsystem.
8
Replying to @godraytio
The point is to not use Actors for everything, which people tend to go for when using Unreal.
4
47
Replying to @J_Von_Random
Yes, the point is to not use Actors for everything, which people tend to go for when using Unreal.
2
117
Tom Looman retweeted
Thousands of pickups don’t need thousands of Actors. By building a coin pickup system with plain data arrays rather than one Actor per coin, we can add thousands of pickups to the world in microseconds, not milliseconds. The code remains simple to understand and maintain. We store each coin’s location, credit reward, and mesh instance ID in three synchronized arrays. A single Instanced Static Mesh Component represents the coins in the world. This layout, known as a Structure of Arrays, is one way to apply Data-Oriented Design to your gameplay systems. It lets us process thousands of pickups with less memory overhead and is more cache friendly than using Actors and Components, which is important for performance. During the lessons in the new UE5 C++ Course we go into detail on how and when to apply this in your own projects. Data-oriented Design is nothing new and Unreal Engine has a similar data-oriented system called Mass. But I often see developers learn this approach very late in the process as Unreal Engine is so heavily biased to OOP (object oriented programming). OOP is convenient, but not always the right approach. In the C++ course we explain and apply both.
31
61
1,013
Replying to @1928Tommygun
You can browse the implementation on GitHub. It's the most straight forward loop, it didn't need anything more. Initially suspected I might have to (spatially) partition the pickups, but it was fast enough and it kind of proved the point of both performance and simplicity. direct link to the class and line of code: github.com/tomlooman/ActionR…
Replying to @AlexerSalcido
That's right! Still a cool animation set and has all the anims I needed for the course (including stuns etc.)
1
Replying to @1928Tommygun
I did consider it, even implemented it with Niagara to try out my options. It was a bit awkward to manage lifetime with Niagara Data Channels at the time (eg. pickup events).
1
1