C++를 사용한 언리얼 엔진 4 개발 2/e [100여 개의 레시피를 통해 배우는 언리얼 4 게임 개발 가이드]
- 원서명Unreal Engine 4.x Scripting with C++ Cookbook - Second Edition: Develop quality game components and solve scripting problems with the power of C++ and UE4 (9781789809503)
- 지은이존 도란(John P. Doran), 윌리엄 셰리프(William Sherif), 스테판 화이틀(Stephen Whittle)
- 옮긴이조경빈
- ISBN : 9791161754659
- 45,000원
- 2020년 12월 15일 펴냄
- 페이퍼백 | 740쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 게임 개발 프로그래밍
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/unreal4-cookbook2
요약
클래스 생성부터 블루프린트 편집기, C++ 클래스와 구조체, 메모리 관리, 스마트 포인터, 디버깅, 액터와 컴포넌트, 이벤트와 델리게이트, 입력과 충돌, 클래스와 인터페이스 통신, C++과 언리얼 편집기의 연동 UE4 API 사용 및 멀티플레이어 네트워킹, AI 작성 및 유저 인터페이스까지 100개가 넘는 실전 레시피를 통해 언리얼로 만드는 게임에 네이티브 코드를 통합하고자 하는 게임 개발자에게 필수적인 책이다.
이 책에서 다루는 내용
■ UE4 및 블루프린트 편집기와 잘 통합되는 C++ 클래스 및 구조체 생성
■ 언리얼 엔진에 포함된 다양한 API로 작업하는 방법
■ UE4 프로젝트에서 이벤트, 델리게이트, 인터페이스와 같은 고급 개념 활용
■ C++를 기반으로 캔버스(Canvas)와 UMG를 사용해 사용자 인터페이스 구축하기
■ 커스텀 윈도우와 편집기를 만들어 언리얼 편집기 기능 확장하기
■ C++, 블랙보드(Blackboard), 행동 트리(Behavior Tree)를 사용한 AI 작업 및 서비스 구현
■ 네트워킹 지원을 위한 C++ 코드 작성과 속성 및 함수 복제
이 책의 대상 독자
게임 디자인과 C++의 기본 사항을 이해하고 있으면서 언리얼로 만드는 게임에 네이티브 코드를 통합하고자 하는 게임 개발자를 대상으로 한다. 특히 엔진을 확장하거나, 디자이너를 위한 제어가 쉽고 유연한 레벨 구성 시스템을 제공하려는 프로그래머에게 적합하다.
이 책의 구성
1장. ‘UE4 개발 도구’에서는 UE4 게임 개발을 시작하는 데 필요한 기본 레시피와 게임 코드를 작성하는 데 사용하는 기본 도구를 설명한다.
2장. ‘클래스 생성’에서는 UE4 블루프린트 편집기와 잘 통합되는 C++ 클래스 및 구조체 생성 방법을 다룬다. 이러한 클래스는 UCLASS라고 하는 일반 C++ 클래스의 블루프린트용 버전이다.
3장. ‘메모리 관리, 스마트 포인터, 디버깅’에서는 세 가지 유형의 포인터를 모두 사용하는 독자를 대상으로 하며, 자동 가지비 컬렉션(automatic garbage collection)과 관련한 몇 가지 일반적인 함정을 다룬다. 또한 크래시(crash)를 분석하거나 기능이 제대로 구현됐는지 확인하고자 비주얼 스튜디오 또는 XCode를 사용하는 방법을 알아본다.
4장. ‘액터와 컴포넌트’에서는 커스텀 액터와 컴포넌트가 하는 역할, 상호작용 방식 및 생성 방법을 다룬다.
5장. ‘이벤트와 델리게이트 처리’에서는 델리게이트(delegate), 이벤트(event), 이벤트 처리를 다루며, 자신만의 구현을 생성하는 방법도 설명한다.
6장. ‘입력과 충돌’에서는 UE4에서 사용자 입력과 C++ 함수를 연결하는 방법을 설명하며 C++로 충돌을 처리하는 방법도 다룬다. 또한 사용자 입력과 충돌 같은 게임 이벤트를 다루는 기본 처리도 제공함으로써 디자이너가 필요에 따라 블루프린트를 사용해 재정의할 수 있도록 한다.
7장. ‘클래스와 인터페이스 간의 통신: 파트 1’에서는 자신만의 UInterface를 작성하는 방법을 설명하며, C++를 사용해 커플링을 최소화하고 코드를 간결하게 유지하는 방법도 알려준다.
8장. ‘클래스와 인터페이스 간의 통신: 파트 2’에서는 7장에서 다룬 내용의 연장선으로, 블루프린트를 활용해 UInterface가 작동하도록 만드는 방법을 자세히 다룬다.
9장. ‘C++와 언리얼 편집기 연동: 파트 1’에서는 커스텀 블루프린트와 애니메이션 노드를 생성해 편집기를 커스터마이즈하는 방법을 설명한다.
10장. ‘C++와 언리얼 편집기 연동: 파트 2’에서는 사용자가 생성한 타입을 검사하기 위해 커스텀 편집기 창과 커스텀 디테일 패널을 구현하는 방법을 설명한다.
11장. ‘UE4 API 사용하기’에서는 프로그래머가 엔진에게 무엇을 해야 할지 지시하는 방법인 API를 설명한다. 각 모듈은 API를 제공하며, API를 사용하려면 빌드에서 사용할 모든 API를 ProjectName.Build.cs 파일에 나열해야 한다.
12장. ‘UE4에서의 멀티플레이어 네트워킹’에서는 네트워크를 통해 속성과 기능을 복제하는 방법을 설명한다. 또한 서버와 클라이언트를 동시에 테스트하는 방법도 다룬다.
13장. ‘NPC 제어를 위한 AI’에서는 간단한 인공지능(AI)을 보유한 NPC 캐릭터를 제어하는 방법을 다룬다.
14장. ‘사용자 인터페이스 - UI와 UMG’에서는 플레이어에게 피드백을 표시하는 것은 게임 디자인에서 가장 중요한 요소 중 하나이며, 일반적으로 게임 내에서 일종의 HUD 또는 메뉴를 제공한다.
상세 이미지
목차
목차
- 1장. UE4 개발 도구
- 소개
- 기술적 요구 사항
- 비주얼 스튜디오 설치
- 비주얼 스튜디오로 첫 C++ 프로젝트 만들기
- 비주얼 스튜디오에서 코드 폰트와 색상 변경
- 익스텐션 - 비주얼 스튜디오의 컬러 테마 변경하기
- 코드 포매팅과 자동 완성 설정
- 비주얼 스튜디오 단축키
- 비주얼 스튜디오에서 마우스 활용
- 언리얼 엔진 4 설치
- UE4에서 첫 프로젝트 생성하기
- UE4에서 첫 레벨 생성하기
- UE4 - 핫 리로딩
- UE4 - UE_LOG를 사용해 로그 남기기
- 다수의 FString과 다른 변수들로부터 FString 만들기
- 2장. 클래스 생성
- 소개
- 기술적 요구 사항
- UCLASS 작성 - UObject에서 파생
- 커스텀 UCLASS로부터 블루프린트 생성
- 사용자 편집이 가능한 UPROPERTY 생성
- 블루프린트에서 UPROPERTY 접근
- UPROPERTY 타입으로 UCLASS 지정
- UObject 파생 클래스 인스턴스화(ConstructObject< >와 NewObject< >)
- UObject 파생 클래스 파괴
- USTRUCT 생성
- UENUM() 생성
- 3장. 메모리 관리, 스마트 포인터, 디버깅
- 소개
- 기술적 요구 사항
- 관리되지 않는 메모리 - malloc()/free() 사용
- 관리되지 않는 메모리 - new/delete 사용
- 관리되는 메모리 - NewObject< >와 ConstructObject< > 사용
- 관리되는 메모리 - 메모리 해제
- 관리되는 메모리 - 오브젝트 추적을 위해 스마트 포인터 사용
- (TSharedPtr, TWeakPtr, TAutoPtr)
- 오브젝트 추적을 위해 TScopedPointer 사용
- 언리얼의 가비지 컬렉션 시스템과 UPROPERTY()
- 가비지 컬렉션 강제 수행
- 중단점과 단계별 코드 실행
- 버그 탐색과 콜 스택 사용
- 핫스팟 식별을 위해 프로파일러 사용
- 4장. 액터와 컴포넌트
- 소개
- 기술적 요구 사항
- C++로 커스텀 액터 생성하기
- SpawnActor를 사용해 액터 인스턴스화하기
- UFUNCTION 생성
- Destroy와 Timer를 사용해 액터 삭제
- SetLifeSpan을 사용해 일정 지연 후 액터 삭제하기
- 컴포지션을 사용한 액터 기능 구현
- FObjectFinder를 사용해 애셋을 컴포넌트에 불러오기
- 상속을 사용한 액터 기능 구현
- 계층 생성을 위한 컴포넌트 연결
- 커스텀 액터 컴포넌트 생성
- 커스텀 씬 컴포넌트 생성
- RPG를 위한 InventoryComponent 생성
- OrbitingMovement 컴포넌트 생성
- 유닛을 생산하는 건물 생성
- 5장. 이벤트와 델리게이트 처리
- 소개
- 기술적 요구 사항
- 가상 함수로 구현된 이벤트 처리
- UFUNCTION에 바인딩된 델리게이트 생성
- 델리게이트 등록 해제
- 입력 파라미터를 받는 델리게이트 생성
- 델리게이트 바인딩으로 페이로드 데이터 전달
- 멀티캐스트 델리게이트 생성
- 커스텀 이벤트 생성
- 시간 핸들러 생성
- FPS 게임을 위한 재소환 픽업 생성
- 6장. 입력과 충돌
- 소개
- 기술적 요구 사항
- 축 매핑 – FPS 캐릭터 제어를 위한 키보드, 마우스, 게임패드 방향 입력
- 축 매핑 - 정규화된 입력
- 액션 매핑 - FPS 캐릭터 제어를 위한 원 버튼 응답
- C++로 축과 액션 매핑 추가
- 마우스 UI 입력 처리
- UMG 키보드 UI 단축키
- 충돌 - Ignore를 사용해 오브젝트 통과시키기
- 충돌 - Overlap을 사용해 오브젝트 줍기
- 충돌 - Block을 사용해 통과 방지
- 7장. 클래스와 인터페이스 간의 통신: 파트 1
- 소개
- 기술적 요구 사항
- UInterface 생성
- 오브젝트에 UInterface 구현
- 클래스가 UInterface를 구현했는지 검사
- 네이티브 코드로 구현된 UInterface로 캐스팅
- C++로 네이티브 UInterface 함수 호출
- 서로 UInterface 상속
- C++에서 UInterface 함수 재정의
- UInterface로 간단한 상호작용 시스템 구현
- 8장. 클래스와 인터페이스 간의 통신: 파트 2
- 소개
- 기술적 요구 사항
- 네이티브 베이스 클래스로부터 블루프린트로 UInterface 메서드 노출
- 블루프린트에서 UInterface 함수 구현
- 블루프린트에서 재정의할 수 있는 C++ UInterface 함수 구현 생성
- C++에서 블루프린트로 정의한 인터페이스 호출
- 9장. C++와 언리얼 편집기 연동: 파트 1
- 소개
- 기술적 요구 사항
- 블루프린트 변수로 클래스나 구조체 사용하기
- 블루프린트에서 서브클래싱할 수 있는 클래스 또는 구조체 만들기
- 블루프린트에서 호출할 수 있는 함수 만들기
- 블루프린트에서 구현할 수 있는 이벤트 만들기
- 멀티캐스트 델리게이트를 블루프린트에 노출하기
- 블루프린트에서 사용할 수 있는 C++ 열거형 만들기
- 편집기의 여러 위치에서 클래스 속성 편집하기
- 블루프린트 편집기 그래프에서 속성에 접근 가능하게 만들기
- 편집기에서 속성 변경 이벤트에 응답하기
- 네이티브 코드 생성 스크립트 구현하기
- 10장. C++와 언리얼 편집기 연동: 파트 2
- 소개
- 새 편집기 모듈 생성
- 새 툴바 버튼 생성
- 새 메뉴 항목 생성
- 새 편집기 창 생성
- 새 애셋 타입 생성
- 애셋을 위한 커스텀 컨텍스트 메뉴 항목 생성
- 새 콘솔 명령 생성
- 블루프린트를 위한 새 그래프 핀 시각화 생성
- 커스텀 Details 패널로 타입 분석
- 11장. UE4 API 사용하기
- 소개
- 기술적 요구 사항
- Core/Logging API – 커스텀 로그 카테고리 정의
- Core/Logging API – Message Log에 메시지를 쓰는 FMessageLog
- Core/Math API – FRotator를 이용한 회전
- Core/Math API – FQuat를 이용한 회전
- API – 한 오브젝트가 다른 오브젝트를 향하도록 FRotationMatrix를 사용해 회전
- GameplayAbility API – 게임 컨트롤을 사용해 액터의 게임플레이 능력을 트리거링
- GameplayAbility API – AttributeSet으로 통계 구현
- GameplayAbility API – GameplayEffect로 버프 구현
- GameplayTasks API – GameplayTasks로 사건 만들기
- HTTP API – 웹 요청으로 웹 페이지 다운로드
- HTTP API – 다운로드 진행률 표시
- 12장. UE4에서의 멀티플레이어 네트워킹
- 소개
- 기술적 요구 사항
- 클라이언트와 서버 게임 동시에 테스트하기
- 네트워크를 통한 속성 복제
- 네트워크를 통한 복제 함수들
- UI 네트워크 이벤트 처리
- 13장. NPC 제어를 위한 AI
- 소개
- 기술적 요구 사항
- 간단한 따라다니기 행동 구현
- 내비게이션 메시 배치
- 블랙보드 생성
- 행동 트리 생성
- 행동 트리를 캐릭터에 연결
- BTService 생성
- BTTask 생성
- 14장. 사용자 인터페이스 - UI와 UMG
- 소개
- 기술적 요구 사항
- 캔버스를 사용해 그리기
- 화면에 슬레이트 위젯 추가
- UI를 위한 화면 크기 인식 스케일링 생성
- 게임 내 UMG 요소 시트 표시 및 숨기기
- 슬레이트 이벤트에 함수 호출 연결
- 언리얼 모션 그래픽과 데이터 바인딩 사용
- 스타일을 사용해 위젯 모양 제어
- 커스텀 SWidget/UWidget 생성
도서 오류 신고
정오표
정오표
[p.16 : 11장 중]
GameplayAbility API – AttributeSet으로 통계 구현
->
GameplayAbility API – AttributeSet으로 능력치 구현
[p.94 : 1행]
BlueprintDefaultsOnly라는 특별한 값을 사용하면
->
EditDefaultsOnly라는 특별한 값을 사용하면
[p.94 : 3행]
BlueprintDefaultsOnly는 런타임에 데이터 멤버를
->
EditDefaultsOnly는 런타임에 데이터 멤버를
[p.113 : 코드 아래서 3행]
//Custom struct example UPROPERY(EditAnywhere, BlueprintReadWrite, Category = HUD)
->
//Custom struct example
UPROPERY(EditAnywhere, BlueprintReadWrite, Category = HUD)
[p.291 : 코드 아래서 5행]
auto GameMode = Cast
->
auto GameMode = Cast
[P.312 : 코드 아래서 6행]
if (ActorClass>ImplementsInterface(UMyInterface::StaticClass()))
->
if (ActorClass->ImplementsInterface(UMyInterface::StaticClass()))
[p.406 : 아래서 3행]
하지만 현재 C++에서 정의한 속성 중 어느 것도 블르프린트에 접근할 수 없다.
->
하지만 현재 C++에서 정의한 속성 중 어느 것도 블루프린트에 접근할 수 없다.
[p.430 : 아래에서 2행]
Class of Actors Of Class
->
Get All Actors Of Class
[p.542: 3행]
GameplayAbility API: AttributeSet으로 통계 구현
->
GameplayAbility API: AttributeSet으로 능력치 구현
[p.576 : 1행]
GameplayAbility API – AttributeSet으로 통계 구현
->
GameplayAbility API – AttributeSet으로 능력치 구현