Hi there! I need to create avatars for chatacters in scene. I’ve found lot of tutorials to use USceneCaptureComponent2D. But all of them use only one player character. In may case I have lot of them (up to 10 for example). General way for one character is: create USceneCaptureComponent2D, create render target in editor, pass material to Widget. If I use this way all character have same avatar. As I understand it happens because all actors USceneCaptureComponent2D write in same RenderTarget. So I decided to create render target dynamically. My code is;
ATacticalCharacterPlayer::ATacticalCharacterPlayer()
{
CaptureComponentHead = CreateDefaultSubobject<USceneCaptureComponent2D>(TEXT("CaptureComponentHead"));
…
void ATacticalCharacterPlayer::PostInitializeComponents()
{
Super::PostInitializeComponents();
CaptureComponentHead->CaptureSource = SCS_FinalColorLDR;
CaptureComponentHead->bCaptureEveryFrame = false;
FString asd = GetName();
UTextureRenderTarget2D* renderTarget = NewObject<UTextureRenderTarget2D>(this, *asd);
renderTarget->InitAutoFormat(512, 512);
renderTarget->UpdateResourceImmediate();
CaptureComponentHead->TextureTarget = renderTarget;
CaptureComponentHead->UpdateContent();
Afer that I pass reference to ATacticalCharacterPlayer in Widget and apply image
UTextureRenderTarget2D* t = OwnerAttr->CaptureComponentHead->TextureTarget;
if(t)
{
OwnerAttr->CaptureComponentHead->CaptureScene();
t->UpdateResourceImmediate();
UTexture2D* texture2D = t->ConstructTexture2D(this, "Capture", EObjectFlags::RF_NoFlags, CTF_DeferCompression);
HeadCapture->SetBrushFromTexture(texture2D);
}
But in that case texture2D is only black image. What have I missed? I saved UTextureRenderTarget2D to file and it’s black as well. So I guess issue somewhere in UTextureRenderTarget2D, but I can’t figure out where exactly.
BTW if I move initialization from PostInitializeComponents to constructor all characters have same UTextureRenderTarget2D reference, but I’m sure (checked it in debug) all constructors are called and separate UTextureRenderTarget2D are created and set. But in BeginPlay the UTextureRenderTarget2D is the same. I don’t undersatnd why it happens, but in that case I have correct image instead of black image at least, but again the image is the same for all characters.
Any help would be appreciated )