컴퓨터 그래픽스 : 수학/게임 수학

[게임 프로그래머 입문 올인원] 게임수학 : 포트리스 모작 #2 (100강)

순정법사 2024.04.16

B. 포트리스 모작 #2

5. 플레이어 턴제 만들기

위에서 만든 플레이어 특성으로 턴제를 구현

플레이어 아이디, 플레이어 턴을 구현해주고 추가적으로 포신의 각도도 추가해줌 

 

a. 플레이어 턴제 생성하기

포신의 각도와 정보를 얻을 함수를 조금 더 추가해주기

 

플레이어 턴일때에만 움직일 수 있게 구현하고

 

각 플레이어의 특성을 잡아준다

 

여기까지 하면 이렇게 플레이어턴인 첫 번째 탱크만 활성화되어 움직인다

 

b. 플레이어 UI 생성하기

각 플레이어가 가지고 있어야 하는 UI를 넣어주기

 

원래 이렇게 하드코딩 하지않고, 툴을 이용해 데이터를 빼서 사용함

 

그럼 이렇게 원이 나옴 (활성화된 플레이어라는 뜻)

 

🔎 UI와 구현에 대한 고민하기

UIManager에서는 UI에 필요한 모든 데이터를 이렇게 가지고 있음

즉 이곳에 대한 정보를 UIManager에서 들고있는데

 

UI도 모든 부분을 각자 렌더링해주고 있음

 

그중 RenderTime을 살펴보면 :: 폰트를 만들어주고 / 텍스트를 출력하고 있음 

 

근데 UI를 위해 내부적으로 가지고있는 remainTime말고 시간을 어떻게 관리할지 고민


👉 먼저 UIManager의 싱글톤인 특성을 가지고 SetRemainTime을 고쳐 시간을 관리해보자

(결론적으로 말하면 문제점이 있음)

 

c. 게임씬에서 시간과 턴제 구현하기

포트리스 씬에서 턴제와 합산시간 멤버를 구현해주고 + 함수

 

플레이어턴은 0번부터 시작인데 1인이유는 아래에 나옴!

 

UI에서 사용하는 시간을 가져와서 시간을 갱신해줌

 

다음 플레이어 턴인 유저를 찾고, 턴 속성을 변경해준다 + UI를 리셋해주기

 

UI를 초기화해주는 부분을 실행하기 위해 Init에서 한번 실행해주는데, 이때 _playerTurn이 +1이 되니 처음 초기화를 1로해서 0부터 시작하도록 함!

 

이렇게 위에서는 UI에서 데이터랑 관련된 코드를 들고있는데
규모가 커지면 문제가 크게 생김 

UI는 UI를 위해 정보를 들고있어야 하지 원본 데이터와 비슷한 느낌으로 사용하게 되면 
나중에 인벤토리와 같은 다양한 사양이 묶여있을 경우
모든 데이터를 UI에 접근해서 관리해야한다는 소리가 됨 

🌟 따라서 이중으로 관리하는 한이 있어도 꼭 별도로 분리해서 관리해야 함!

 

여기까지 구현하면 이렇게 턴따라 잘 플레이어가 이동이 되고, 아래 바람 방향도 매번 달라지는걸 볼 수 있음

 

원래 100번째 강의는 더 이어지는데,

글이 너무 길어져서 가독성을 위해 포트리스 모작 #3으로 넘어감

 

 

 


출처 :https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8-%EC%9E%85%EB%AC%B8-%EC%98%AC%EC%9D%B8%EC%9B%90-rookiss#curriculum

 

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -

어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프

www.inflearn.com