Cannot Set CrowdManagerClass in Project Settings

In 4.17, a CrowdManagerBase class was added that enabled users to create custom crowd managers, which could then be set in the project settings. After extending CrowdManagerBase and implementing my own custom crowd manager, I attempted to set the Crowd Manager Class to point to the custom implementation; however, when doing so, no change is made to DefaultEngine.ini, and the navigation system continues to use the default crowd manager (i.e. when NavigationSystem::CreateCrowdManager is called, CrowdManagerClass still points to CrowdManager).

It is possible to reproduce this behaviour in the ShooterGame sample as well:

  1. Create a new C++ class that extends CrowdManagerBase (named e.g. TestCrowdManager).
  2. Edit β†’ Project Settings β†’ Navigation System β†’ Set Crowd Manager Class to point to TestCrowdManager.
  3. Open DefaultEngine.ini, no change is made.
  4. Set breakpoint in NavigationSystem::CreateCrowdManager, CrowdManagerClass points to CrowdManager.

While it is discouraged, I also tried setting the class manually in DefaultEngine.ini, but this had no effect either.

While attempting to find the source of this issue, I also noticed in NavigationSystem.h that CrowdManagerClass is not marked with the config specifier:

UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Navigation)
TSubclassOf<UCrowdManagerBase> CrowdManagerClass;

Is this intentional, or could this be the source of the issue?

i seem to be having the same issue. would be nice to have an answer to this. does it work for anyone?

Same here, did you solve it ?

Sorry for the late reply, but there are two solutions to this problem that I am aware of:

  1. The way I initially resolved this issue after my original post was by setting the crowd manager class the pre-4.17 way; that is, by creating a custom navigation system.

To do so, I created a subclass of UNavigationSystem, called UCustomNavigationSystem, that only overrode the constructor and set UNavigationSystem::CrowdManagerClass to UCustomCrowdManager after calling the parent constructor. Finally, to have my project use the custom navigation system, the following had to be added to the [/Script/Engine.Engine] section of DefaultEngine.ini:

NavigationSystemClassName=/Script/ProjectName.CustomNavigationSystem

  1. Recently, I updated my project to UE 4.21, and it appears that this bug has been resolved. Setting the crowd manager class in Navigation System section of the Project Settings correctly sets the crowd manager class on the NavigationSystem. I am not sure exactly when this was fixed, as I updated my project from 4.18.3 to 4.21.0 and did not see anything relating to bug fixes regarding setting the crowd manager class in the release notes for versions 4.19 - 4.21 (although it’s possible that I simply missed it), but I can say that it works in 4.21.0.

[Edit] It appears that I spoke to soon. While setting the Crowd Manager Class in the project settings in 4.21 does update DefaultEngine.ini and appropriately set crowd manager class upon initialization, after closing and re-opening the editor, the crowd manager class was once again cleared, and I had to revert back to using my CustomNavigationSystem.

Hello.

In regards to the class you want to use for UNavigationSystemV1::CrowdManagerClass, you need to have it in a module with its loading phase set to PostConfigInit as it needs to be loaded fairly early in engine init.

@joey.pla
The reason why it was cleared is simply because the engine tries to load it before your module containing the class you have chosen is not loaded yet. This is also why you can set it in project settings (by that point it is loaded).

Best regards,
Temaran