Top

[UDK 개발자를 위한]
언리얼스크립트 게임 프로그래밍

  • 원서명Unreal Development Kit Game Programming with UnrealScript: Beginner's Guide (ISBN 9781849691925)
  • 지은이레이첼 코돈
  • 옮긴이이강훈
  • ISBN : 9788960773851
  • 40,000원
  • 2013년 01월 23일 펴냄
  • 페이퍼백 | 564쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 게임 개발 프로그래밍

책 소개

이 책은 언리얼스크립트 언어를 이용해서 언리얼 개발 키트(UDK)에 기초한 게임을 프로그래밍하는 방법을 소개한다. UDK는 언리얼 엔진의 무료 버전으로서 그 강력한 기능과 유연한 확장성으로 게임 개발자들에게 널리 알려져 있다. 언리얼스크립트의 기초와 활용법을 체계적으로 설명한 자료가 매우 귀한 현실에서, 이 책은 UDK로 게임을 만들고자 하는 개발자에게 어둠 속의 등불과 같은 지침서가 되어줄 것이다. UDK와 프로그래밍 그 어느 쪽도 접해본 적 없는 독자를 대상으로 쉽고 친절하게 구성되어 있어서, 누구라도 이 책의 안내에 따라 하나의 예제 게임을 완성시켜가다 보면 어느새 UDK를 자유롭게 프로그래밍할 수 있는 실전 능력을 갖추게 될 것이다.


[ 소개 ]

언리얼스크립트 게임 프로그래밍에 흠뻑 빠져서 배우게 만드는 초보자를 위한 실전 가이드

UDK는 수백여 개의 상업용 게임에 사용된 언리얼 엔진의 무료 버전이다. 언리얼 엔진은 게임 개발을 위한 매우 강력한 툴임에는 틀림없지만 엄청난 복잡성 때문에 어디에서부터 배워야 할지 감을 잡기 어렵다.

이 책은 UDK의 핵심 요소인 언리얼스크립트를 사용해서 어떻게 게임을 만드는지 알기 쉽게 설명한다. 하나의 예제 게임을 직접 만들어나가는 과정을 통해 어느새 자기만의 게임을 만들 수 있는 능력을 갖게 될 것이다.


[ 이 책에서 다루는 내용 ]

■ UDK 프로젝트의 개발 환경을 구축하고 코드를 컴파일하고 테스트하는 방법
■ UDK에서 제공하는 코드를 확장하여 새로운 기능 구현
■ 자신만의 새로운 게임 규칙, 카메라 제어방식, HUD 만들기
■ 언리얼스크립트와 키즈멧을 연동하고 새로운 키즈멧 액션과 이벤트 정의하기
■ 온라인에서 실행되는 멀티플레이어 게임 개발과 테스트
■ 오류를 수정하고 코드를 최적화하는 노하우
■ DLLBind를 통해 UDK 외부 코드와 상호작용하기


[ 이 책의 대상 독자 ]

이 책은 UDK를 처음 접하지만 언리얼스크립트를 이용해서 자신만의 게임 프로젝트를 만들고자 하는 사람들을 위한 것이다. 이 책에서 제공하는 정보들은 다른 프로그래밍 언어에는 익숙하지만 언리얼스크립트를 배워서 그 지식을 더욱 확장하고자 하는 이들에게도 유용할 것이다.


[ 이 책의 구성 ]

1장 '프로젝트 셋업과 테스트 환경 구축'에서는 UDK뿐 아니라 이 책에서 코드를 작성하며 사용하게 될 콘텍스트(ConTEXT)와 언코드엑스(UnCodeX)라는 두 가지 프로그램을 설치하고 설정하는 과정을 안내한다. 또한 UDK의 폴더 구조를 확인하고 설정 파일들을 살펴본다.

2장 '데이터의 저장과 조작'에서는 UDK에서 사용할 수 있는 여러 종류의 변수들을 알아보고, 게임 속에서 지속적으로 변하는 환경에 대응하기 위한 흐름제어 문법을 배운다.

3장 '클래스 트리의 이해'에서는 게임 세계에 존재하는 객체들 간의 관계를 파악할 수 있는 클래스 트리를 다룬다. 클래스의 상속과 함수 재정의를 통해 객체의 행동양식을 제어하는 방법을 배울 것이다.

4장 '사용자 고유 클래스의 제작'에서는 직접 자신만의 클래스를 만드는 과정에 초점을 맞춘다. 어느 UDK 프로젝트에서나 사용되는 핵심 클래스들에 대해 논의하고, 우리만의 게임을 만들기 위해 이들 클래스를 변용하는 방법을 설명한다. 그 과정에서 카메라의 작동방식, 게임의 규칙, 그리고 플레이어의 제어방식을 직접 변경해본다.

5장 '함수의 활용'에서는 함수를 사용해 게임을 확장하는 방법을 배운다. 하나의 객체로부터 다른 객체로 정보를 전달하는 방식, 데이터를 조작하고 그것을 원래 객체에 되돌려주는 방식 등이 여기에 포함된다. 자체적으로 새로운 함수를 만들면 기존 UDK 클래스에는 존재하지 않는 새로운 기능을 객체에 부여할 수 있다.

6장 '스테이트를 이용한 행동 제어'에서는 스테이트가 무엇인지 설명하고 이를 활용하여 게임에 등장하는 적들의 복잡한 행동을 구성하고 제어한다. 스테이트를 만들고, 변경하고, 그 내부 함수를 정의하는 방법 등을 논의한다.

7장 '키즈멧의 활용'에서는 UDK 게임에서 키즈멧을 어떻게 활용할 수 있는지 살펴보고, 새로운 액션과 이벤트를 만드는 방법을 배운다. 이들 액션과 이벤트를 이용하여 레벨에 따라 특징적인 게임 플레이를 구성하는 과정을 보인다.

8장 '멀티플레이어 게임 개발'에서는 테스트 목적으로 클라이언트와 서버를 한 대의 컴퓨터에서 실행시키는 과정을 설명한다. 또한 네트워크 코드를 작성하는 기본 방식 및 멀티플레이어 게임을 염두에 두고 게임을 디자인하는 방법을 다룬다.

9장 '디버깅과 최적화'에서는 언리얼스크립트 코드를 컴파일하고 실행할 때 흔히 마주치게 되는 오류와 이들 문제를 해결하는 방법을 소개한다. 또한 코드를 최적화하여 게임의 수행 속도를 빠르게 하는 여러 가지 방식에 대해서 논의한다.

10장 '그 밖의 주제'에서는 컴포넌트를 이용하여 게임에 등장하는 객체의 겉모습을 제어하는 방법과, DLLBind를 이용하여 UDK 외부의 프로그램에 접근하는 방법을 설명한다.

저자/역자 소개

[ 저자 서문 ]

독자 여러분을 환영한다! 이 책은 독자 스스로 UDK를 이용한 게임 프로젝트를 진행할 수 있도록 언리얼스크립트 언어로 프로그래밍하는 방법을 알려준다. 딱딱한 가공의 코드를 보여주는 대신, 각 장에서 배우는 주제에 따라 실제로 작동되는 게임을 조금씩 쌓아 올릴 것이다. 이 책이 끝날 때쯤이면 자신만의 프로젝트를 시작할 수 있을 정도로 언리얼스크립트에 익숙해져 있을 것이다.


[ 저자 소개 ]

레이첼 코돈(Rachel Cordone)
디자이너이자 독학으로 언리얼스크립트를 배운 프로그래머다. 언리얼 엔진으로 작업해온 것은 1999년부터다. 2003년부터 파이프웍스 소프트웨어(Pipeworks Software)와 파슨스 브링커호프(Parsons Brinkerhoff) 등의 게임 및 시뮬레이션 회사에서 일했고, 직접 스터번 홀스 스튜디오(Stubborn Horse Studios)를 설립하여 언리얼 개발 키트를 이용한 인디 게임을 개발하고 있기도 하다. 스터번 홀스의 첫 번째 프로젝트인 프로메테우스(Prometheus)는 에픽 게임즈(Epic Games)의 메이크 섬씽 언리얼 콘테스트(Make Something Unreal Contest)에서 여러 개의 상을 받았다.


[ 옮긴이의 말 ]

언리얼 엔진은 비교적 오랜 역사와 강력한 기능 덕분에 게임 개발자라면 누구나 한 번쯤 들어봤을 법한 유명한 게임 엔진이다. 원래는 언리얼(Unreal)이라는 제목의 1인칭 슈팅 게임을 제작하기 위한 목적으로 만들어졌지만, 이후 독자적인 발전을 거듭하면서 다양한 장르의 게임에서 성공적으로 활용되고 있다. 언리얼 엔진의 유연한 모듈 기반 아키텍처와 스크립팅 기능은 아마추어 개발자들도 쉽게 기존 게임을 변형하고 확장하여 자신만의 새로운 게임을 만들 수 있는 길을 열어주었다. 하지만 이렇게 만들어진 게임들을 공식적으로 발매하고 유통하려면 기존 언리얼 엔진에 연계된 높은 비용의 라이선스를 획득해야 하는 만만치 않은 장벽을 넘어서야 했다. 언리얼 엔진의 개발사인 에픽 게임즈가 이 같은 수요에 부응하여 2009년에 공개한 것이 바로 이 책에서 다루고 있는 언리얼 개발 키트(이하 UDK)다. 게임 개발자는 무료로 배포되는 UDK를 이용하여 언리얼 엔진의 모든 기능을 활용할 수 있는데다가 소정의 라이선스 비용과 로열티만 지불하면 그 결과물을 상업적으로 판매하는 것도 가능하다. 여가시간을 활용하여 게임을 만드는 개인 개발자나 큰 자본을 갖추지 못한 인디 개발사에게 이는 매우 반가운 소식이다.

UDK를 본격적으로 활용해보고자 할 때 맞닥뜨리게 되는 가장 큰 난관은 십중팔구 언리얼스크립트(UnrealScript)가 아닐까 싶다. UDK 에디터의 경우에는 책이나 튜토리얼 동영상, 블로그 게시물 등 접근 가능한 자료의 양이 꽤 많고, 상당 부분 한글화도 이루어져 있기 때문에 비교적 배우기가 쉽다. 반면 언리얼스크립트에 대해서는 체계적이고 상세하게 가르쳐주는 자료, 더군다나 우리말로 되어있는 자료를 구하기란 쉽지 않다. 간혹 찾을 수 있는 문서들은 각 기능에 따른 단편적인 지식들만 제공하고 있어서 이들 기능을 하나로 꿰어 원하는 새로운 기능을 구현하려면 어디서부터 어떻게 시작해야 할지 막막하기 일쑤다. 언리얼스크립트가 기존의 언어, 이를테면 C/C++나 자바, 혹은 자바스크립트 등의 언어와 유사한 부분이 많은 것도 사실이지만, 이들 언어를 잘 알고 있다고 해도 게임 프로그래밍을 위해 특화된 언리얼스크립트만의 독특한 문법과 구조에 대해서는 새롭게 배워야 할 것이 적지 않다.

이 책은 UDK와 프로그래밍 그 어느 쪽도 접해본 적 없는 독자를 대상으로 놀라울 정도로 쉽고 친절하게 그 두 마리 토끼를 동시에 잡도록 차근차근 안내한다. 내가 처음 이 책의 원서를 접한 후에 가장 먼저 확인한 것은 아마존 웹사이트에 올라온 서평이었다. 일반적으로 좋은 평가를 받는 책이라 해도 간혹 부정적인 서평이 끼어있기 마련인데, 이 책은 칭찬 일색의 서평으로 가득했다. 특히 많은 이들은 이 책을 일반적인 의미에서 ‘객체지향 프로그래밍을 쉽게 가르치는 책’으로 평가하고 있었다. 수년간 초보자를 대상으로 프로그래밍 강의를 진행하면서 매번 그 어려움을 절감해오던 터라 이러한 평가는 책에 대한 호기심을 자극하기에 충분했다. 결국 직접 이 책의 번역을 맡아 처음부터 끝까지 읽고, 실험하고, 우리말로 옮기는 과정을 거치면서 나 역시 다른 평자들과 동일한 결론에 도달하게 되었다.

UDK와 언리얼스크립트를 이용해서 다수의 게임을 직접 개발해온 저자는 그 해박한 지식과 실전 경험을 바탕으로, 초보자가 단순히 따라하는 것부터 시작해서 조금씩 변형하거나 확장해나가고 종국에는 원하는 것을 자유롭게 구현할 수 있도록 안내하는 최적의 경로를 제시한다. 각 단계마다 새롭게 배우는 언리얼스크립트의 문법과 기능은 곧바로 예제 게임에 적용되어 독자는 그 결과를 눈으로 확인할 수 있다. 또한 처음에 아주 간단한 형태로 시작된 게임은 여러 단계가 쌓이면서 점차 복잡하고 정교하고 흥미로워진다. 그 과정에서 저자는 까다로운 수학적 언어 대신 한결같이 편안한 일상적 언어를 통해 독자들에게 친근하게 다가간다. 쉬운 언어를 쓴다고 해서 내용의 깊이가 얕은 것도 아니다. 특히, 객체지향적 코드 설계에 대한 구체적인 조언과 네트워크 코드의 동작에 대한 자세한 설명은 독자가 좀더 높은 수준의 개발자로 발돋움하는 데 필요한 기초를 충실하게 제공한다. 한 권의 책 안에서 이처럼 다방면의 주제에 대해 중심을 잃지 않고 하나의 흐름으로 전개한 것만으로도 저자가 이 분야에 얼마나 깊은 내공을 갖고 있는지, 그리고 완성도 높은 책을 만들기 위해 얼마나 많은 노력을 기울였는지 엿볼 수 있다.

나는 2012년 봄에 이 책의 번역을 시작했고, 원래는 같은 해 여름까지 번역을 마무리해서 2학기에 개설되는 ‘게임설계’라는 강의에서 완성된 번역서를 활용하고자 했다. 하지만 그 동안 몇 권의 책을 번역하면서 늘 겪었던 것과 마찬가지로, 이번에도 역시 계획보다 한참이나 늦게 마무리가 되었다. ‘게임설계’ 강의에서는 아쉬운 대로 원서의 내용을 바탕으로 진행했는데, 그 결과는 예상보다 만족스러웠다. 강의를 듣기 전까지만 해도 UDK에 아무 경험이 없던 학생들이 이 책에서 제시된 설명과 예제 코드를 통해 언리얼스크립트를 익히고, 한 편으로는 튜토리얼 동영상이나 블로그 게시물을 참고해 에디터 사용법을 배움으로써 한 학기라는 짧은 시간 안에 하나의 완성된 게임을 만들어낼 수 있다는 사실이 매우 인상 깊었다. 또한 저수준 API에 의존할 때에 비해 세부적인 구현에 소모되는 시간이 대폭 줄어들었기 때문에 보다 많은 시간을 게임 기획과 설계에 투자함으로써 게임 그 자체의 완성도를 전반적으로 크게 향상시킬 수 있었다. 이 번역서를 손에 쥔 독자 여러분도 제시된 흐름에 따라 모든 예제를 하나씩 구현하고, 실험하고, 탐구하는 과정을 통해 만족스러운 성과를 얻으리라 기대한다.

- 2013년 1월 어느 늦은 저녁
노원구 월계동의 연구실에서
이 강 훈


[ 옮긴이 소개 ]

이강훈
광운대학교 컴퓨터소프트웨어학과에서 조교수로 재직 중이다. 서울대학교 컴퓨터공학부에서 학사 및 석사 학위를 받았고, 컴퓨터그래픽스 분야의 연구로 동일 학부에서 박사 학위를 받았다. 캐릭터 애니메이션, 게임 인공지능, 인간-컴퓨터 상호작용 등의 분야에 많은 관심을 가지고 있다. 좀더 자세한 정보는 개인 홈페이지(http://cg.kw.ac.kr/kang)에서 확인할 수 있다.

목차

목차
  • 1장 프로젝트 셋업과 테스트 환경 구축
    • 시스템 요구사양
      • 최소 요구사양
    • 실습 예제 | UDK 설치하기
    • 폴더 구조의 개요
      • Binaries
      • Development
      • Engine
      • UDKGame
    • 코딩을 위한 외부 프로그램의 사용
      • 콘텍스트
    • 실습 예제 | 콘텍스트 설치하기
    • 실습 예제 | 콘텍스트 환경설정
      • 언코드엑스
    • 실습 예제 | 언코드엑스 설치하기
    • 실습 예제 | 언코드엑스 환경설정
      • nFringe
      • WOTgreal
    • 프로젝트 셋업
    • 실습 예제 | AwesomeGame 프로젝트의 생성
    • 컴파일과 테스트
    • 실습 예제 | AwesomeActor를 컴파일하고 테스트하기
      • 주석에 관한 짧은 조언
    • 요약
  • 2장 데이터의 저장과 조작
    • 변수와 배열
      • 불리언 변수
    • 실습 예제 | 불리언 변수의 사용
      • 정수와 실수
    • 실습 예제 | 정수의 사용
    • 실습 예제 | 실수의 사용
      • 문자열
    • 실습 예제 | 문자열의 사용
      • 열거형
    • 실습 예제 | 열거형의 사용
      • 배열
    • 실습 예제 | 배열의 사용
      • 동적 배열
    • 실습 예제 | 동적 배열의 사용
      • 구조체
    • 실습 예제 | 구조체의 사용
      • 벡터
    • 실습 예제 | 벡터의 사용
      • 회전자
    • 실습 예제 | 회전자의 사용
    • 변수의 속성
      • 기본속성 영역
    • 실습 예제 | 기본속성 영역의 사용
      • 편집 가능한 변수
    • 실습 예제 | 편집 가능한 변수의 사용
      • 설정 변수
    • 실습 예제 | 설정 변수 만들기
    • 일반 연산자
      • 표준 산술연산
    • 실습 예제 | 수학!
      • 나머지 연산자
    • 실습 예제 | 나머지 연산자의 사용
      • 비교 연산자
    • 실습 예제 | 비교
      • 논리 연산자
    • 실습 예제 | 논리 연산자의 사용
      • 결합
    • 실습 예제 | 결합 연산자의 사용
      • 변수와 관련된 함수들
        • 정수 관련 함수
        • 실수 관련 함수
        • 문자열 관련 함수
        • 벡터 관련 함수
        • 회전자 관련 함수
    • 흐름 제어
      • If else
    • 실습 예제 | if/else의 사용
      • For
    • 실습 예제 | for의 사용
      • While
    • 실습 예제 | 무한 반복
      • Do until
      • Switch
    • 실습 예제 | switch의 사용
      • Return
      • Goto
    • 요약
  • 3장 클래스 트리의 이해
    • 클래스란 무엇인가?
    • 실습 예제 | 모든 객체는 동일하게 탄생한다
    • 상속
    • 실습 예제 | 클래스 트리에서 상속 확인하기
    • 실습 예제 | 자체 무기의 제작
    • 실습 예제 | 상속을 이용한 실험
    • 함수 재정의
    • 실습 예제 | 고유한 GameInfo와 PlayerController 만들기
    • 실습 예제 | 함수 재정의 실험
    • 변수로서의 액터
    • 실습 예제 | Actor 변수를 이용한 실험
    • 캐스팅
    • 실습 예제 | 액터 변수의 캐스팅
    • 실습 예제 | 캐스팅 적용의 실제적인 사례
    • 요약
  • 4장 사용자 고유 클래스의 제작
    • 클래스 만들기
      • Awesome Game의 급조된 기획 문서
      • 클래스 구성하기
        • 무기
    • 실습 예제 | 무기 클래스의 제작과 상속
    • 클래스 변경자
      • Placeable
      • Notplaceable
      • Abstract
    • 실습 예제 | abstract 변경자의 사용
      • Native
      • Config
      • Hidecategories
    • 실습 예제 | hidecategories 변경자의 사용
      • Hidedropdown
    • Object 클래스와 Actor 클래스
    • 주요 언리얼스크립트 클래스들
      • GameInfo 클래스
    • 실습 예제 | AwesomeGame의 확장
    • 실습 예제 | 무기 발사!
    • 실습 예제 | Pawn 클래스 다듬기
      • Controller 클래스
    • 실습 예제 | Controller 클래스의 확장
    • 실습 예제 | 아니, 내 왼쪽이라고!
      • Pawn 클래스
    • 실습 예제 | 충돌해서 피해 입히기
    • 실습 예제 | 이동하는 적 만들기
      • HUD 클래스
    • 실습 예제 | HUD의 사용
    • 요약
  • 5장 함수의 활용
    • 함수란 무엇인가?
    • 함수의 정의와 호출
    • 실습 예제 | 함수 작성하기
    • 실습 예제 | 직접 만든 함수 호출하기
    • 실습 예제 | 오작동 해결하기
    • 지역 변수와 객체 변수
      • 지역 변수
    • 실습 예제 | 지역 변수 사용하기
      • 액터를 지역 변수로 참조하기
    • 실습 예제 | 지역 변수로 액터 사용하기
    • 실습 예제 | 탄도 정보 수정하기
    • 함수 매개변수와 변경자
      • 함수 매개변수
    • 실습 예제 | 함수 매개변수의 사용
    • 실습 예제 | out 매개변수
      • 값 반환
    • 실습 예제 | 이걸 좀 반환하고 싶은데요.
      • 함수 변경자
        • Native
        • Event
        • Singular
        • Exec
    • 실습 예제 | 치팅(cheating) 지원하기
      • Static
    • 실습 예제 | 정적 함수의 사용
    • Super
    • 타이머의 사용
    • 실습 예제 | 엄마, 5분만 더요.
    • 모두 다 합쳐보기
    • 실습 예제 | Awesome Game의 확장
    • 요약
  • 6장 스테이트를 이용한 행동 제어
    • 스테이트는 마음의 상태
      • 스테이트 만들기
    • 실습 예제 | 스테이트 코드 작성
      • 스테이트 간의 전환
    • 실습 예제 | 스테이트 전환하기
    • 스테이트 내부에서 함수 재정의하기
      • 지금 어떤 스테이트에 있나요?
    • 실습 예제 | 다중 인격
      • 스테이트에 속하지 않은 함수
    • 실습 예제 | 스테이트에 속하지 않은 함수 호출하기
    • 실습 예제 | 스테이트 안에서 밖에 있는 함수 호출하기
    • 스테이트 전환 감지하기
      • BeginState
    • 실습 예제 | BeginState의 활용
      • EndState
    • 실습 예제 | EndState의 활용
      • 스테이트 감지
    • 실습 예제 | 스테이트 감지 함수의 활용
    • 스테이트 상속하기
    • 실습 예제 | Seeking 스테이트의 상속
    • 키워드, 라벨, 잠재 함수
      • 키워드
    • 실습 예제 | ignores의 활용
      • 라벨과 잠재 함수
    • 실습 예제 | 라벨과 잠재 함수 활용하기
    • 보스의 등장
      • 코드 정돈하기
    • 실습 예제 | 코드 원상복귀
      • 쉘렌버그의 공격
    • 실습 예제 | 추상 부모 클래스의 생성
    • 실습 예제 | 보스의 제작과 생성
    • 실습 예제 | 네가 좋아, 그래서 마지막으로 죽일 거야
    • 실습 예제 | 분노 모드 활성화
    • 요약
  • 7장 키즈멧의 활용
    • 키즈멧 개요
      • 간단한 소개
    • 실습 예제 | 키즈멧 사용하기
      • 복잡도 쌓기
    • 실습 예제 | 한층 복잡한 키즈멧 시퀀스
    • 실습 예제 | 디버깅 시간!
    • 키즈멧 액션
      • 키즈멧 액션의 생성
    • 실습 예제 | 키즈멧 액션 만들기
      • 키즈멧 액션에서 변수 사용하기
    • 실습 예제 | 키즈멧에서 변수 사용하기
    • 키즈멧 핸들러 함수
    • 실습 예제 | 핸들러 함수의 사용
    • 실습 예제 | 키즈멧 입력 구분하기
    • 키즈멧 컨디션
    • 실습 예제 | 키즈멧 컨디션 만들기
      • 키즈멧 이벤트
    • 실습 예제 | 청소 시간
      • 키즈멧 이벤트의 생성과 구동
    • 실습 예제 | 첫 번째 키즈멧 이벤트의 구현
      • 의미 있는 이벤트 만들기
    • 실습 예제 | 키즈멧에서 보스 등장시키기
      • 키즈멧 확장하기
    • 실습 예제 | 분대 규모 설정하기
      • 액터 고유 이벤트
    • 실습 예제 | SupportedEvents 사용하기
    • 실습 예제 | 액터 고유 이벤트 만들기
    • 지연된 액션
    • 실습 예제 | 지연된 액션 만들기
    • 요약
  • 8장 멀티플레이어 게임 개발
    • 클라이언트와 서버의 관계
      • 우리 모두를 묶어주는 단 하나의 상태
      • 네트워크 코드의 테스트
      • 서버 설정하기
    • 실습 예제 | 서버 배치 파일
      • 클라이언트 설정하기
    • 실습 예제 | 클라이언트 배치 파일
      • 멀티플레이어 환경에서 동작하도록 고치기
    • 실습 예제 | 플레이어 복원하기
    • 실습 예제 | 게임 복원하기
      • GameReplicationInfo 클래스
    • 실습 예제 | GameReplicationInfo 만들기
    • 적이 달아나도록 수정하기
    • 실습 예제 | 도망쳐!
    • 실습 예제 | 보스 원상회복
    • 함수 호출 복제하기
      • 복제 함수 변경자
        • Reliable과 Unreliable 함수
        • Client 함수
    • 실습 예제 | Client 함수 설정하기
    • 실습 예제 | Client 함수 사용하기
      • Server 함수
    • 실습 예제 | Server 함수 사용하기
      • Simulated 함수
    • 실습 예제 | 맵 설정하기
    • 실습 예제 | Simulated 함수 사용하기
    • 실습 예제 | 콤보 브레이커!
    • 액터의 역할과 권한
      • Role과 RemoteRole
    • 실습 예제 | Role과 RemoteRole 확인하기
    • 실습 예제 | 내 권한을 존중해줘!
      • NetMode
    • 실습 예제 | NetMode 검사하기
    • 변수 복제하기
      • 복제 영역
    • 실습 예제 | 변수 복제하기
      • 복제와 관련된 변수들
      • ReplicatedEvent
    • 실습 예제 | ReplicatedEvent 사용하기
    • 요약
  • 9장 디버깅과 최적화
    • 컴파일러 오류
    • 실습 예제 | 망가뜨릴 준비
    • 실습 예제 | 새로운 스크립트 패키지
    • 실습 예제 | 클래스 자체를 망가뜨리기
    • 실습 예제 | 코드 망가뜨리기
    • 실습 예제 | 오해하기 쉬운 오류 메시지
    • 실습 예제 | 의미가 명백한 오류 해결하기
    • 실습 예제 | 한 번에 오류 두 개
    • 실습 예제 | 함수 오작동
    • 실습 예제 | 그 밖에 주의해야 할 함수 관련 오류
    • 실습 예제 | 액터 변수와 관련된 오류
    • 실습 예제 | 그 밖의 변수 관련 오류들
    • 디버깅
      • Accessed None
    • 실습 예제 | Accessed None 문제 확인하기
    • 실습 예제 | Accessed None 문제 해결하기
    • 실습 예제 | 함수 매개변수의 Accessed None
      • 로그 사용하기
    • 실습 예제 | 시나리오 구성
    • 실습 예제 | 로그를 이용한 디버깅
    • 최적화
      • 프로파일러
    • 실습 예제 | 프로파일러 사용하기
      • Clock과 UnClock 함수
    • 실습 예제 | Clock과 UnClock 함수 사용하기
      • 효율성 있는 코드를 만드는 여섯 가지 습관
    • 요약
  • 10장 그 밖의 주제
    • 컴포넌트 사용하기
      • 컴포넌트 만들기
    • 실습 예제 | 액터에 하나의 컴포넌트 추가하기
    • 실습 예제 | 컴포넌트와 관련된 컴파일러 오류
      • 컴포넌트와 상호작용하기
    • 실습 예제 | 컴포넌트 변수 사용하기
      • 실용적인 예제
    • 실습 예제 | 켜고 끌 수 있는 손전등 만들기
    • DLLBind
    • 실습 예제 | DLLBind 사용하기
    • 마지막 조언
      • 기타 관련자료
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[ p8 옮긴이 홈페이지 주소 ]
http://cg.kw.ac.kw/kang --> http://cg.kw.ac.kr/kang

[ p50 항목 2 코드 ]
class AwesomeActor extends Actor     placeable;

defaultproperties {     Begin Object Class=SpriteComponent Name=Sprite         Sprite=Texture2D'EditorResources.S_NavP'     End Object     Components.Add(Sprite) }

[ p149 8행 코드(띄어쓰기 오류) ]
PlayerControllerClass=class'AwesomeGame.AwesomePlayer   Controller -->
PlayerControllerClass=class'AwesomeGame.AwesomePlayerController

[ p163 17행, 28행 코드 ]

17행 : 'log("MyAwesomeActor @ "<-- Default for MyAwesomeActor");

--> 'log(MyAwesomeActor @ "<-- Default for MyAwesomeActor");

28행 : 'log("MyAwesomeActor @ "<-- Default for MyAwesomeActor");

--> 'log(MyAwesomeActor @ "<-- Default for MyAwesomeActor");

[ p232 2번 AwesomePawn 클래스 함수 코드 중 5~6행 수정 ]
!=none
if(TestEnemy(OtheR))
-->
if(TestEnemy(Other) !=none)

[ p323 14행 ]
'log("Seeking Tick"); --> `log("Attacking Tick");

[ p328 21행 ]
'log(“Non-Global call:”); --> `log(“Regular call:”);