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

2025. 5. 15. 12:36·Unreal 프로젝트 다이어리/첫번째 프로젝트

어떤맵에서는 플레이어의 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 에러가 납니다)

'Unreal 프로젝트 다이어리 > 첫번째 프로젝트' 카테고리의 다른 글

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
'Unreal 프로젝트 다이어리/첫번째 프로젝트' 카테고리의 다른 글
  • Unreal - 로딩 창
  • Unreal - 페이드 인 / 아웃
  • Unreal - 쿼터뷰 시점 벽에 붙었을떄 카메라의 이동
  • Unreal - AI의 회피 알고리즘( RVO )
lucodev
lucodev
언리얼 포폴개발 일기
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (236)
      • Unreal 프로젝트 다이어리 (132)
        • 첫번째 프로젝트 (73)
        • 두번째 프로젝트 (59)
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 (52)
        • Stack,Queue (7)
        • Hash (4)
        • Heap (2)
        • Sort (5)
        • Exhaustive search (5)
        • Greedy (2)
        • BFS , DFS (7)
        • Graph (2)
        • Dynamic Programming (1)
        • C++ Math (2)
        • 기타 문제 (14)
      • C++ 백준 (5)
      • C++ 팁 (1)
      • 개인 코테 & 스타디 <비공개> (29)
        • 코드 개인보관함 (9)
        • 코딩테스트+@ (11)
        • 알고리즘 스타디 (6)
        • 알고리즘 스타디 과제 (3)
        • 비공개 (0)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

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

    언리얼 세키로
    언리얼 ui
    언리얼 시퀀스
    언리얼 parkour
    unreal 인벤토리
    언리얼 비헤이비어트리
    unreal
    언리얼 behavior tree
    언리얼 컷씬
    언리얼
    언리얼 behaviortree
    unreal npc
    unreal 파쿠르
    언리얼 인벤토리
    언리얼 인터렉션
    unreal 상호작용
    언리얼 상호작용
    언리얼 파쿠르
    unreal inventory
    unreal 세키로
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - GameMode로 맵마다 설정을 변경하기
상단으로

티스토리툴바