[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에서 제공하는 코드를 확장하여 새로운 기능 구현
■ 자신만의 새로운 게임 규칙, 카메라 제어방식, HUD 만들기
■ 언리얼스크립트와 키즈멧을 연동하고 새로운 키즈멧 액션과 이벤트 정의하기
■ 온라인에서 실행되는 멀티플레이어 게임 개발과 테스트
■ 오류를 수정하고 코드를 최적화하는 노하우
■ DLLBind를 통해 UDK 외부 코드와 상호작용하기
[ 이 책의 대상 독자 ]
이 책은 UDK를 처음 접하지만 언리얼스크립트를 이용해서 자신만의 게임 프로젝트를 만들고자 하는 사람들을 위한 것이다. 이 책에서 제공하는 정보들은 다른 프로그래밍 언어에는 익숙하지만 언리얼스크립트를 배워서 그 지식을 더욱 확장하고자 하는 이들에게도 유용할 것이다.
[ 이 책의 구성 ]
1장 '프로젝트 셋업과 테스트 환경 구축'에서는 UDK뿐 아니라 이 책에서 코드를 작성하며 사용하게 될 콘텍스트(ConTEXT)와 언코드엑스(UnCodeX)라는 두 가지 프로그램을 설치하고 설정하는 과정을 안내한다. 또한 UDK의 폴더 구조를 확인하고 설정 파일들을 살펴본다.
2장 '데이터의 저장과 조작'에서는 UDK에서 사용할 수 있는 여러 종류의 변수들을 알아보고, 게임 속에서 지속적으로 변하는 환경에 대응하기 위한 흐름제어 문법을 배운다.
3장 '클래스 트리의 이해'에서는 게임 세계에 존재하는 객체들 간의 관계를 파악할 수 있는 클래스 트리를 다룬다. 클래스의 상속과 함수 재정의를 통해 객체의 행동양식을 제어하는 방법을 배울 것이다.
4장 '사용자 고유 클래스의 제작'에서는 직접 자신만의 클래스를 만드는 과정에 초점을 맞춘다. 어느 UDK 프로젝트에서나 사용되는 핵심 클래스들에 대해 논의하고, 우리만의 게임을 만들기 위해 이들 클래스를 변용하는 방법을 설명한다. 그 과정에서 카메라의 작동방식, 게임의 규칙, 그리고 플레이어의 제어방식을 직접 변경해본다.
5장 '함수의 활용'에서는 함수를 사용해 게임을 확장하는 방법을 배운다. 하나의 객체로부터 다른 객체로 정보를 전달하는 방식, 데이터를 조작하고 그것을 원래 객체에 되돌려주는 방식 등이 여기에 포함된다. 자체적으로 새로운 함수를 만들면 기존 UDK 클래스에는 존재하지 않는 새로운 기능을 객체에 부여할 수 있다.
6장 '스테이트를 이용한 행동 제어'에서는 스테이트가 무엇인지 설명하고 이를 활용하여 게임에 등장하는 적들의 복잡한 행동을 구성하고 제어한다. 스테이트를 만들고, 변경하고, 그 내부 함수를 정의하는 방법 등을 논의한다.
7장 '키즈멧의 활용'에서는 UDK 게임에서 키즈멧을 어떻게 활용할 수 있는지 살펴보고, 새로운 액션과 이벤트를 만드는 방법을 배운다. 이들 액션과 이벤트를 이용하여 레벨에 따라 특징적인 게임 플레이를 구성하는 과정을 보인다.
8장 '멀티플레이어 게임 개발'에서는 테스트 목적으로 클라이언트와 서버를 한 대의 컴퓨터에서 실행시키는 과정을 설명한다. 또한 네트워크 코드를 작성하는 기본 방식 및 멀티플레이어 게임을 염두에 두고 게임을 디자인하는 방법을 다룬다.
9장 '디버깅과 최적화'에서는 언리얼스크립트 코드를 컴파일하고 실행할 때 흔히 마주치게 되는 오류와 이들 문제를 해결하는 방법을 소개한다. 또한 코드를 최적화하여 게임의 수행 속도를 빠르게 하는 여러 가지 방식에 대해서 논의한다.
10장 '그 밖의 주제'에서는 컴포넌트를 이용하여 게임에 등장하는 객체의 겉모습을 제어하는 방법과, DLLBind를 이용하여 UDK 외부의 프로그램에 접근하는 방법을 설명한다.
목차
목차
- 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 사용하기
- 마지막 조언
- 기타 관련자료
- 요약
- 컴포넌트 사용하기
도서 오류 신고
정오표
정오표
[ 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:”);