어떤맵에서는 플레이어의 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 |