KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
AMoviePanel.cpp
이 파일의 문서화 페이지로 가기
1// Copyright (c) 2025 Doppleddiggong. All rights reserved. Unauthorized copying, modification, or distribution of this file, via any medium is strictly prohibited. Proprietary and confidential.
2
3
4#include "AMoviePanel.h"
5
6#include "FComponentHelper.h"
7#include "Components/StaticMeshComponent.h"
8#include "MediaPlayer.h"
9#include "MediaSource.h"
10#include "MediaTexture.h"
11#include "GameLogging.h"
12#include "Materials/MaterialInstanceDynamic.h"
13#include "UObject/ConstructorHelpers.h"
14
15#define SCREEN_PATH TEXT("/Engine/BasicShapes/Cube.Cube")
16#define MEDIA_PLAYER_PATH TEXT("/Game/CustomContents/Media/MP_InGame.MP_InGame")
17#define MEDIA_SOURCE_PATH TEXT("/Game/Movies/Duolingo.Duolingo")
18#define MEDIA_PLAYER_TEXTURE_PATH TEXT("/Game/CustomContents/Media/MPT_InGame.MPT_InGame")
19
21{
22 PrimaryActorTick.bCanEverTick = false;
23
24 Screen = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Screen"));
25 RootComponent = Screen;
26
28 Screen->SetRelativeScale3D(FVector(16.0f, 9.0f, 0.1f));
29
30 // 각 인스턴스마다 고유한 MediaPlayer와 MediaTexture 생성
31 MediaPlayer = CreateDefaultSubobject<UMediaPlayer>(TEXT("MediaPlayer"));
32 MediaTexture = CreateDefaultSubobject<UMediaTexture>(TEXT("MediaTexture"));
33
34 // MediaPlayer의 출력을 MediaTexture로 설정
36 {
37 MediaPlayer->SetLooping(true);
38 MediaPlayer->PlayOnOpen = false;
39 }
40
42}
43
45{
46 Super::BeginPlay();
47
48 if (!Screen || !Screen->GetMaterial(0))
49 return;
50
51 // MediaTexture를 MediaPlayer에 연결
53 {
54 MediaTexture->SetMediaPlayer(MediaPlayer);
55 MediaTexture->UpdateResource();
56 }
57
58 MediaMaterial = UMaterialInstanceDynamic::Create(Screen->GetMaterial(0), this);
59 if (!MediaMaterial)
60 return;
61
62 MediaMaterial->SetVectorParameterValue( ColorParam, FLinearColor( 0, 0, 0, 1.0f ) );
63 MediaMaterial->SetTextureParameterValue(TextureParam, MediaTexture);
64 MediaMaterial->SetScalarParameterValue(TileParam, TileCount);
65
66 Screen->SetMaterial(0, MediaMaterial);
67
68 MediaPlayer->OnEndReached.Clear();
69 MediaPlayer->OnEndReached.AddDynamic(this, &AMoviePanel::HandleMediaEndReached);
70
71 PlayMedia();
72}
73
75{
76 if (!MediaPlayer || !MediaSource)
77 {
78 PRINTLOG( TEXT("AMoviePanel::PlayMedia - MediaPlayer or MediaSource is null"));
79 return;
80 }
81
82 MediaMaterial->SetVectorParameterValue(ColorParam, FLinearColor(1.0f, 1.0f, 1.0f, 1.0f));
83
84 // OnMediaOpened 이벤트 바인딩
85 MediaPlayer->OnMediaOpened.Clear();
86 MediaPlayer->OnMediaOpened.AddDynamic(this, &AMoviePanel::HandleMediaOpened);
87
88 // 미디어 소스 열기
89 if (!MediaPlayer->OpenSource(MediaSource))
90 {
91 PRINTLOG(TEXT("AMoviePanel::PlayMedia - Failed to open media source"));
92 }
93}
94
95void AMoviePanel::HandleMediaOpened(FString OpenedUrl)
96{
97 if (MediaPlayer)
98 {
99 MediaPlayer->Play();
100 PRINTLOG(TEXT("AMoviePanel::HandleMediaOpened - Media opened: %s"), *OpenedUrl);
101 }
102}
103
105{
106 if (bOneShot)
107 {
108 MediaMaterial->SetVectorParameterValue(ColorParam, FLinearColor(0.0f, 0.0f, 0.0f, 1.0f));
109 MediaPlayer->Pause();
110 }
111}
#define SCREEN_PATH
#define MEDIA_SOURCE_PATH
FComponentHelper 구조체를 선언합니다.
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
TObjectPtr< class UStaticMeshComponent > Screen
Definition AMoviePanel.h:32
TObjectPtr< class UMaterialInstanceDynamic > MediaMaterial
Definition AMoviePanel.h:41
void HandleMediaEndReached()
TObjectPtr< class UMediaSource > MediaSource
Definition AMoviePanel.h:38
FName ColorParam
Definition AMoviePanel.h:49
void HandleMediaOpened(FString OpenedUrl)
TObjectPtr< class UMediaTexture > MediaTexture
Definition AMoviePanel.h:44
FName TileParam
Definition AMoviePanel.h:55
virtual void BeginPlay() override
float TileCount
Definition AMoviePanel.h:58
FName TextureParam
Definition AMoviePanel.h:52
TObjectPtr< class UMediaPlayer > MediaPlayer
Definition AMoviePanel.h:35
void PlayMedia()
static T * LoadAsset(const TCHAR *Path)