I'f I have thousand of objects, can I rely on Tick event for performance? Or rather create a custom positioning system?

I’f I have thousand of objects, can I rely on Tick event for performance?
Or rather should I rather create a custom positioning system and make a custom event called “UPDATE” and call it from the Level blueprint?

It’s almost always better to use custom event driven updates instead of relying on event tick. Whenever you want to change the position of any of these objects, pass a reference to that actor as well as it’s new position. Then change it’s position accordingly.

If I have 1,000 characters, I could use Get All Actors From Class to call the custom Update event. Would you recommend using a custom Positioning system to instead of using Get All Actors From Class maybe you query what actors are near then update them?

Yes you could use Get all actors from class,but since it’s quite expensive, call it at the start of the level and store all the actors in an array. If you have actors spawning in at runtime, add them to this array when they’re spawned & remove them if they’re destroyed. However then you would have to loop through all thousand actors to check their distance from the player, which could result in performance drop. There are however some methods to spread a for loop across multiple ticks & I remember someone posting it in the unreal engine forums last year. That might be worth checking out to spread out the calculations across multiple frames.

Another option is to use a sphere collision overlap on the player & add overlapping actors to an array & remove them at end overlap.

I have not tested these with such a large group of actors, so you’d have to test both cases to see which one if offers better performance.