Event - osy9611/ProjectPT GitHub Wiki
ํด๋น ๋ฌธ์๋ ๋ถ๊ดด ์คํ๋ ์ผ์ ์ด๋ฒคํธ ์ฝํ ์ธ ๋ฅผ ๋ชจ์ํ ๋ด์ฉ์ ๊ธฐ๋กํ ๋ฌธ์์ด๋ค.
ํ์ฌ ์๋ฒ ์ฐ๋์ด ์๋ ์ํ์์ ํด๋ผ์ด์ธํธ๊ฐ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์์ผ๋ฉฐ, ํฅํ ์๋ฒ ์ถ๊ฐ ์ ์์ ๋ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ค๊ณ๊ฐ ๋์๋ค.
EventPage
|
์ ๊ท ์ด๋ฒคํธ ๋๋ ํน์ ์กฐ๊ฑด ์ด๋ฒคํธ ํด๊ธ ์
|
์ฃผ์ ๊ธฐ๋ฅ
-
์ด๋ฒคํธ ํ ๊ธ ๋ฐ ๋ฐฐ๋ UI
- ์ ํํ ์ด๋ฒคํธ ๋ฐฐ๋์ ์์ธ ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ์ฌ ํ์
-
RedDot ์๋ฆผ
- ํด๋ผ์ด์ธํธ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ํ์ฉํด ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ํ์ธํ ์ด๋ฒคํธ๋ ๊ธฐ๋ก๋๋ฉฐ, ์ฌ์ ์ ์ ์ ์ด๋ฒคํธ์๋ง ๋ ๋๋ท ์์ด์ฝ์ ํ์
-
์ด๋ฒคํธ ๋ณด์ ์ฒ๋ฆฌ
- ๊ฐ ์ด๋ฒคํธ์ ๋ฐ๋ฅธ ๋ณด์ ๋ฐ์ดํฐ๋ฅผ UI๋ก ๋ณด์ฌ์ฃผ๊ณ , ์๋ฒ ํต์ ์ ํตํด ๋ณด์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์งํ
-
์ด๋ฒคํธ ๋ง๋ฃ ํ์ด๋จธ
- ๊ฐ ์ด๋ฒคํธ ๋ง๋ฃ ์๊ฐ์ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐํ์ฌ, ๋จ์ ์๊ฐ์ UI์ ํ์ํ๊ณ ๋ง๋ฃ ์ ์๋์ผ๋ก ์ต์ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์
-
ํน์ ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์ด๋ฒคํธ UI ์๋ ์คํ
- ๋ ๋ฒจ์ , ์ฝํ ์ธ ํด๊ธ ๋ฑ์ ์กฐ๊ฑด์ด ๋ง์กฑ๋ ๊ฒฝ์ฐ, ํด๋น ์ด๋ฒคํธ๊ฐ ์๋์ผ๋ก ์คํ๋๋ ๊ธฐ๋ฅ ์ถ๊ฐ
์ด๋ฒคํธ ๋ฐ์ดํฐ ๊ตฌ์กฐ
-
์๋ฒ์์๋ ํ์ฌ ์งํ์ค์ธ ์ด๋ฒคํธ TableID์ ์์ ๋ฐ ๋ง๋ฃ์๊ฐ, ๋ฐ์ ๋ณด์ ์์ดํ ์ ๋ณด๋ธ๋ค
-
ํด๋ผ์ด์ธํธ๋ TableID๋ฅผ ๊ธฐํ ๋ฐ์ดํฐ ํ ์ด๋ธ์์ ๊ฒ์ํด์ ๋ฐฐ๋ ๋ฐ ์ด๋ฒคํธ ํ ๊ธ์ ์์ฑํ๋ค
-
๋ฐ์ดํฐ ๊ตฌ์กฐ
tableNo eventName eventDesc openType openValue bannerPath toggleImgPath openPagePath rewardItems int string string EventOpenType string string string string Tarray
์ด๋ฒคํธ ๋ฐ์ดํฐ ์ธํ ๋ฐฉ์
- ๊ธฐํ์๋
eventName,eventDesc,openType,openValue๋ฑ์ ์ค์ ํ์ฌ ์ด๋ฒคํธ๋ฅผ ์ ์ํ๋ค. -
openType์ ํตํด ํน์ ์กฐ๊ฑด(๋ ๋ฒจ์ , ์ฝํ ์ธ ํด๊ธ ๋ฑ)์ ์ค์ ํ๊ณ ,openValue์ ํด๋น ์กฐ๊ฑด์ ์ธ๋ถ๊ฐ์ ์ ๋ ฅํ๋ค -
bannerPath,toggleImgPath๋ฅผ ํตํด UI์ ํ์๋ ๋ฐฐ๋ ๋ฐ ํ ๊ธ ์ด๋ฏธ์ง๋ฅผ ์ ์ํ๋ค -
openPagePath๋ฅผ ํ์ฉํ์ฌ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์๋์ผ๋ก ํด๋น UI ํ์ด์ง๋ฅผ ์ด๋๋ก ์ค์ ํ๋ค -
rewardItems์๋ ์ด๋ฒคํธ ๋ณด์ ์์ดํ ID ๋ชฉ๋ก์ ์ค์ ํ์ฌ, ํด๋น ์ด๋ฒคํธ๋ฅผ ํตํด ์ง๊ธ๋ ๋ณด์์ ๊ด๋ฆฌํ๋ค
UI/UX ๊ณ ๋ ค ์ฌํญ
-
ํ ๊ธ ๊ทธ๋ฃน ์ ์ด
- ์ด๋ฒคํธ ํ ๊ธ ๋ฒํผ์ ๊ทธ๋ฃน ๋ด์์ ํ๋๋ง ํ์ฑํ๋๋๋ก ์ค๊ณํ์ฌ, ์ฌ์ฉ์๊ฐ ์ ํํ ์ด๋ฒคํธ์ ๋ฐฐ๋์ ๋ณด์ ์ ๋ณด๊ฐ ์ง๊ด์ ์ผ๋ก ํ์๋๋๋ก ๊ตฌ์ฑ
-
์ค์๊ฐ ๋จ์ ์๊ฐ ํ์
- ํ์ด๋จธ๋ฅผ ํ์ฉํ์ฌ ๋จ์ ์๊ฐ์ ์ค์๊ฐ์ผ๋ก ํ์ํ์ฌ, ์ด๋ฒคํธ๊ฐ ๋ง๋ฃ๋๋ฉด ์๋์ผ๋ก UI๋ฅผ ๊ฐฑ์
-
RedDot ์๋ฆผ
- ๋ก์ปฌ ์ ์ฅ์์์ ์ด๋ฒคํธ ํ์ธ ์ฌ๋ถ๋ฅผ ์ ์งํ์ฌ, ๋ถํ์ํ ์๋ฒ ์์ฒญ์ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ ์ต์ ํ
-
์๋ UI ํญ ํ์ฑํ
- ํน์ ์ด๋ฒคํธ๊ฐ ํ์ฑํ๋ ์กฐ๊ฑด์ด ๋ง์กฑ๋์์ ๋ UI๊ฐ ์๋์ผ๋ก ํญ์ ํ์ฑํ ํ๋๋ก ๊ตฌํ
์๋ฒ ์ฐ๋ ์ ์ด๋ฒคํธ ๋ฐ์ดํฐ ๊ฐฑ์ ํ๋ฆ
- ํด๋ผ์ด์ธํธ ์ ์ ์, ์๋ฒ์์ ์ต์ ์ด๋ฒคํธ ๋ชฉ๋ก์ ๊ฐ์ ธ์ด
- ์๋ฒ๋ ํ์ฌ ์งํ ์ค์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ
- ํด๋ผ์ด์ธํธ๋ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ํน์ ์ด๋ฒคํธ ์ข ๋ฃ ์ ์๋ฒ์ ์๋ก์ด ์ด๋ฒคํธ ์ ๋ณด๋ฅผ ๋ค์ ๋๊ธฐํ
์๋ฒ๊ฐ ์ถ๊ฐ๋ ์ ๊ณ ๋ ค์ฌํญ
-
์ด๋ฒคํธ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฐฉ์ ๋ณ๊ฒฝ
- ํ์ฌ๋ ํด๋ผ์ด์ธํธ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ง๋ง, ์๋ฒ ์ฐ๋ ํ์๋ ์๋ฒ์์ ๊ด๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ผ ํจ
- ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ฒ API๋ฅผ ํธ์ถํ๋ ๋ฐฉ์๊ณผ, ์๋ฒ์์ Push ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ์ ์ค ์ด๋ค ๊ฒ์ ์ ํํ ์ง ๊ฒฐ์ ํด์ผ ํจ
-
์ด๋ฒคํธ ์ํ ์ ์ฅ ๋ฐ ๊ฐฑ์ ๋ฐฉ์
- ํ์ฌ๋ ํด๋ผ์ด์ธํธ์์ ์ด๋ฒคํธ ์ํ๋ฅผ ๊ด๋ฆฌํ์ง๋ง, ์๋ฒ ์ฐ๋ ํ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฒคํธ ์๋ฃ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ํ ๋ค์ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค์ฃผ์ด์ผ ํจ.
- ์ฌ์ฉ์๊ฐ ์ด๋ฒคํธ๋ฅผ ์๋ฃํ๋ฉด, ์๋ฒ์ ์ด๋ฒคํธ ์๋ฃ ์์ฒญ์ ๋ณด๋ด๊ณ ์ดํ ์๋ฒ์์ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ ํ์
-
์ด๋ฒคํธ ์กฐ๊ฑด ์ฒ๋ฆฌ ๋ฐฉ์
- ํ์ฌ๋ ํด๋ผ์ด์ธํธ์์ ์ง์ ์ด๋ฒคํธ ์คํ ์ฌ๋ถ๋ฅผ ํ๋จํ์ง๋ง, ์๋ฒ ์ฐ๋ ํ์๋ ์๋ฒ์์ ์ด๋ฒคํธ ์คํ ์กฐ๊ฑด์ ํ์ธํ ์๋ ์์
- ์๋ฅผ ๋ค์ด, ํน์ ๋ ๋ฒจ ๋ฌ์ฑ ์ ์ด๋ฒคํธ๊ฐ ํ์ฑํ๋๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ํ๋จํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฒ์์ โ์ด๋ฒคํธ ์คํ ๊ฐ๋ฅโ ์๋ต์ ๋ฐํํ๋ ๋ฐฉ์์ด ๊ฐ๋ฅ
ํ์ฅ์ฑ ๋ฐ ์ ์ง๋ณด์ ๊ณ ๋ ค์ฌํญ
-
์ด๋ฒคํธ ์์คํ
๋ชจ๋ํ
- ์ด๋ฒคํธ UI(ํ ๊ธ, ๋ฐฐ๋), ํ์ด๋จธ, ๋ณด์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ๊ฐ์ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ์๋ก์ด ์ด๋ฒคํธ ์ ํ์ ์ถ๊ฐํ ๋ ์ฝ๋ ์์ ์ด ์ต์ํ๋ ์ ์๋๋ก ์ค๊ณ๋จ
- ์๋ฅผ ๋ค์ด, ์๋ก์ด ์ด๋ฒคํธ ์ ํ์ด ์ถ๊ฐ๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด ๋ชจ๋์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ํ์ฅ ๊ฐ๋ฅ
-
์ด๋ฒคํธ ์คํ ์กฐ๊ฑด ํ์ฅ ๊ฐ๋ฅ
- ํ์ฌ ์ด๋ฒคํธ ์คํ ์กฐ๊ฑด์ ๋ ๋ฒจ์ , ์ฝํ ์ธ ํด๊ธ ๋ฑ ์ผ๋ถ ๊ธฐ์ค์ ํ์ ๋์ด ์์ผ๋, ์๋ฒ ์ฐ๋ ํ ๋ค์ํ ์คํ์กฐ๊ฑด์ ์ถ๊ฐํ ์ ์๋๋ก ๊ตฌ์กฐ ์ค๊ณ
- ์๋ฅผ ๋ค์ด, ํน์ ํ์คํธ ์๋ฃ, ์์ดํ ํ๋, ํน์ ๊ธฐ๊ฐ ๋ด ์ ์ ์ฌ๋ถ ๋ฑ ๋ค์ํ ์กฐ๊ฑด์ ์๋ฒ์์ ์ค์ ํ๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฅผ ์ ์ฉํ ์ ์๋๋ก ํ์ฅ ๊ฐ๋ฅ.
์ด๋ฒคํธ ๋ฐ์ดํฐ ์์ฒญ ๋ฐ ๊ฐฑ์
- ๋ฐ์ดํฐ ์์ฒญ ๋ฐ ์
๋ฐ์ดํธ
-
์์ ฏ์ด ํ์ฑํ๋๋ฉด ์๋ฒ์ ์ด๋ฒคํธ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์งํ
-
๊ธฐ์กด ์ด๋ฒคํธ์ ๋น๊ตํ์ฌ ์ ๊ท ์ด๋ฒคํธ๋ ์ถ๊ฐํ๊ณ , ๋ง๋ฃ๋ ์ด๋ฒคํธ๋ ์ ๊ฑฐ
-
ํน์ ์กฐ๊ฑด ์ถฉ์กฑ ์ ์๋์ผ๋ก UI๊ฐ ํ์ฑํ ๋๋๋ก ๊ตฌํ
-
์ฃผ์ ์ฝ๋
void UPTUserData_Event::OnCheckOpenEvent(EEventOpenType OpenType, const FString& OpenValue) { if (CheckOpenEvent(OpenType, OpenValue)) { UpdateEvents(true); UPTUIManagerSubsystem* UIManager = GetWorld()->GetGameInstance()->GetSubsystem<UPTUIManagerSubsystem>(); if (!UIManager) { UE_LOG(PTLog, Error, TEXT("[PTLobbyContentButton] UIMaangerSubsystem is nullptr")); return; } TArray<FString> OpenEvents; for (const FRequestEventData& Data : EventRequestDatas) { FEventData* EventData = GetEventData(Data.TableId); if (!EventData) continue; if (EventData->openType == OpenType && EventData->openValue == OpenValue) { OpenEvents.Add(Data.TableId); } } UPTEventOpenPage* EventOpenWidget = UIManager->GetWidget<UPTEventOpenPage>(DynamicLayerTag, "WBP_DynamicLayout", EventOpenPagePath); EventOpenWidget->Init(OpenEvents); } }
-
์ด๋ฒคํธ ๋ฐฐ๋ ๋ฐ ํ์ด๋จธ ๊ด๋ฆฌ
-
๋ฐ์ดํฐ ํ ์ด๋ธ ๋ฐ ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ฃ ํ์ด๋จธ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, UI์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ๋ก๋ฉ
-
์๋ฒ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋จ์ ์๊ฐ์ ๊ณ์ฐํ์ฌ ํ์
-
์ฃผ์ ์ฝ๋(์ผ๋ถ)
PTPlayerDataSubsystem* PlayerData = GetWorld()->GetGameInstance()->GetSubsystem<UPTPlayerDataSubsystem>(); if (!PlayerData) { UE_LOG(PTLog, Error, TEXT("[PTEventBanner] PTPlayerDataSubsystem is nullptr")); return; } UPTUserData_Event* UserEvent = PlayerData->GetData<UPTUserData_Event>(EUserDataType::Event); FRequestEventData* EventData = UserEvent->FindEventData(TableID); if (!EventData) { UE_LOG(PTLog, Error, TEXT("[PTEventBanner] RequestEventData is nullptr TableID : %s"), *TableID); return; } ExpireTime = EventData->ExpireDate; FTimespan Remaining = ExpireTime - FDateTime::Now(); OnUpdateRemainTimer(Remaining);
์ฌ์ฉ์ ์ธํฐ๋ ์ ๋ฐ RedDot ์ฒ๋ฆฌ
-
์ฌ์ฉ์๊ฐ ์ด๋ฒคํธ ํ ๊ธ ๋ฒํผ์ ์ ํํ๋ฉด ํด๋น ์ด๋ฒคํธ์ ๋ฐฐ๋์ ์์ธ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ
-
RedDot ์ํ๋ฅผ ํด๋ผ์ด์ธํธ ๋ก์ปฌ ์ ์ฅ์์ ์ ์ฅํ๋ฉฐ, ์ ๋ฐ์ดํธ ์ ์๋์ผ๋ก ๋ฆฌ์ ๋จ
-
์ฃผ์ ์ฝ๋
void UPTEventToggleData::SaveRedDot() { UContentsStorage* ContentsStorage = LocalStorage->GetStorageType<UContentsStorage>(ELocalStorageType::Contents); if (!ContentsStorage->ContentsData.EventIDs.Contains(UniqueID)) { ContentsStorage->ContentsData.EventIDs.Add(UniqueID); ContentsStorage->SaveData(); } }