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

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

순정법사 2024.04.15

A. 포트리스 모작 #1

1. 포트리스 뼈대잡기

a. UIManager 및 리소스 추가하기

받은 Resources 파일을 원래 작업하던 곳에 넣어주고

 

엔진과 관련이 없고 컨텐츠쪽이니 Game에 넣어주기

 

UIManager은 UI의 세부적인 좌표 엔진내용

그려줘야하는 UI의 좌표를 다 잡아줘서 설정해주는 용도

 

b. 수치를 나타내는 Values.h 파일 추가하기

값을 저장할 Values 생성

 

자주 사용할 값들을 넣어주고

 

pch.h 파일에도 추가해준다

 

c. ResourceManager 수정하기

받은 Resources 추가해주고 플레이어는 삭제

 

d.Fortress 게임 뼈대잡기

게임안에 Fortress 폴더를 만들어서 생성

 

  • MenuScene : 게임 시작하자마자 보여줄 화면 
  • FortressScene : 게임화면

 

둘 다 Scene을 상속받아서 구현

 

Fortress도 동일하게 작업해주기

 

e. SceneManager에 Scene 추가해주기

씬매니저에서 새로만든 씬 추가하기

 

두개 넣어주고

 

SceneType에도 추가

 

Game 시작시 MenuScene으로 보이게 변경도 해준다

 

2. 씬 구현하기

a. MenuScene 구현하기

Update에서는 키 누르면 바로 게임화면으로 넘어가게 해주고

 

렌더링하는 코드 생성

 

➡ 온라인 게임이면 여기서 네트워크 통신이 들어가게 됨

 

물론 추가해주면서 헤더도 포함해주기

 

여기까지 빌드하면 이런화면, 여기서 e버튼을 누르면 다름 화면으로 넘어가게 함

 

b. FortressScene 구현하기

포트리스 UI를 만들어주고

 

💙 UIManager처럼 UI를 Manager로 사용하는게 좋을까?

UI가 여러개, 다른 씬에서는 활용하려면 매니저에서 들고있는건 좋은 방법이 아님 
UI도 Scene처럼 Base객체를 파서 UI를 그려주는 객체를 파서 로딩하는 방법이 더 좋음 

💥 하지만 약간 복잡해서 여기선 그냥 매니저를 사용 

 

UI를 렌더링해주기

 

여기까지 하면 이렇게 UI를 볼 수 있음

 

UI설명을 하자면 위와같음

 

먼저 플레이어부터 등장시킬것임

 

 

3. 플레이어 등장하기

게임을 제작할 때에는 게임의 순서대로 제작하는게 좋음

 

a. 플레이어 특성 생성하기

1) 코드 정리하기

 

저번에 만들었던 코드들 지워주고 기본만 생성해줌

 

미사일을 사용안할 예정이니 미사일 코드를 사용하던건 다 삭제해줌

 

2) 플레이어 코드 작성하기

 

타입은 enum으로 관리

 

플레이어 타입과, 타입을 알기위한 함수도 작성해준다 (enum도 추가해주기)

 

위와같이 직업군에 따라서 처리가 다르게 되어야한다면, 별도의 함선을 빼서 이렇게 직업별로 코드를 다르게 작성하는게 좋음

 

그렇다면 설정한 플레이어타입으로 렌더링 될 수 있게 GetMeshKey 로 바꿔준다

 

b. 플레이어 등장하기

포트리스씬에서 사용할 헤더 모두 추가해주고

 

플레이어를 생성, 플레이이어의 멤버변수를 각 원하는 값으로 세팅, 포지션 설정해주고 끝내기

 

업데이트시에는 deltaTime은 기본 / 물론 복사방식으로 순회해야함

 

마찬가지로 순회하면서 렌더링해주기

 

그럼 이렇게 두개의 플레이어(대포)가 나옴

 

c. 플레이어 크기 수정하기

1) 수정하는 코드 생성하기

 

위에서 생성한 플레이어는 메쉬로 구성되어 있음

이 메쉬는 기준점에서 얼마나 떨어져있는지를 상대좌표로 가져 크기를 구함 

 

  1. 파싱할때 처음 최대, 최소값을 기억해주기
  2. 렌더링할때 원하는 비율에 따라가지고 x,y에 대한 보정값을 전달받아 작업을 하게 됨

 

렌더링시 비율을 지정하게 width, height 추가해주고, 비율값 넣어주기

 

cpp로 와서 당연히 함수 수정해주고

 

렌더링시 파일의 가로, 세로값을 구해주기 (처음 값)

 

코드에서 지정한 비율을 곱해 크기를 수정할 수 있게 함

 

2) 매쉬 비율 수정하기

 

Player 코드에서 비율을 정해서 크기를 수정해주면

 

위와같이 0.5배된 크기가 나온다

 

🧡 만약 음수값을 넣으면 어떻게 될까?

이렇게 좌표에 음수값을 넣어주면

 

좌(양수) / 우(음수) : 이렇게 물체의 상대좌표 기준 좌우반전인 그림이 나옴 


👉 이를 이용해서 좌우반전이 필요할 때 스케일에 -1을 곱하는 형식을 많이 사용함

 

여기까지 했다면 이런 그림이다 ㅎ_ㅎ

 

4. 플레이어 이동 구현하기

왼/오른쪽 키에 따라서 고개를 그쪽 방향으로 돌려주고, 이동하는 코드를 생성

 

a. 플레이어 방향 특성 생성하기

플레이어보다 오브젝트의 특성이니 오브젝트에 방향 코드를 생성해주고

 

자주 사용할 enum이미 Enums.h에 생성해준다 (플레이어 타입도 하는김에 넣어주기)

 

b. 플레이어의 방향 바꿔주기

플레이어 키에 맞춰서 방향값을 바꿔준 후

 

바꿔진 방향값에 따라 다른 렌더링을 해주면 된다

 

실행해보면 이렇게 좌우반전이 잘 되는걸 볼 수 있다!

 

 

 


출처 :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