Top

C++로 개발하는 언리얼 엔진 4 [체계적으로 배우는 언리얼 엔진 가이드]

  • 원서명Unreal Engine 4 Scripting with C++ Cookbook: Get the best out of your games by scripting them using UE4 (ISBN 9781785885549)
  • 지은이윌리엄 셰리프(William Sherif), 스테판 화이틀(Stephen Whittle)
  • 옮긴이김제룡, 박인철, 조원일
  • ISBN : 9791161752716
  • 40,000원
  • 2019년 02월 25일 펴냄 (절판)
  • 페이퍼백 | 604쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 게임 개발 프로그래밍

판매처

  • 현재 이 도서는 구매할 수 없습니다.

책 소개

옮긴이의 깃허브 주소(https://github.com/nicecapj/UE4cookbook)에서도 소스 파일을 다운 받을 수 있다.

요약

언리얼 엔진 4의 설치부터 클래스, 메모리 관리, 액터와 컴포넌트, 이벤트와 델리게이트, 입력과 충돌, 클래스와 인터페이스의 통신, 에디터 확장을 다루는 책이다. 또한 유저인터페이스 개발, NPC AI, 머티리얼과 셰이더에 대해서도 알려주며, 추가적으로 도움이 될만한 API 등 전체적인 기능을 소개한다.
한국어판에서는 최신 4.19 버전을 기준으로 모두 업데이트했으며, 필요한 경우에는 현업 개발자들에 의해 다시 쓰였기 때문에 에디터 편집과 확장과 같은 쉽게 찾기 힘든 자료도 일부 포함하고 있다.
언리얼 엔진 4와 C++을 사용해서 체계적으로 게임 개발을 시작하려는 분들에게 필수적인 책이다.

이 책에서 다루는 내용

■ 유지 보수를 줄이도록 재사용 가능한 코드가 포함된 함수 라이브러리 작성(블루프린트)
■ 성능을 향상시키도록 블루프린트를 C++의 저수준 함수로 변경
■ 기획자의 업무 흐름에 맞춰 복잡한 구현의 세부적인 것을 단순하게 추상화하는 방법
■ 게임에 하드웨어 통합과 같은 특별한 기능을 추가하기 위해 이미 존재하는 라이브러리를 사용하는 방법
■ 블루프린트와 C++에서 AI 태스크와 비헤이비어 개발
■ UI 요소의 콘텐츠와 외형을 제어하기 위한 데이터 생성

이 책의 대상 독자

게임 디자인 및 C++의 기본을 이해하고 언리얼로 만든 게임에 기본 코드를 통합하려는 게임 개발자를 대상으로 한다. 이 책을 통해 엔진을 확장하거나 레벨을 만들 때, 디자이너가 제어하고 유연하게 사용할 수 있는 시스템과 액터를 구현하려는 프로그래머가 될 수 있을 것이다.

이 책의 구성

1장, ‘UE4 개발 툴’에서는 UE4 게임 개발을 시작하기 위한 기본 레시피와 게임을 만드는 코드를 생성하는 데 사용되는 기본 도구에 대해 설명한다.
2장, ‘클래스 생성하기’에서는 UE4 블루프린트 에디터와 잘 통합되는 C++ 클래스 및 구조체를 만드는 방법에 중점을 둔다. 이 클래스는 UCLASSES라는 일반 C++ 클래스의 상위 버전이다.
3장, ‘메모리 관리와 스마트’에서는 포인터 독자가 세 가지 유형의 포인터를 통해 사용하도록 하며 가비지 컬렉션과 관련된 몇 가지 일반적인 함정을 언급한다. Visual Studio 또는 XCode를 사용해 크래시를 분석하거나 기능이 올바르게 구현됐는지 확인하는 방법을 보여준다.
4장, ‘액터와 컴포넌트’에서는 생성한 사용자 정의 액터와 컴포넌트를 가지고 각각 어떤 목적을 제공하는지, 어떻게 서로 함께 동작하는지를 다루게 된다.
5장, ‘이벤트와 델리게이트 처리하기’에서는 델리게이트, 이벤트와 이벤트 핸들러에 대해 설명하고 자체 구현을 만드는 과정을 안내한다.
6장, ‘입력과 충돌’에서는 사용자 입력을 C++ 함수에 연결하는 방법과 C++에서 UE4 충돌을 처리하는 방법을 보여준다. 또한 사용자 입력과 충돌과 같은 게임 이벤트의 기본 처리 기능을 제공하므로 디자이너는 블루프린트를 사용해 필요한 경우 재정의할 수 있다.
7장, ‘클래스와 인터페이스 간 통신’에서는 자신만의 UInterfaces를 어떻게 작성하는지 보여주고 클래스 간 연결을 최소화하고 코드를 깨끗하게 유지하는 데 C++ 내에서 이를 활용하는 방법을 알려준다.
8장, ‘C++와 언리얼 에디터 통합하기’에서는 사용자 정의 블루프린트와 애니메이션 노드를 처음부터 생성해 에디터를 사용자 정의하는 방법을 보여준다. 또한 사용자가 만든 유형을 검사하기 위해 사용자 정의 데이터 윈도우와 사용자 정의 디테일 패널을 구현할 것이다. 9장, ‘유저 인터페이스’에서는 UI와 UMG는 플레이어에게 피드백을 표시하는 것이 게임 디자인에서 가장 중요한 요소 중 하나임을 보여준다. 이는 일반적으로 게임 내에서 일종의 HUD 또는 최소 메뉴와 관련된다.
10장, ‘NPC를 제어하기 위한 AI’에서는 약간의 인공지능(AI)로 NPC 캐릭터를 제어하는 방법을 다룬다.
11장, ‘사용자 정의 머티리얼과 셰이더’에서는 UE4 에디터에서 사용되는 사용자 정의 머티리얼과 오디오 그래프 노드를 만드는 것에 대해 이야기한다. 12장, ‘UE4 API로 작업하기’에서는 API에 대해 설명한다. API는 프로그래머가 엔진(혹은 PC)에 수행할 작업을 지시할 수 있는 방법이다. 이를 위해 각 모듈에는 API가 있으며, API를 사용하려면 빌드 시 프로젝트 이름인 .Build.cs 파일에서 사용할 모든 API를 나열해야 하는 매우 중요한 연결 단계가 있다.

상세 이미지

저자/역자 소개

지은이의 말

언리얼 엔진 4(UE4)는 게임 개발자가 게임 개발자를 위해 만든 게임 개발 도구의 완벽한 모음이다. 80여 가지 실용적인 레시피를 담은 이 책은 UE4로 게임을 개발할 때 C++ 스크립팅 파워를 사용하는 테크닉을 보여주는 가이드다. 언리얼 에디터에서 C++ 클래스를 추가하고 수정하는 것부터 시작한다. 그런 다음 (디자이너가 프로그래머가 개발한 액터와 컴포넌트를 사용자 정의하는 기능인) 언리얼 주요 강점 중 하나를 탐구하게 된다. 이를 통해 C++를 스크립팅 도구로 어떻게 사용하는지와 사용할 때의 이점을 이해하는 데 도움이 된다. 이 책은 작업 지향적인 레시피를 제공함으로써 UE4로 게임을 스크립팅하고 C++를 사용해 게임 및 개발 환경을 조작하는 방법에 대한 유용한 정보를 제공한다. 이 책은 여러분이 UE4를 C++ 언어를 사용하는 최고 수준의 개발자가 되는 데 최선을 다할 것이다.

지은이 소개

윌리엄 셰리프(William Sherif)

프로그래밍 경력 8년 이상의 C++ 프로그래머다. 게임부터 웹까지 다양한 프로그래밍을 경험했고, 7년 동안 대학교에서 강사로 재직했다. 아이튠즈 스토어에 몇 가지 앱을 출시했다. 'STRUM'과 'MARSHALL OF THE ELITE SQUADRON'이 대표적이다. 교육 과정을 이해하기 쉽게 전달하는 것으로 찬사를 받았다.

스테판 화이틀(Stephen Whittle)

10년 가까이 개발한 게임 개발자이자 교육자로, 경력 대부분은 언리얼 엔진 사용에 관한 내용을 다뤘다. 커뮤니티에 공헌하거나, 거의 모든 중요한 엔진 버전에 포함되는 기능이나 버그 수정 사항을 공개적으로 배포한다.

옮긴이의 말

언리얼 엔진 4(UE4)를 사용해 대규모 게임을 개발하려면 필수적으로 C++로 개발해야 한다. 공식 매뉴얼의 한글화가 잘 돼 있기는 하지만 거의 블루프린트에 대한 것이고, 실제로 개발에 필요한 내용들은 국내외 할 것 없이 공유가 안 되는 것이 현실이다.
팀에 언리얼 전문가가 있지 않은 이상, 결과를 내기 어렵거나 개발 기간이 오래 걸리고 품질도 좋지 않은 것이 대부분이다. 이때 체계적인 학습을 할 수 있는 서적이 있으면 도움이 될 텐데, 국내에서는 그런 책이 없었다.
출간한 언리얼 관련 원서는 거의 다 읽었었다. 그 가운데, 가장 체계적인 책이 바로 이 책이었다. 세 번째 언리얼 프로젝트를 진행하면서 읽었는데, 이 책을 미리 봤더라면 하는 아쉬움이 남았던 기억이 있다.
새로운 언리얼 엔진 4 프로젝트를 진행하게 됐고 팀원들의 언리얼 사용 기간이 얼마 안 된 상황이었다. 어떻게 하면 언리얼 엔진 4를 효율적으로 빠르게 학습시키고, 결과물을 만들 수 있을까 고민했다. 궁리 끝에 팀원들과 합의해 일과 시간 이후에 장별로 번역을 하고, 서로에게 설명하는 것으로 모임을 진행했다. 결과적으로 개인적으로도 많은 도움이 됐을 뿐만 아니라 팀과 프로젝트 발전에도 많은 기여를 했다. 그리고 앞으로 언리얼 엔진 4로 개발을 해야 하는 많은 프로그래머에게도 도움이 됐으면 좋겠다.

옮긴이 소개

김제룡

인터넷과 텍스트 게임이 유행이던 1998년 대학생 시절 '나이스 캡짱'이라는 텍스트 머드 게임을 개발했으며, 이를 기점으로 게임 개발에 발을 들였다.
2005년부터 지금까지 엔씨소프트(NCSoft), NHN, 이스트소프트(EstSoft), VK 모바일 등에서 상업적인 게임 개발을 했으며, PC MMORPG '카발 온라인 1'과 '카발 온라인 2' 개발에 참여했다. 모바일 게임에 관심을 가지면서 '아이돌 드림걸즈', 'ProjectD', 'Angrybirds Isaland', '리니지1, 2', '아이온 IP' 프로젝트 등에 참여했다.
현실 안주보다는 새롭고 도전전인 것을 즐기는 성격으로, 엔씨소프트에서 언리얼 엔진 4를 사용한 네 번째 모바일 MMORPG를 개발 중이다.

박인철

학창 시절 C&C(Command & Conquer)를 보고 게임 개발자 꿈을 가졌다. 보드게임, 캐주얼 게임, MMORPG 등을 개발했다. 엔씨소프트에서 '리니지' 개발에 참여했고 현재는 언리얼 엔진 4를 사용한 모바일 MMORPG를 개발 중이다. 하나님을 중심으로 사는 행복한 게임 개발자가 되기를 꿈꾼다.

조원일

어린 시절 고가의 386 컴퓨터로 도스(DOS)와 베이직을 시작으로 하이텔 게임 제작 동호회를 들락거리며 게임 개발자를 꿈꿨던 현직 게임 프로그래머다. 인천대 컴퓨터공학과를 졸업해 이스트소프트, 이스트게임즈에 근무하면서 PC MMORPG를 개발했고 현재 엔씨소프트에 재직하면서 모바일 MMORPG를 개발하고 있다. 게임, 만화 제작에 관심이 많으며 최근 라즈베리파이(Raspberry Pi), N 스케일 기차 모형 레이아웃 제작에도 관심이 많다. RPG 깎는 노인이 소원인 아들과 아내를 사랑하는 평범한 회사원이다.

목차

목차
  • 1장. UE4 개발 툴
    • 소개
    • Visual Studio 설치
    • Visual Studio에서 첫 C++ 프로젝트 생성하고 빌드하기
    • Visual Studio에서 코드 글꼴과 컬러 변경하기
    • 확장 - Visual Studio에서 색상 테마 변경
    • Visual Studio에서 코드 서식 지정(자동 완성 설정)
    • Visual Studio에서 단축키
    • Visual Studio에서 확장된 마우스 사용
    • UE4 - 설치
    • UE4 - 첫 번째 프로젝트
    • UE4 - UE_LOG로 로깅
    • GitHub의 프로젝트 관리 - 소스 컨트롤
    • GitHub의 프로젝트 관리-이슈 트래커
    • VisualStudio.com에서 프로젝트 관리 - 프로젝트에서 태스크 관리
    • VisualStudio.com의 프로젝트 관리-User Story와 태스크의 생성

  • 2장. 클래스 생성하기
    • 소개
    • UCLASS 만들기-UObject에서 파생하기
    • 사용자 편집 가능한 UPROPERTY 만들기
    • 블루프린트에서 UPROPERTY 접근하기
    • UPROPERTY 타입으로 UCLASS 작성하기
    • 커스텀 UCLASS에서 블루프린트 만들기
    • UObject 파생 클래스 인스턴스화하기(NewObject< >)
    • UObject 파생 클래스 파괴하기
    • USTRUCT 만들기
    • UENUM( ) 만들기
    • UFUNCTION 만들기

  • 3장. 메모리 관리와 스마트 포인터
    • 소개
    • 관리되지 않는 메모리 - malloc( )/free( ) 사용
    • 관리되지 않는 메모리 - new/delete 사용
    • 관리되는 메모리 - NewObject< > 사용
    • 관리되는 메모리 - 메모리 해제
    • 관리되는 메모리 - 스마트 포인터(TSharedPtr, TWeakPtr, TUniquePtr)를 사용해
    • 객체 추적하기
    • TUniquePtr를 사용해 객체 추적하기
    • 언리얼의 가비지 컬렉션 시스템과 UPROPERTY( )
    • 가비지 컬렉션의 강제 수행
    • 중단점과 단계적 코드 실행
    • 버그 찾기와 콜 스택 사용
    • 프로파일러를 사용해 핫 스팟 식별

  • 4장. 액터와 컴포넌트
    • 소개
    • C++에서 사용자 정의 액터 만들기
    • SpawnActor를 이용한 액터 생성
    • Destroy와 Timer를 이용한 액터 파괴
    • SetLifeSpan을 사용한 지연된 액터의 파괴
    • 조합을 통한 액터의 기능 구현
    • FObjectFinder를 사용해 컴포넌트에 에셋 로딩하기
    • 상속을 통한 액터의 기능 구현
    • 계층 구조를 만드는 컴포넌트 붙이기
    • 사용자 정의 액터 컴포넌트 생성
    • 사용자 정의 신 컴포넌트 생성
    • 사용자 정의 프리미티브 컴포넌트 생성
    • RPG를 위한 인벤토리 컴포넌트 생성
    • 궤도 이동 컴포넌트 생성
    • 유닛들을 스폰하는 빌딩 생성

  • 5장. 이벤트와 델리게이트 처리하기
    • 가상 함수로 구현된 이벤트 핸들링
    • UFUNCTION에 바인딩된 델리게이트 생성
    • 델리게이트 등록 해제하기
    • 입력 파라미터를 사용하는 델리게이트 생성
    • 델리게이트 바인딩을 사용해 페이로드 데이터 전달
    • 멀티-캐스트 델리게이트 생성
    • 사용자 정의 이벤트 생성
    • Time of Day 핸들러 생성
    • 1인칭 슈터 게임을 위한 리스폰 Pickup 만들기

  • 6장. 입력과 충돌
    • 소개
    • 축 매핑 - FPS 캐릭터에 대한 키보드, 마우스 및 게임 패드 방향 입력
    • 축 매핑-정규화된 입력
    • 액션 매핑 - FPS 캐릭터를 위한 단일 버튼 처리
    • C++에서 축, 액션 매핑 추가하기
    • 마우스 UI 입력 처리하기
    • UMG 키보드 UI 단축키들
    • 충돌-Ignore를 사용해 다른 것을 통과하게 해주는 오브젝트
    • 충돌 - Overlap을 사용한 오브젝트 들어올리기
    • 충돌 - Block을 사용한 상호 침투 막기

  • 7장. 클래스와 인터페이스 간 통신
    • 소개
    • UInterface 만들기
    • UInterface 객체 구현
    • 네이티브 코드에서 UInterface 구현을 위한 캐스팅
    • C++에서 네이티브 UInterface 함수 호출
    • 다른 UINTERFACE에서 상속받기
    • C++에서 UInterface 함수의 재정의
    • 네이티브 기반 클래스에서 블루프린트로 UInterface 함수 노출시키기
    • 블루프린트 안에서 UInterface 함수 구현
    • 블루프린트로 재정의할 수 있는 C++ UInterface 함수 구현 만들기
    • C++에서 블루프린트로 정의된 인터페이스 함수 호출
    • UInterfaces와 단순하게 상호작용하는 시스템 구현

  • 8장. C++와 언리얼 에디터의 통합
    • 소개
    • 클래스나 구조체를 블루프린트 변수로 사용
    • 블루프린트에서 서브클래싱할 수 있는 클래스 혹은 구조체 만들기
    • 블루프린트에서 호출할 수 있는 함수 만들기
    • 블루프린트에서 구현할 수 있는 이벤트 만들기
    • 멀티-캐스트 델리게이트를 블루프린트에 노출하기
    • 블루프린트에서 사용할 수 있는 C++ 열거형 만들기
    • 에디터의 다른 위치에서 클래스 프로퍼티 편집하기
    • 프로퍼티를 블루프린트 에디터 그래프에서 접근 가능하게 만들기
    • 에디터로부터 프로퍼티 변경 이벤트에 대한 응답
    • Construction 스크립트 네이티브 코드 구현
    • 새로운 에디터 모듈 만들기
    • 새 툴바 버튼 만들기
    • 새 메뉴 엔트리 만들기
    • 새 에디터 창 만들기
    • 새 에셋 타입 만들기
    • 에셋에 대한 사용자 정의 컨텍스트 메뉴 만들기
    • 새 콘솔 명령어 만들기
    • 블루프린트에서 새로운 그래프 핀 비주얼라이저 만들기
    • 사용자 정의 세부 정보 패널을 사용해 타입 검사하기

  • 9장. 유저 인터페이스 - UI와 UMG
    • 소개
    • Canvas를 사용해 그리기
    • 스크린에 Slate 위젯 추가하기
    • UI를 위한 크기가 조절되는 스크린 생성하기
    • 게임 내에서 UMG 엘리먼트 시트 표시 및 숨기기
    • 붙이는 함수로 Slate 이벤트 호출하기
    • Unreal Motion Graphics에서 데이터 바인딩 사용하기
    • Styles로 위젯 외형 조작하기
    • 사용자 정의 SWidget/UWidget 만들기

  • 10장. NPC 제어를 위한 AI
    • 소개
    • 내비게이션 메시 배치
    • 추적 행동
    • 캐릭터에 비헤이비어 트리 연결
    • 태스크 노드 구성
    • 조건을 위한 데코레이터 사용
    • 주기적인 서비스 사용하기
    • 콤퍼짓 노드-셀럭터, 시퀀스, 단순 병렬
    • 근접 공격자를 위한 AI

  • 11장. 사용자 정의 머티리얼과 셰이더
    • 소개
    • 기본 머티리얼을 사용해 색상 수정하기
    • 머티리얼을 사용해 위치 수정하기
    • 사용자 지정 노드를 통한 셰이더 코드
    • 머티리얼 함수
    • 셰이더 파라미터와 머티리얼 인스턴스
    • Glimmer
    • 나뭇잎과 바람
    • 시야각에 따른 반사율
    • 임의성 - 펄린 노이즈
    • 랜드스케이프 셰이딩

  • 12장. UE4 API로 작업하기
    • 소개
    • Core/Logging API-사용자 정의 로그 카테고리 정의하기
    • Core/Logging API - FmessageLog로 메시지들을 메시지 로그에 작성하기
    • Core/Math API - FRotator를 사용한 회전
    • Core/Math API–FQuat를 이용한 회전
    • Core/Math API - 한 오브젝트를 다른 것과 마주보기 위한 FRotationMatrix를 사용한
    • 회전
    • Landscape API - 펄린 노이즈를 사용한 랜드스케이프 생성
    • Foliage API - 레벨에 절차적으로 나무 추가하기
    • Landscape와 Foliage API - 랜드스케이프와 폴리지 API를 이용한 맵 생성
    • GameplayAbilities API - 게임 컨트롤로 액터의 게임 플레이 능력을 작동시키기
    • GameplayAbilities API - UAttributeSet으로 스탯 구현하기
    • GameplayAbilities API -GameplayEffect로 버프 구현하기
    • GameplayTags AP - 액터에 GameplayTags 붙이기
    • GmaplayTasks API - GameplayTasks로 일을 일어나게 하기
    • HTTP API - 웹 리퀘스트
    • HTTP API - 상태바

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

[p.53 : 마지막 행]
본인지
->
본인이

[p.58 : 마지막 코드]
중복 내용 삭제

FString::Format()을 사용하도록 하자. 다음 코드를 작성해보자.
---------------------------------------------------------------------------------
FString name = "Tim";
int32 mana = 450;
TArray< > args;
args.Add( FStringFormatArg( name ) );
args.Add( FStringFormatArg( mana ) );
FString string = FString::Format( TEXT( "Name = {0} Mana = {1}" ), args );
UE_LOG( LogTemp, Warning, TEXT( "Your string: %s" ),*string );
---------------------------------------------------------------------------------

[p.78 : 3행]
UUserObject
->
UUserProfile

[p.78 : 6번 항목 소스 코드]

[p.79]

->

[p.108]
UObject 파생 클래스를 할당하는 경우 NewObject<> 또는 ConstructObject<>(이후 레시피에서 설명)를 사용해야 한다.
->
UObject 파생 클래스를 할당하는 경우 NewObject<>를 사용해야 한다.

[p.111]
여기서 UAction::StaticClass()는 UAction 객체의 기본 UClass*를 가져온다.
->
(삭제)

[p.135]
사용자 정의 액터는 다른 액터에 붙이지 않고서는 위치를 가질 수 없다.
->
컴포넌트가 없는 사용자 정의 액터는 위치를 갖지 않고 다른 액터들에 붙을 수 없다.

[p.137 : 하단의 3번]
3. StaticMeshComponent를 사용했지만 액터 컴포넌트의 하위 클래스로 동작한다.
->
3. 우리는 StaticMeshComponent를 사용했지만 ActorComponent의 하위 클래스는 어떤 것이든지 동작할 것이다.

[p.138 : 7행]
5장에서는
->
다음 레시피에서는

[p.141 : 밑에서 3행]
이것은 일반적으로 멤버 함수를 추가하고 함수를 추가하거나, 액터 클래스가 존재하는 컴포넌트를 추가해 새로운 하위 클래스를 만드는 것을 할 수 있다.
->
이것은 일반적으로 새로운 하위 클래스를 만들고 멤버 변수나 함수를 추가하던지, 존재하는 액터 클래스에 컴포넌트를 추가한다. 이번 레시피에서는 GameState의 서브 클래스에 변수를 추가할 것이다.

[p.150 : 밑에서 2행]
다른 액터의 컴포넌트와 통신하는 일을 수행할 수 있다.
->
그 액터안에 존재하는 다른 컴포넌트들과 통신하는 일을 수행할 수 있다.

[p.172 : 코드 1행]
InventoryComponent, then add the following code to it:
->
(삭제)

[p.174 : 3행]
데이터
->
에디터

[p.186 : 밑에서 3행]
이 컴포넌트는 컴포넌트의 부모를 특별한 방식으로 움직이게 만들도록 디자인된 RotatingMovementComponent와 유사하다.
->
이 컴포넌트는 RotatingMovementComponent가 자신을 부모로 가진 컴포넌트들을 특별한 방식으로 이동시키는 디자인과 유사하다.

[p.192 : 코드 1행]
implement to the class:
->
(삭제)

[p.192 : 8행]
새로운 클래스의 하위 클래스
->
새로운 Actor의 하위 클래스

[p.206 : 밑에서 3행]
델리게이트는 할당된 기능을 모른 채 함수를 호출할 수 있다.
->
델리게이트는 어떤 함수가 할당됐는지 몰라도 함수를 호출할 수 있다.

[p.214 : 코드 1행]
FParamDelegateSignatureMyParameterDelegate;
->
FParamDelegateSignature MyParameterDelegate;

[p.246 : 2번째 코드]
UPlayerInput::AddEngineDefinedAxisMapping() UPlayerInput::AddEngineDefinedActio nMapping()
->
UPlayerInput::AddEngineDefinedAxisMapping()
UPlayerInput::AddEngineDefinedActionMapping()

[p.266 : 3번 코드]
FStringGetTestName()
->
FString GetTestName()

[p.266 : 4번 코드]
FStringASingleInterfaceActor
->
FString ASingleInterfaceActor

[p.271 : 4번]
CUlass
->
UClass

[p.285 : 3번 코드]
voidISelectable
->
void ISelectable

[p.304-305 : 7번 코드 중복 내용 삭제]
Implmement the default implementation of our StartTalking
function:
voidATalkingMesh::StartTalking_Implementation()
{
GEngine->AddOnScreenDebugMessage(-1, 1, FColor::Red,
TEXT("Hello there. What is your name?"));
}

[p.305 : 2행]
voidATalkingMesh
->
void ATalkingMesh