Something major changed in nDisplay with 4.27, and I haven’t been able to find any doc on it or any mention about this anywhere. In short: nDisplay’s root actor isn’t “attached” to the player pawn anymore. It was not the case in 4.26.
You can easily check that for yourself with the nDisplay template project. In both engine version (26, 27), in PIE, you can control the default player pawn and move around in the small scene.
If you start this project in nDisplay 4.26, you will also control the player pawn, and any movement you make will also move the root actor, and therefore the cluster displays will all reflect the change in point of view.
However, if you start this same template project in nDisplay 4.27, any movement you make on the default player pawn will not move the nDisplay root actor, which will stay at its static default position.
Is this a new feature? Is this known? Is this a bug? I don’t know. I just know that it breaks a lot of things on our side. I also think it’s weird to have different behavior whether you’re in PIE or nDisplay (e.g. viewpoint moving or not).
Anyone has more information on that?
PS: Is this even the right place to discuss nDisplay things?
Thank you for your reply. I’m very aware of the changes to nDisplay in 4.27, but as I mentioned, nowhere in the documentation is it expressed that the view origin isn’t tied to the default player pawn anymore. So I don’t know if this is a new feature, in which case they might want to explicitly say so, because having different behavior in PIE and nDisplay would be non-obvious for most users. Or if it’s a bug, it which case it would need to be logged as such and fixed.
Right now I don’t know if I need to find a permanent workaround for this new feature, or if I just wait for a fix for this bug.
Hi !
I am also facing the same issue. I am relatively new to UE and nDisplay. I was able to move around the environment with 4.26, but with 4.27 I am not able to do so. I am using the default ndisplay demo project. I edited the NDC_Basic and checked the “Follow Local Player Camera” option, saved and compiled it. Still when I start ndisplay I am still not able to move.
I’ve tried the methods listed out here and it seems to work in PIE perfectly fine but using ndisplay over multiuser, it seems nothing will take control of the root actor component.
This is my solution for my use case, might be helpful for others. I made a helper class which returns the active display root actor (also works if you have multiple ndisplay configs in your map).
#include "Helpers.h"
#include "IDisplayCluster.h"
#include "Game/IDisplayClusterGameManager.h"
/// <summary>
/// Returns the DisplayClusterRootActor (DCRA)
/// This is NOT set yet a BeginPlay so you need to wait a short time
/// </summary>
/// <returns>The DCRA, nullptr if RootActor is not set</returns>
ADisplayClusterRootActor* UHelpers::GetDisplayClusterRootActor()
{
ADisplayClusterRootActor* Dcra = nullptr;
IDisplayClusterGameManager* clusterGameMgr = IDisplayCluster::Get().GetGameMgr();
Dcra = clusterGameMgr->GetRootActor();
return Dcra;
}
Then in my default pawn blueprint in BeginPlay I call this method and store the DCRA in a BP variable. Important: you need to add a small delay (i use 0.2s) before calling this on BeginPlay because the RootActor is not available immediatly at BeginPlay time.
Then OnTick I update the DCRA position and rotation to be the same as my default pawn.