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
- 넥슨 회사 분위기, 복지, 직원들 만족도는?
분위기 매우 수평적이고, 좋다고 한다. 복지도 좋고, 직원들 만족도도 높다고 한다.
- 게임 회사에서 다른 장르의 회사로 이직하는 경우 잘 되는지?
회사가 커서 다양한 분야를 접할 수 있는데, 잘 배워서 이직하는 경우도 많다고 한다.
'잡지식' 카테고리의 다른 글
말 잘하는 법-나도 10분정도 카메라 앞에서 한주제로 자유롭게 말할수있다! (0) | 2019.01.29 |
---|---|
티스토리 코드넣기! (0) | 2019.01.18 |
디버깅(Debugging)이란? (0) | 2019.01.18 |