I really don’t have a clue. Please help me. I don’t know why my code is not working. Here is the code I have tried:
void AEgoVehicle::ConstuctTVShowElements() {
// Initializing the static mesh for the media player
MediaPlayerMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("TV-show Pane"));
if (!MediaPlayerMesh) {
UE_LOG(LogTemp, Error, TEXT("Failed to create media player mesh."));
return;
}
MediaPlayerMesh->AttachToComponent(GetRootComponent(), FAttachmentTransformRules::KeepRelativeTransform);
MediaPlayerMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
MediaPlayerMesh->SetRelativeTransform(VehicleParams.Get<FTransform>("TVShow", "MediaPlayerLocation"));
FString PathToMeshMediaPlayer = TEXT("StaticMesh'/Game/NDRT/TVShow/StaticMeshes/SM_MediaPlayer.SM_MediaPlayer'");
const ConstructorHelpers::FObjectFinder<UStaticMesh> TVShowMeshObj(*PathToMeshMediaPlayer);
MediaPlayerMesh->SetStaticMesh(TVShowMeshObj.Object);
MediaPlayerMesh->SetCastShadow(false);
// Create a new media player
MediaPlayer = NewObject<UMediaPlayer>(this, UMediaPlayer::StaticClass(), TEXT("MediaPlayer"));
if (!MediaPlayer) {
UE_LOG(LogTemp, Error, TEXT("Failed to create media player."));
return;
}
MediaPlayer->SetLooping(true); // Set looping to true if you want the video to loop
// Create a new media source
const ConstructorHelpers::FObjectFinder<UFileMediaSource> MediaSourceObj(*MediaSourcePath);
if (MediaSourceObj.Succeeded()) {
MediaPlayerSource = MediaSourceObj.Object;
}
else {
UE_LOG(LogTemp, Error, TEXT("Failed to load media source."));
return;
}
if (!MediaPlayer->OpenSource(MediaPlayerSource)) {
UE_LOG(LogTemp, Error, TEXT("Failed to open media source."));
return;
}
// Create a new media texture
MediaPlayerTexture = NewObject<UMediaTexture>(this, UMediaTexture::StaticClass(), TEXT("MediaPlayerTexture"));
if (!MediaPlayerTexture) {
UE_LOG(LogTemp, Error, TEXT("Failed to create media texture."));
return;
}
MediaPlayerTexture->SetMediaPlayer(MediaPlayer);
// Create a new dynamic material instance
MediaPlayerMaterialInstance = UMaterialInstanceDynamic::Create(MediaPlayerMesh->GetMaterial(0), MediaPlayerMesh);
if (!MediaPlayerMaterialInstance) {
UE_LOG(LogTemp, Error, TEXT("Failed to create dynamic material instance."));
return;
}
// Set the texture parameter to the media texture
MediaPlayerMaterialInstance->SetTextureParameterValue(FName("VideoTexture"), MediaPlayerTexture);
// Apply the dynamic material to the mesh
MediaPlayerMesh->SetMaterial(0, MediaPlayerMaterialInstance);
MediaPlayer->Play();
}
Edit: I am calling this method in the actor constructor.