본문 바로가기
언리얼엔진 개발/VR

[UnrealEngine5]버튼을 누르면 문 열고 닫기 C++ (3)

by yeni_0224 2023. 4. 25.
728x90
반응형

나를 힘들게 한 bool변수

나를 헷갈리게 한 bool변수

사실 이 어려움의 원인은 역시 나로부터 있다.

사람들과 나의 현 진행상황을 공유하며 피드백을 얻은 결과

내가 생각보다 너무 어렵게 접근하여 풀어가고 있다는 것을 알 수 있었다.

그냥 door-> 이런식으로 접근해도 되었던것같은데 delegate를 사용한다던가

구조 짠 형태가 아쉽지만, 그래도 이번 기회를 통해서 delegate 함수의 사용법도 익힐 수 있었고,

다음 번에 다른 것 구조를 짤 때는 전보다 성장해 있을것이다..

 

이전 게시물에서는 버튼을 누르면 문을 열고 닫을 수 있도록 하는 것이었고

https://yeni-0224.tistory.com/entry/UnrealEngine%EB%B2%84%ED%8A%BC%EC%9D%84-%EB%88%84%EB%A5%B4%EB%A9%B4-%EB%AC%B8-%EC%97%B4%EA%B3%A0-%EB%8B%AB%EA%B8%B0-C-2

 

[UnrealEngine]버튼을 누르면 문 열고 닫기 C++ (2)

이제는 Trigger Box에 닿았을 때가 아니라 버튼을 눌렀을 때 문을 열고 닫을 수 있도록 할 것이다. 문을 열고 닫게 하는 Door Button Class를 만들어주었고, 문을 열고 닫도록 Delgate를 사용해서 Door에 문

yeni-0224.tistory.com

이번에는 스테이지가 끝났을 때만 문을 열고 닫을 수 있도록 설정하는 것이다.

다른 클래스의 Stage 정보  ---> Door Button ----> Door

이런 형태로 정보가 전달된다.

public:
	class ADoors* door;
	//델리게이트 받으면 버튼 활성화 되도록
	bool bCanButtonClicked;
	//문이 한번 열고 닫혔었는지
	bool bOpened;

bool변수를 활용해서 조건을 나누어 원하는 함수를 실행할 수 있도록 해주었다.

일단 델리게이트 받으면 플레이어가 버튼을 눌렀을 때 버튼이 활성화 되도록 해주기 위한 bool

그리고 스테이지가 클리어 된 후 문이 한번 열리고 닫혔는지 확인하기 위한 bool

이렇게 두가지 변수를 사용해주었다.

ARoomManager* rm = Cast<ARoomManager>(UGameplayStatics::GetActorOfClass(GetWorld(), ARoomManager::StaticClass()));
	rm->stageClearDele.AddUFunction(this, FName("CheckClearStage"));

beginplay에서 델리게이트 함수 바인딩 해주면

void ADoorButton::CheckClearStage()
{
	UE_LOG(LogTemp, Warning, TEXT("CheckClearStage Function"))
	bCanButtonClicked = true;
}

여기서는 버튼 활성화 여부에 대한 변수만 체크해주고

Overlap되었을 때 문 여는 함수를 호출하도록 해주었다.

Overlap이 되는 조건은 bCanButtonClicked가 true일 때라고 한 번 더 if문으로 묶어주었다.

 

가장 복잡했던 부분은 역시 이 조건을 만드는 것

void ADoorButton::ReportOpen()
{	
	UE_LOG(LogTemp, Warning, TEXT("ReportOpen!!"))	
	openDoorDele.Broadcast();
	
	if(bOpened == false)//한번 열렸다.
	{
		bOpened = true;
	}
	else
	{
		bOpened = false;
		bCanButtonClicked = false;
	}
}

이렇게 보니까 너무 간단해보이지만.

이걸 완성하기 까지 몇시간이나 잡혀있었는지..

스스로에게 화가 얼마나 많이 났는지.. 모른다..

너무 답답했따..!!

어떤 조건을 만족했을 때 문을 열고 닫을지 구성을 몇번이나 바꿔보고

식도 바꿔보고, true false 도 계속 바꿔보기도 했다.

그리고 난잡해진 식을 다시 깔끔하게 정리하고 최적화 한 것이다!

 

이제 하나 더 남았다.

스테이지가 클리어 됐을 때 스테이지에 설치된 모든 문들이 한번에 열리도록 해야하는데

현재 한 개만 열리는 상태이므로 이 부분을 수정해줘야한다!

이 글을 작성한 날 해결했지만 이미 프로그래머스 풀이들도 업로드 예정에 있기 때문에 아마 며칠 뒤에 업로드하지 않을까 생각한다. 사람들이 얼마나 보겠어? 싶지만...ㅠ

문에 얼마동안 잡혀있는지 아찔하지만 그래도 뿌듯하긴 하다.

내적 비명  / (=____=)  /

 

다음 편에 계속 >>>>

728x90
반응형