I have a project that entirely takes place in a single level inside a single map, and consists of roughly 400 trigger-box components. I am running on the following hardware:
Intel Core-i7 4770K @ 3.5GHz;
16 GB RAM;
Zotac - Nvidia GTX-970 with 4GB RAM;
1 TB SATA HDD;
Windows 7 64-bit
Till now I haven’t faced any performance problems (since UE4 v4.7), but I will need to add more trigger components and that has got me worried. I am not sure if my hardware is the reason everything is performing fine or if trigger components are efficient enough in general.
So my question is - is there any limit to the number of trigger components that can be used in a single UE4 level inside a single map without affecting performance ? Is there any rule-of-thumb or standard that we should follow in terms of using the number of trigger components ? Or is it just completely dependent on the hardware ?
In all my years of working with UE3 and UE4, I’ve never heard of any such limit, no. However, I’ve never seen anyone have any need to get anywhere close to that number of triggers in a single level before.
Presuming that you’re not expecting all of those triggers to be going off at once (i.e. they’re scattered across a level and typically you can only realistically hit a small subset of them at once) in which case you probably will suffer performance issues sooner or later, I’d suggest to do the following (regardless of whether you think it’s ever going to be a problem or not): Divide them up into zones and use bigger trigger boxes to turn on/off groups of smaller ones. In theory, if the triggers are disabled they should have almost no cost to them (if any). And that’s presuming you don’t want to stream in/out sub levels containing the different groups of triggers.
Thanks for your reply, that was helpful. Yes, breaking up all the triggers into smaller manageable zones definitely seems to be a much more efficient way to handle things in this case. Your presumption is correct - 99% of the time only any one of the triggers will be hit. I did start doing the zone sub-division some time back, but just due to the sheer number of triggers (that’s a lot of copy&paste work there) I didn’t follow through (lazy). On a side note, the docs only say how to use the trigger components, but not exactly how they “listen” at run-time. Are each and every trigger components called during every “Tick” event to inform them whether they have been activated or not, or is there a separate process through which they are managed - that’s what I am interested in (maybe I missed something).
From what I know (I’m mainly a designer, so I don’t know all of the ins and outs under the hood): No, they don’t get updated on a tick basis. It’s all event based. Basically, when an object with collision changes position, it’s collision is then checked against all other objects that have active collision. So if you’ve got 200 triggers, it’s going to do 200 checks. AFAIK, a disabled trigger basically cost nothing.
Seems logical. But, if a change in position of the instigating object causes a check on all the active triggers, then the primary character in my game who is the instigator, in the worst case could be changing positions constantly at the will of the gamer. This effectively could replicate a “on a tick basis” check (sorry I am a programmer). Anyway, instead of stalling any more time I will finish the zone based implementation you suggested at the beginning. It seems the cleanest way out right now. Appreciate the help, thanks !
I’ve got a similar issue to yourself, however I’ve got 600 triggers, although only one is ever called at the same time.
Did you manage to find a workaround, my problem is in the editing, as when I edit my level bp where they are stored, even making minor changes seems to take minutes instead of seconds and I don’t want the game to crash in the mean time.