UFDLobbyWidget이라는 C++ 클래스를 부모로 두고, 그걸 상속한 WBP_LobbyWidget을 팀원이 디자인하도록 만들었음
UCLASS()
class FUNNYORDIE_API UFDLobbyWidget : public UUserWidget
{
GENERATED_BODY()
protected:
UPROPERTY(meta = (BindWidget))
UButton* StartButton;
UPROPERTY(meta = (BindWidget))
UTextBlock* WaitingText;
UFUNCTION()
void OnStartButtonClicked();
public:
UFUNCTION(BlueprintCallable, Category = "Lobby")
void UpdateHostUI(bool bIsHost, bool bCanStart);
};
버튼 이름은 StartButton, 텍스트 이름은 WaitingText로만 맞춰주면 색깔/폰트/레이아웃/애니메이션은 자유롭게 해도 됨
(로직을 연결시켜두고 디자인만 맡기는 형태)
클릭 → 서버까지 가는 경로
클라이언트 화면에서 일어난 일이 서버의 GameMode에 닿으려면 PlayerController를 거쳐야 한다.
void UFDLobbyWidget::OnStartButtonClicked()
{
if (AFDLobbyPlayerController* LobbyPC = Cast<AFDLobbyPlayerController>(GetOwningPlayer()))
{
LobbyPC->ServerRPC_RequestStartMatch();
}
}
GetOwningPlayer()로 이 위젯이 누구의 화면인지를 자동으로 찾아오고, 그 컨트롤러의 Server RPC를 호출하면 네트워크를 타고 서버 쪽 _Implementation이 실행됨
문제 (이후 수정 예정)
1초 간격 타이머로 PlayerController가 직접 bIsHost와 현재 인원수를 확인해 위젯에 반영하게 함
(인원이 다 차야 start가 눌리니까)
- 이후에 로직 수정 예정
GetWorldTimerManager().SetTimer(RefreshTimerHandle, this,
&AFDLobbyPlayerController::RefreshLobbyUI, 1.0f, true);
그래도 기본 골격은 만들어놓고 넘기는 게 피차 편할 것 같아서 WBP 골격을 만듦
- Canvas 깔고 그 위에 button과 text 놓고 이름을 정확히 StartButton, WaitingText로 변경
- AFDLobbyPlayerController의 LobbyWidgetClass 슬롯에 WBP_LobbyWidget 끼워넣기


일단 이렇게 만들어두고 나머지 디자인을 팀원에게 맡김
'프로젝트 > Funny Or Die (멀티플레이 술래잡기 게임)' 카테고리의 다른 글
| 정찰 단계(Scouting) 구현하기 (0) | 2026.07.01 |
|---|---|
| Seamless Travel 이후 캐릭터 입력이 먹지 않던 문제 (0) | 2026.07.01 |
| 레벨별 GameMode 분리와 로비 시스템 구현 (0) | 2026.06.30 |
| 술래/숨는자 역할 배정 - 멀티플레이어 캐릭터 분기 스폰 구현 (0) | 2026.06.30 |
| 기술 설계 초안 (0) | 2026.06.26 |
