unreal engine

언리얼 학습일지-13-블루프린트(게임종료조건)

243 2021. 6. 3. 13:47

게임이라고 부를 수 있을 만한 것을 만들어보기

 

의자가 날아가고 슈팅 액션을 할 수 있는 로직을 만들었는데 게임 종료 조건이 없기 때문에 

만들어야 한다.

 

--------------------




 

FirstPersonGameMode 를 더블클릭하여 창을 열어준다.



 

Is Gaming? 변수 생성, 디폴트 값은 체크가 된 상태여야 한다. 즉 체크 된 상태가 이 변수의 True값이어야 한다.

이 변수가 트루일 때 어떤 일이 일어나느냐는 따로 블루프린트를 작성해야한다.

IsGaming?이라는 이름은 우리가 알기 쉽도록 정해둔 이름일 뿐 이게 무엇인지 컴퓨터에 알려줘야 한다.




 

이벤트 그래프에 커스텀 이벤트를 생성해준다. 이름은 이렇게 변경



 

방금 만든 변수를 SET으로 놓고 연결해준다.



 

모든 게임은 종료 조건이 있으므로 이번의 경우에는 시간이 다 되는 것을 종료 조건으로 하기 위해 두가지 변수를 생성한다.

 

제한시간에 도달하면 종료가 되도록 하기 위한 로직은 어떻게 만들 수 있을까?

 

일단 현재시간과 종료시간이라는 변수가 필요하겠다.

 

이 두 변수를 매 초마다 비교하여 현재시간>종료시간이 되었을 때 게임이 종료되도록 해야한다.

 

현재시간은 매 초마다 증가해야한다. (Tick이벤트 사용)

 

이어서

 

 

Tick 이벤트는 초를 세주는 역할을 한다. Branch는 연결된 Condition(상태)가 참인지 거짓인지에 따라 선택지를 나눈다. 

여기서 Condition에는 Is Gaming? 변수를 놔준다.



 

게임이 진행중인 것이 참인 경우에, 또 다시 상태를 묻고 선택지를 나누어야 한다.

 

아까 말햇 듯 이 블루프린트의 목적은 게임 종료 조건 로직을 만드는 것이다.

 

우리의 종료 조건은 지나간 시간(Time Pass)이 종료 시간(End Time)과 같거나 클 경우이기 때문에 게임이 시작하자마자 이 조건을 매초마다 물어야 한다. 

 

때문에 Condition에 ‘ 현재 시간이 종료 시간보다 같거나 큰가? ‘ 를 물어보는 조건문을 연결한다.

 

 

 

 

이 조건문이 참일 경우에는 게임이 종료되어야 하기 때문에 Game Stop 커스텀 이벤트를 연결한다. 

 

거짓일 경우에는 계속 현재시간에 +1초씩을 해야하기 때문에 위와 같이 Delta Seconds와 연결해준다.




----------------------------

 

이것은 계속 날라오는 의자의 블루프린트인데 게임 종료가 돼도 계속 날라오면 안되니까 날라오지 않게 하는 로직을 추가해주어야 한다.

 

 

 

이렇게 했을 때 10초가 지났을 때(게임이 종료되었을 때) 더 이상 의자가 날라오지 않는다.






--------------------------------






 

이것은 위젯 블루프린트 창이다.

팔레트에 text를 검색해서 끌어다 놓으면 텍스트를 소환할 수 있다.

 

당연히 오른쪽 디테일 창에서 여러가지 외형 조건을 변경할 수 있다.





 

 

텍스트를 만들고 변수인지를 체크해야 블루프린트에서 변수로써 활용할 수 있다.





게임을 시작했을 때 타임패스 위젯이 화면에 뜨게 해보자.



 

위젯 블루프린트의 이벤트 그래프에서 Tick 이벤트를 생성하고 FirstPersonGameMode 에 형변환 이벤트를 연결한다. 




 

타임 패스 변수를 텍스트로서 화면에 띄우게 하고 싶기 때문에 텍스트로 변환(ToText)해주고 화면에 띄우기 위해 SetText이벤트와 연결해준다.

 

 타깃이 되는 텍스트는 아까 위젯 블루프린트에서 만들었던 Time이다. (변수인지 체크를 했기 때문에 불러올 수 있는 것이다.)

 

이렇게 하면 현재 시간(지나간 시간)이 나오게 되는데 반대로 남은 시간을 띄우게 하고 싶다면

 

 

이렇게 엔드 타임 - 타임 패스 수식으로 대체하면 그것이 즉 남은 시간이다.





다시 게임모드 블루프린트로 가서



 

게임이 시작되었을 때 바로 위젯을 띄워야 하기 때문에 BeginPlay이벤트에 위젯 생성 이벤트를 연결한다. Class를 위젯BP로 설정하고 Add To VIewport를 연결해야 뷰포트에서 보이게 된다. 





 

틱 이벤트에 시퀀스를 추가하면 남은 총알 수를 나타나게 하는 로직도 만들 수 있다.







---------------

 

 

 

 

 

다 이해하지 못해도 이 쯤 되면 어느정도 블루프린트에 대한 감이 온다.

처음부터 막힘없이 쫙쫙 뽑아내진 못하지만 적어도 따라하며 이게 왜 이렇게 되는지 이해는 할 수 있다는 것.

이 정도면 큰 발전 했다고 생각한다 ! 

 

 

낙곱새 먹고싶어..