Unreal - GameMode로 맵마다 설정을 변경하기

2025. 5. 15. 12:36·Unreal5 프로젝트 다이어리

어떤맵에서는 플레이어의 UI가 보이던가 안보이던가

플레이어의 몇몇 인풋 (ex공격) 이 막힌다던지

게임모드를 여러개 만들어서 각각 맵에 알맞은 세팅을 해보도록 하겠습니다

 

지금 던전입구맵입니다 해당 맵에서는 스킬의 ui가 보이면 안됩니다 그런데 보이고 있습니다

 

우선 스킬창을 안보이게 해보겠습니다

스킬에 관한 ui를 또다른 캔버스패널 CanvasPanel_Skill을 만든뒤

그 캔버스패널에 자식으로 원래의 스킬 ui를 옮겨주었습니다

 

위젯에서는 반드시 해당 캔버스패널과 BindWidget이 되어있어야하며 이름이 동일해야합니다

UPROPERTY(meta = (BindWidget))
class UCanvasPanel* CanvasPanel_Skill;

 

플레이어의 CameraArmLength와 

UI를 보여줄건지 말건지에 대한 변수를 선언합니다

그리고 해당 변수를 사용할 함수도 생성해주겠습니다

public:
	class ASwordCharacter* player;
	class APlayerController* pCon;
	// setting camera arm
	void SetPlayerCameraArmLength();
	// Setting PlayerUI
	void SetPlayerShowUI();

	UFUNCTION()
	void OnPlayPlayerWidgetReady();

	UPROPERTY(EditAnywhere, Category="MySettings")
	float playerCameraArmLength;

	UPROPERTY(EditAnywhere, Category = "MySettings")
	bool bShowPlayerSkillUI;
};

플레이어와 캐스팅할 player, 컨트롤러와 캐스팅할pCon

카메라암을 설정해줄 함수, UI를 보여줄지말지에대한 설정을 해줄 함수

플레이어가 준비되었을때 UI를 를 설정할 setPlayerShowUI를 호출할 함수

OnPlayPlayerWidgetReady함수 만들고

UPROPERTY값으로 언제든 변수를 설정할수있게 하였습니다

 

카메라의 암과 플레이어의 특정 UI를 보여주거나 숨기는 코드를 추가하였습니다

void ASwordPlayerGameBase::BeginPlay()
{
	Super::BeginPlay();
	pCon = UGameplayStatics::GetPlayerController(this, 0);
	if (pCon)
	{
		player = Cast<ASwordCharacter>(pCon->GetPawn());
	}
	SetPlayerCameraArmLength();
}

void ASwordPlayerGameBase::SetPlayerCameraArmLength()
{
	player->originArmLength = playerCameraArmLength;
}

void ASwordPlayerGameBase::SetPlayerShowUI()
{
	if (bShowPlayerSkillUI)
	{
		player->characterWidget->SetVisibility(ESlateVisibility::Visible);
	}
	else
	{
		player->characterWidget->CanvasPanel_Skill->SetVisibility(ESlateVisibility::Hidden);
	}
	
}

void ASwordPlayerGameBase::OnPlayPlayerWidgetReady()
{
	SetPlayerShowUI();
}

 

캐릭터에서 AddToViewport하는곳에서 게임모드에 있는 ui를 세팅해주는 함수를 호출합니다

ASwordPlayerGameBase* gameMode = Cast<ASwordPlayerGameBase>(UGameplayStatics::GetGameMode(this));
if (gameMode)
{
	gameMode->OnPlayPlayerWidgetReady();
}

 

이렇게 하는 이유는 만약 게임모드 BeginPlay에서 설정한다면

게임모드가 캐릭터가 생성되기전에 먼저 실행되므로 제데로 세팅이 되질않습니다

 

사용할 게임모드를 Level 의 월드세팅에 할당해주겠습니다

 

Property값을 암을 1000, ui의 보여주는 변수를 false로 해주겠습니다

 

SpringArm이 1000으로 변경되어 시점이 더욱 위로 올라가고 스킬의 UI가 보이지않는것을 확인할수있습니다

 

해당맵 에서는 플레이어의 공격 인풋이 들어가면 안됩니다

현재 탭을 누르면 공격모드로 들어가니 Tab을 막아보겠습니다

키를 막을 bool 변수를 선언해줍니다

게임모드를 캐스팅해서 변수에 따른 Tab을 BlockKey함수로 변경해주겠습니다

BlockKey함수는 아무것도 없습니다

또한 인풋을 생성자에서 BeginPlay로 위치를 변동해주었습니다

(이렇게 안하면 Violation Error Null 에러가 납니다)

'Unreal5 프로젝트 다이어리' 카테고리의 다른 글

Unreal - 로딩 창  (0) 2025.05.16
Unreal - 페이드 인 / 아웃  (0) 2025.05.15
Unreal - 쿼터뷰 시점 벽에 붙었을떄 카메라의 이동  (0) 2025.05.15
Unreal - AI의 회피 알고리즘( RVO )  (0) 2025.05.10
Uneal - EQS Strafe이동  (0) 2025.05.10
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 로딩 창
  • Unreal - 페이드 인 / 아웃
  • Unreal - 쿼터뷰 시점 벽에 붙었을떄 카메라의 이동
  • Unreal - AI의 회피 알고리즘( RVO )
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (121) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (3) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 다이어리 (21) N
        • Stack (3)
        • Hash (4)
        • Heap (2)
        • Sort (1) N
      • 코드 개인보관함 (8) N
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    언리얼 비헤이비어트리
    언리얼 로딩
    언리얼 컷씬
    unreal 컷씬
    언리얼 모션매칭
    unreal loading
    언리얼 motionmatching
    unreal 시퀀스
    unreal look at
    언리얼 로딩창
    언리얼 look at
    언리얼
    unreal 로딩
    언리얼 페이드 아웃
    언리얼 behavior tree
    언리얼 behaviortree
    unreal sequence
    unreal 모션매칭
    언리얼 foot step
    언리얼 시퀀스
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - GameMode로 맵마다 설정을 변경하기
상단으로

티스토리툴바