2018.12.07

(특강)게임 프로그래머 시작하기_유창곤


유창곤 수석 연구원님께서 학교를 방문해 특강을 해 주셨다.


1. 소개

2007 이미르 엔터테인먼트(현 웹젠 자회사)

2010 CCR

2011 넥슨


2. 시작하기

"게임을 만든다"는 나에게 어떤의미인가?

-> 유저들에게 긍정적인 피드백을 받을때의 만족감, 성취감


3. 하는일

- 기획자

컨셉기획자, 시나리오, 시스템기획자 등

- 아티스트

원화가, 픽셀 아티스트, 일러스트레이터, UI 등

- 프로그래머

클라, 서버, 툴, 엔진, 코어, 시스템 등



- 신규 게임 개발

새로운 기술 R&D, 새로운시도, 새로운 시스템 등


- 라이브 게임 개발 (신규보다 많은 부분을 cover함)

기존 있는 게임의 유지 보수

컨텐츠 추가 개발

운영자용 전용 툴

게임 플레이 환경 개선

유저 CS처리


- 신규/라이브 공통부분

기획자 -> (디자이너) -> 프로그래머

프로그래머가 기획자보다 기획 내용을 더 잘아야 한다.


- 잘못된 경우

기획자 <-> 개발자 <-> 디자이너

서로 소통이 잘 안됨


- 격투게임을 만드는 과정(개발자 입장)

여러개의 연속된 frame을 준비해 차례로 넘기면 애니메이션 처럼 동작함.


필요한것: 키입력처리, 충돌판정, 데미지 처리

- 키입력 처리: 특정한 키를 눌렀을 때 필요한 애니메이션을 위해 이미지를 연속 frame으로 띄운다

- 이기거나, 지거나, 큰 타격을 받았을때 필요한 애니메이션을 위해 이미지를 연속 frame으로 띄운다

- 충돌판정: 두 캐릭터의 frame이 겹칠때 data처리를 해준다.

- 충돌영역: frame을 하면 맞지않았는데, 맞았다고 판정 될 수 있으므로, 캐릭터의 크기에 맞게 좀 더 디테일한 처리가 필요하다.


게임을 구성하는 요소: 캐릭터, hp, 승패기록, 키입력 처리 등

- 이 모든것은 별개로 구현한다.


4. 해야할일

- 언어

언어에서 학부에서 배우는것과 실무는 괴리감이 있다.

게임쪽은 C++을 대부분 많이 쓴다.

왜?

객체지향, 빠르다, 메모리 사용량이 매우적다

단점은? 다른 언어에 비해 어렵다.


언어적 측면: 세부적인 부분까지 컨트롤 가능, 다양한 라이브러리 존재

게임적 측면: 화면에 나타나는게 많으므로 최소한의 메모리 사용해야하고, 느린부분은 최대한 배제

매우빠른 렌더링: 게임 반응속도, 적은 메모리 사용량

기타: 프로그램 설치의 장점, 패치 빠름, 리소스는 커도 실행파일 크기는 작다.


속도가 중요하지않고 생산성이 중요한 경우 C++을 사용하지 않는다.

스크립트언어(Python, Lua, Perl 등)을 사용한다. 배워두면 좋다.


- 윈도우 & DirectX9

윈도우 화면에 DX를 초기화 해야한다.

윈도우 프로그래밍과 DX프로그래밍을 배워야한다.


- 본인의 가장 강력한 에디터를 만들어라.

Visual Studio, vi 을 추천!


- 자구/알고

롤에서 타워에 미니언이 들어가면, 

본인팀 챔피언을 공격한 챔피언->대포미니언->근거리 미니언->원거리 미니언->챔피언 

순으로 공격한다.

이때, 정렬(sorting)을 해줘야한다.

그리고 제일 앞에 추가해준다(Queue).


n배열이 있을때, k번째 배열을 삭제한다면?

그 뒤의 data를 모두 복사해 앞으로 붙여야 data의 연속성이 유지가된다.

복사하는데 시간이 오래걸려 비효율적이다.

linked list의 경우 pointer만 변경해 주면된다.

단점은 배열보다 메모리를 많이 쓴다는 점이 있다.


좀 더 빠르게, 좀 더 적은 메모리로!

변경 가능성에 대한 대응. 사용자가 급등할때의 대응. (동적 할당)


- 네트워크

- 로그인

클라이언트와 서버에는 소켓이라는 C++라이브러리가 있다.

각 클라이언트가 로그인정보를 보내면 서버는 DB에 보내 일치하는지 확인한다.

- 동기화

본인 - 서버 - 친구

본인이 서버에 버프 시켜주면, 서버는 동시에 본인과 친구에게 버프 성공이 되었다고 보낸다.

서버는 모든 클라이언트에게 처리를 해줘야하므로, 클라이언트마다 조금씩 다르게 처리를 해 줘야 한다.


- 클라이언트

대부분 신입은 클라이언트로 시작하는 경우가 많다.

클라이언트에서 서버로 넘어가는 경우가 일반적이다.

네트워크도 알아야한다.

OS는 대부분 윈도우 사용.

렌더링 라이브러리 -> DirectX9 이상(빠르다. C++기반이며 하드웨어에 직접 접근해서.)

화면에 보이는 영역 (렌더링)

화면에 보이지 않는 영역 (data)


- 서버

서버는 대부분 경력자를 뽑는 경우가 많다.

서버 기술은 기본적으로 많은 지식과 노하우가 필요하다.

거의 화면에 보이지 않는 영역 (데이터)

구조화 처리 (데이터 흐름)


- DB

아이템을 먹었는데 잘 저장되어있나?

파일에 기록하면? but 문제가 생긴다.

클라이언트 - 로그인서버(1개) - 게임서버(3개) - DB캐시(2개) - DB(2개)

게임시에는 로그인서버를 거치지 않고 클라이언트와 게임서버가 직접 연결 된다.


- 인하우스 툴

- 운영 툴


그래서 해야할것!!!

C/C++

Windows API (C형태이며 꼭 해야함)

MFC (하면 좋음)

DirectX기초 (튜토리얼)

Network(소켓정도 알고있으면됨)


5. 시대적 흐름과 핵심

- 게임개발 접근성이 좋아짐

- 툴의 발달

- but 기본기가 중요하다. 이해하고 만들 수 있어야한다.


- 간단한 게임이라도 하나 만들어보는것을 추천한다. 해보는게 중요하다.

- 혼자는 힘들 수 있으니, 동료를 모집하는것도 좋다.

- 그것이 왜 그렇게 되는지 공부해야한다.


6. 회사가 원하는 것

- 어차피 새로 다배워야한다.

- 전반적인 게임 흐름 이해.

- 코드를 보고 빠르게 익히는 능력

- 끊임없는 자기계발

- 신입에게 당당한 선배되기


7. Q&A

- 넥슨 회사 분위기, 복지, 직원들 만족도는?

분위기 매우 수평적이고, 좋다고 한다. 복지도 좋고, 직원들 만족도도 높다고 한다.


- 게임 회사에서 다른 장르의 회사로 이직하는 경우 잘 되는지?

회사가 커서 다양한 분야를 접할 수 있는데, 잘 배워서 이직하는 경우도 많다고 한다.


Posted by Jyoel :