C++ 스크립트를 활용한 언리얼 엔진 5 게임 개발 [C++ 기초부터 실제 게임 개발까지, 언리얼 게임 개발의 모든 것]
- 원서명Unreal Engine 5 Game Development with C++ Scripting: Become a professional game developer and create fully functional, high-quality games (ISBN 9781804613931)
- 지은이젠유 조지 리(Zhenyu George Li)
- 옮긴이진석준
- ISBN : 9791161759289
- 38,000원
- 2024년 11월 29일 펴냄
- 페이퍼백 | 456쪽 | 188*235mm
- 시리즈 : 게임 개발 프로그래밍
책 소개
요약
C++와 객체지향의 기본적인 개념을 배우는 것부터 시작해 C++ 스크립트와 언리얼 블루프린트를 활용해 실제 게임을 개발하는 과정을 차근차근 설명하는 책이다. 게임 액터와 캐릭터를 만들고 이를 제어하는 법, 다양한 오브젝트의 충돌을 처리하는 법, 코드가 완성된 다음 리팩터링을 통해 코드 전체의 품질을 향상하는 법 등 게임 개발 실전에서 다양하게 활용할 수 있는 내용을 상세하게 다루고 있다.
추천의 글
내가 조지 리(George Li)와 함께 일하면서 알고 지낸 지도 20년이 넘었다.
우리는 인터랙티브 아트를 가르치는 캐나다 밴쿠버 시내의 한 사립 대학에서 처음 만났다.나는 당시 언어학 교수로 대학에서 인지 과학 프로그램을 개발하고 있었다. 이런 종류의 프로그램 커리큘럼을 만들려면 내 전공 분야뿐만 아니라 다양한 다른 분야에 익숙해지고 그 분야의 동료들과 긴밀히 협력해야 했다. 특히 컴퓨팅 과학(인지), 심리학, 철학(특히 AI와 같은 사회 인식론적 문제와 관련된)과 같은 분야들이 더욱 그러했다. 이런 상황에서 나는 언어학 공부와 강의에 매진함과 동시에, 학생들에게는 3D 컴퓨터 애플리케이션(3ds 맥스, 3D 게임스튜디오, 언리얼)을 다루게 하고 영화와 TV, 게임에서 사용하는 애니메이션을 만드는 법을 가르쳤다.
조지 리는 대학에서 기술적인 요구 사항을 책임졌다. 나는 그가 유능하고 진취적일 뿐만 아니라(그는 캐나다로 이민 오기 전에 이미 중국에서 소프트웨어 엔지니어링 등 컴퓨팅과 관련된 분야에서 높은 직책을 맡았었다) 전산과 관련해 유능하고 혁신적인 사람이라는 사실을 빠르게 알 수 있었다. 특히 게임 엔진 개발에 관심이 많았던 그는 자체 제작한 텍스트와 게임을 활용한 실용서인 『XNA PC & Xbox360 C# Game Programming』(GOTOP Taiwan, 2007)을 이미 동료인 찰스 예(Charles Yeh)와 공동 집필하고 있었다.
조지와 나는 같은 대학의 동료로서 서로 통하는 부분이 있었으며, 또한 서로가 흥미로워하는 부분을 메꿔줄 수 있었다. 그 결과 우리는 2년 과정의 인터랙티브 아트 프로그램 커리큘럼을 만들고 학생들에게 이 과정을 가르칠 수 있었다.
나는 영국과 캐나다의 대학에서, 그리고 학술 저널을 비롯한 다양한 매체에서 편집위원으로 일하는 동안 사람들의 지적 수준과 업무 역량을 평가하는 일을 수행했다. 조지 리의 타고난 재능은 그의 업무 전반에 걸쳐 분명하게 빛나고 있으며 앞으로도 계속 그럴 것이라 생각한다. 그가 만들어내는 모든 산출물과 성과를 통해 그의 탁월한 지식과 능력을 알 수 있을 것이다.
이 책은 앞서 조지가 예와 공동 집필했던 책과 마찬가지로 독립 개발자 및 사내 교육 등에참고할 수 있는 용도로 만들어졌으며, 명확하고 효과적으로 작성돼 책의 내용을 기반으로 높은 품질의 게임을 만들어낼 수 있다.
아울러 이 책은 게임 분야에 광범위하게 기여할 수 있는 훌륭한 도서가 될 것이다. 조지가앞으로도 이 주제와 관련해 더 많은 중요한 역할을 수행하리라 믿어 의심치 않는다.
이 책이 여러분의 이후 활동과 생산물에 많은 도움을 주길 기대한다.
― E. 윈 로버츠(E. Wyn Roberts) 박사(M.A. Ph.D(Cantab)),
사이먼프레이저 대학교 언어학 명예 교수
이 책에서 다루는 내용
◆ 마이크로소프트 비주얼 스튜디오와 언리얼 엔진 에디터의 코딩 스킬
◆ 언리얼 엔진 C++ 스크립트를 위한 C++ 프로그래밍 기본 지식
◆ C++ 문법과 객체지향 프로그래밍의 기본 개념
◆ NPC 제어, 충돌, 상호작용, 내비게이션, UI, 멀티플레이어 메커니즘에 대한 이해
◆ 사전 정의된 언리얼 엔진 클래스와 프로그래밍 메커니즘 활용
◆ 현실적인 문제를 해결하고 업무를 완성하기 위해 필요한 코드 작성
◆ 게임 개발에서 활용되는 문제 해결 방법과 도구의 구현
이 책의 대상 독자
언리얼을 처음 접하는 초보자를 대상으로 하지 않는 책이다. 책의 내용을 둘러보기에 앞서 언리얼 엔진과 블루프린트에 대한 기초적인 이해가 필요하며 이들을 다뤄본 경험이 있어야 한다. 즉, 기초 지식과 경험이 있어야 이 책의 내용을 지렛대 삼아 기존 지식을 충실히 다지고 학습 효과를 극대화할 수 있을 것이다.
◆ 게임 디자이너, 아티스트와 같이 엔지니어가 아닌 게임 개발자들 중 언리얼 엔진을 활용한 게임 개발이라는 측면에서 C++를 공부하려는 사람들
◆ 언리얼 엔진 C++ 프로그래밍에 대한 경험이 부족하지만 다음 프로젝트나 구직을 위해 필요한 스킬을 빠르게 습득해야 하는 소프트웨어 엔지니어들
◆ 학습이나 개인 프로젝트를 위해 언리얼 C++ 프로그래밍을 배우고 습득하려는 학생들
◆ 언리얼 엔진을 사용한 게임 개발에 흥미를 느끼면서 책을 통해 포괄적인 지식을 얻으려는 사람들
이 책의 구성
1장, ‘첫 언리얼 C++ 게임 만들기’에서는 언리얼이 제공하는 일인칭 템플릿을 사용해 새로운 C++ 게임 프로젝트를 생성하는 법을 빠르게 살펴본다. 이 장에서는 현존하는 블루프린트 게임 프로젝트를 C++ 게임 프로젝트로 변환하는 방법도 알아볼 것이다.
2장, ‘비주얼 스튜디오에서 C++ 코드 편집하기’에서는 강력한 IDE인 마이크로소프트 비주얼 스튜디오에서 C++ 코드를 편집하는 법에 대해 배워본다. 기본적인 스킬뿐만 아니라 C++를 사용해 간단한 계산기 애플리케이션도 만들어볼 것이다.
3장, ‘C++와 객체지향 프로그래밍 배우기’에서는 작성한 계산기 프로젝트를 기반으로 C++ 프로그래밍을 좀 더 심도 있게 살펴본다. C++ 기본 문법, 데이터 유형, 흐름 제어 flow control도 함께 살펴볼 것이다. 아울러 C++ 객체지향 프로그래밍도 간단하게 소개한다.
4장, ‘FPS 게임 프로젝트와 C++ 코드 살펴보기’는 파일의 구조와 소스 파일을 포함해 생성된 일인칭 게임 프로젝트를 좀 더 자세히 다룬다. C++ 코드를 각 줄별로 간단히 설명하면서 C++ 코드가 동작하는 법을 더 잘 이해하도록 도와줄 것이다.
5장, ‘언리얼 엔진 게임플레이 프레임워크 기본 클래스 활용하기’에서는 새로운 탑다운 형식의 게임 프로젝트인 Pangaea1를 생성하는 법을 배워본다. 게임 액터인 DefenseTower를 만드는 법, 게임 캐릭터인 PlayerAvatar 클래스를 만드는 법, C++에서 액터 프로퍼티와 함수를 정의하는 법도 함께 살펴본다.
6장, ‘게임 액터 생성하기’에서는 게임 Pangaea의 메인 캐릭터를 만들고 설정하는 법을 설명한다. 이 장에는 캐릭터 설정, 애니메이션 인스턴스 만들기, 스테이트 머신 정의, 애니메이션과의 동기화 같은 내용도 포함된다.
7장, ‘캐릭터 제어하기’에서는 게임 캐릭터를 제어하는 법을 알아본다. 여기에는 입력 맵, 플레이어 입력 처리, 플레이어 캐릭터의 리액션을 효과적으로 프로세싱하기 등이 포함된다. 여기에 더해 NPC를 제어하는 AI 컨트롤러와 내비게이션 시스템에 대해서도 배워볼 것이다.
8장, ‘충돌 처리하기’에서는 엔진의 충돌 시스템과 게임 상호작용을 설정하는 법을 배워본다. 타격을 수행하거나 탄환에 맞는 것과 같은 충돌 이벤트를 처리하기 위해 액터 콜라이더와 트리거를 설정하는 법을 배우게 될 것이다.
9장, ‘C++ 코드 품질 향상하기’에서는 코드 리팩터링과 리파이닝을 통해 소프트웨어 엔지니어링을 직접 체험해보고, 아울러 게임 코드의 품질과 성능을 높이기 위해 클래스 일반화, 캐싱, 풀링 등의 방법도 함께 알아볼 것이다.
10장, ‘네트워크 멀티플레이어 게임 만들기’에서는 서버, 클라이언트, 멀티플레이어 모드를 포함한 기본적인 멀티플레이어 게임의 개념을 소개하는 것부터 시작한다. 이후 단계별로 싱글플레이어 게임을 멀티플레이어 게임으로 변환하는 작업을 수행해볼 것이다.
11장, ‘게임 플로 제어하기’에서는 게임 Pangaea를 완전한 멀티플레이어 게임으로 바꿔본다. 메인 메뉴와 로비를 만들고, 플레이어가 호스트로 게임을 시작하거나 혹은 클라이언트로 게임 세션에 조인하도록 만들어준다. 아울러 C++와 블루프린트 스크립트 스킬을 사용해 사용자 인터페이스 동작을 제어하는 것도 함께 살펴본다.
12장, ‘게임 폴리싱과 패키징’에서는 시각적인 사용자 경험과 제품의 성능을 높이는 측면에서 게임을 폴리싱하는 법을 알아본다. 새로운 리소스와 메서드 그리고 저자의 경험에 기반한 제안 등이 소개될 것이다. 또한 실행 가능한 스탠드얼론 형태로 배포할 수 있는 Pangaea 프로젝트를 설정하고 패키징하는 방법도 단계별로 알아본다.
목차
목차
- 1부 ― 언리얼 C++ 스크립트 시작하기
- 1장. 첫 언리얼 C++ 게임 만들기
- 기술적인 요구 사항
- 언리얼 C++ 스크립팅 살펴보기
- C++와 블루프린트의 차이
- 언제 C++를 사용하는가?
- C++ 프로그래밍과 C++ 스크립팅의 차이
- 템플릿을 활용해 C++ 슈팅 게임 프로젝트 생성하기
- 비주얼 스튜디오 2022 설치하기
- 언리얼 엔진에 소스 코드가 설치됐는지 확인하기
- 에픽게임즈 런처를 통해 언리얼 엔진 5 에디터 실행하기
- MyShooter C++ 프로젝트 생성하기
- 기본 소스 코드 에디터로 언리얼 엔진 5에 비주얼 스튜디오 연결하기
- 비주얼 스튜디오에서 C++ 소스 코드 열어보기
- 블루프린트 프로젝트를 C++ 프로젝트로 변환하기
- 요약
- 2장. 비주얼 스튜디오에서 C++ 코드 편집하기
- 기술적인 요구 사항
- 비주얼 스튜디오 시작하기
- 비주얼 스튜디오 IDE의 UI 살펴보기
- 코드 에디터
- 메뉴
- 검색 상자
- 툴바
- 솔루션 탐색기
- 출력 창
- 오류 목록 창
- 비주얼 스튜디오에서 코드 편집하기
- 입력 커서 제어하기
- 텍스트 편집 키
- 코드 선택
- 인텔리센스
- 유용한 단축키
- C++ 코딩 연습
- 비주얼 스튜디오에서 새로운 C++ 솔루션 생성하기
- main.cpp 파일 생성하기
- 에디터 테마 변경하기
- main.cpp에 초기 코드 작성하기
- Calculator 클래스 추가하기
- 요약
- 3장. C++와 객체지향 프로그래밍 배우기
- 기술적인 요구 사항
- C++ 알아보기
- C++ 프로그램 구조 살펴보기
- C++ 함수 정의하기
- 매개변수와 함수 정의
- 함수 호출하기
- main( ) 함수 작성하기
- 기본적인 계산기 프로그램 작성해보기
- C++ 문법 배우기
- C++ 데이터 유형 사용하기
- 변수 정의하기
- C++ 배열 사용하기
- C++ 연산자 사용하기
- 사용자 입력 받기
- C++ 주석 추가하기
- C++ 흐름 제어
- 개선된 계산기 프로그램 작성해보기
- 레퍼런스와 포인터 생성하기
- 레퍼런스
- 포인터
- 객체지향 프로그래밍 이해하기
- 객체지향 프로그래밍이란 무엇인가?
- 클래스와 객체는 무엇인가?
- C++에서 클래스 생성하기
- C++에서 객체 생성하기
- 객체지향 프로그래밍 계산기 프로그램 작성해보기
- calculator 클래스에 생성자와 게터 함수 추가하기
- Calculator 클래스를 상속하는 CalculatorEx 클래스 생성하기
- 요약
- 4장. FPS 게임 프로젝트와 C++ 코드 살펴보기
- 기술적인 요구 사항
- MyShooter C++ 프로젝트 구조 이해하기
- 게임 프로그램 구조 이해하기
- 소스 코드에 익숙해지기
- MyShooterCharacter.h
- MyShooterCharacter.cpp
- MyShooterProjectile.h와 MyShooterProjectile.cpp
- TPPickUpComponent.h와 TPPickUpComponent.cpp
- TPWeaponComponent.h와 TPWeaponComponent.cpp
- MyShooter.h와 MyShooter.cpp
- MyShooterGameMode.h와 MyShooterGameMode.cpp
- MyShooter.Build.cs, MyShooter.Target.cs, MyShooterEditor.target.cs
- 비주얼 스튜디오에서 언리얼 에디터 시작하고 게임 프로젝트 열기
- 요약
- 2부 ― 언리얼 엔진 C++ 스크립팅
- 5장. 언리얼 엔진 게임플레이 프레임워크 기본 클래스 활용하기
- 기술적인 요구 사항
- 내려보기 프로젝트 Pangaea 생성하기
- 게임플레이 프레임워크 기본 클래스 이해하기
- 게임 액터 클래스 생성하기
- ADefenseTower 클래스 생성하기
- AProjectile 클래스 생성하기
- APlayerAvatar 클래스 생성하기
- C++ 프로젝트 리컴파일하기
- UPROPERTY 매크로 사용하기
- UPROPERTY 문법
- UPROPERTY 지정자와 메타데이터
- ADefenseTower, AProjectile, APlayerAvatar 속성을 언리얼 엔진 프로퍼티로 마킹하기
- UFUNCTION 매크로 사용하기
- UFUNCTION 문법
- UFUNCTION 지정자와 메타데이터
- ADefenseTower, APlayerAvatar 멤버 함수를 UFUNCTION 매크로로 태깅하기
- 새로운 액터에 컴포넌트 추가하기
- 컴포넌트 헤더 파일 추가하기
- 두 컴포넌트에 프라이빗 프로퍼티 정의하기
- 컴포넌트에 퍼블릭 게터 함수 추가하기
- 클래스 생성자에 컴포넌트 생성하기
- 새로운 액터 클래스에서 블루프린트 생성하기
- 언리얼 게임플레이 프레임워크 클래스 학습하기
- Pangaea 게임에서 게임플레이 프레임워크 클래스 생성하기
- PlayerController 클래스 살펴보기
- GameModeBase 클래스 살펴보기
- GameState 살펴보기
- GameInstance 살펴보기
- 클래스 인스턴스 획득하기
- Cast 템플릿 함수 사용하기
- 요약
- 6장. 게임 액터 생성하기
- 기술적인 요구 사항
- 플레이어 아바타 설정하기
- 플레이어 아바타에 SpringArmComponent와 CameraComponent 추가하기
- 플레이어 아바타 초기화하기
- 캐릭터의 SkeletalMeshComponent 설정하기
- 캐릭터 모델 임포트하기
- BP_PlayerAvatar에서 Hero 스켈레탈 메시 사용하기
- 게임의 플레이어 폰 대체하기
- 플레이어 아바타의 애니메이션 블루프린트 생성하기
- PlayerAvatarAnimInstance 클래스 생성하기
- ABP_PlayerAvatar 블루프린트 생성하기
- ABP_PlayerAvatar에 스테이트 머신 생성하기
- 애니메이션 인스턴스와 이동 속도 싱크 맞추기
- 요약
- 7장. 캐릭터 제어하기
- 기술적인 요구 사항
- 플레이어 캐릭터를 제어해 공격 수행하기
- 액션 맵에 공격 액션 추가하기
- 공격 액션에 핸들러 함수 추가하기
- OnAttackPressed( ) 액션 핸들러 함수 구현하기
- CanAttack( )과 Attack( ) 함수 구현하기
- 애니메이션 루프를 수행하지 않도록 처리하기
- OnStateAnimationEnds 함수 구현하기
- 액터 파괴하기
- 적 캐릭터 생성하기
- Enemy 클래스 생성하기
- EnemyController 클래스 생성하기
- ABP_Enemy 애니메이션 블루프린트 생성하기
- BP_Enemy 블루프린트 생성하기
- 게임 테스트하기
- 노트
- 요약
- 8장. 충돌 처리하기
- 기술적인 요구 사항
- 충돌 감지의 이해
- 충돌 감지 프리셋 설정
- 충돌을 사용해 게임 상호작용 수행하기
- 무기, 디펜스 타워, 파이어볼 액터 다운로드하고 생성하기
- 무기 습득하기
- 적 무기 생성하기
- 디펜스 타워에서 파이어볼 발사하기
- 파이어볼 이동과 목표 충돌 체크하기
- 디펜스 타워 피격 처리하기
- 요약
- 9장. C++ 코드 품질 향상하기
- 기술적인 요구 사항
- 코드 리팩터링
- PlayerAvatarAnimInstance와 EnemyAnimInstance 클래스 통합하기
- PangaeaCharacer 클래스를 APlayerAvatar와 AEnemy 클래스의 부모 클래스로 만들기
- 코드 리파이닝
- 캐시 변수 사용하기
- 파이어볼 풀 만들기
- 디버그 메시지 출력하기
- UE_LOG 매크로 사용하기
- 디버그 메시지 화면에 출력하기
- 액터 인스턴스의 실제 클래스 타입 확인하기
- 요약
- 3부 ― 멀티플레이어 게임 만들기
- 10장. 네트워크 멀티플레이어 게임 만들기
- 기술적인 요구 사항
- 싱글플레이어 게임과 멀티플레이어 게임 비교해보기
- 에디터에서 멀티플레이어 게임 실행하기
- 멀티플레이어 게임 네트워크 모드 살펴보기
- 네트워크 동기화 처리하기
- RPC로 플레이어 공격 알려주기
- 복제를 통해 클라이언트와 액터 변수 동기화하기
- RepNotify를 통해 캐릭터의 체력 바 업데이트하기
- 서버에서 타격 처리하기
- 서버에서 파이어볼 생성하기
- 요약
- 11장. 게임 플로 제어하기
- 기술적인 요구 사항
- Pangaea 게임 플로 디자인하기
- UI 위젯 만들기
- BP_LobbyWidget 만들기
- BP_HUDWidget 만들기
- BP_GameOverWidget 만들기
- PangaeaGameInstance에 네트워크 기능 추가하기
- 게임 레벨에 UI 위젯 추가하기
- 게임 타이머 추가하기
- APangaeaGameState 클래스에 타이머 변수 추가하기
- 타이머 변수 리플리케이트하기
- OnTimeChangedDelegate 정의하기
- 커스텀 이벤트를 생성하고 OnTimeChangedDelegate에 바인딩하기
- 타이머 카운트다운하기
- APangaeaGameState를 프로젝트의 게임 스테이트 클래스로 할당하기
- 디펜스 타워를 파괴해 게임 승리하기
- 요약
- 12장. 게임 폴리싱과 패키징
- 기술적인 요구 사항
- 게임 폴리싱하기
- 고품질 게임 에셋 임포트해 사용하기
- 버그 수정하기
- 프로파일링과 최적화
- 언리얼 엔진 콘솔 명령어 사용하기
- 모드와 콘솔 명령어 살펴보기
- C++에서 콘솔 명령어 실행하기
- 게임 패키징하기
- 패키징에 필요한 프로젝트 설정
- 창으로 실행되는 게임 만들기
- 콘텐츠를 검색할 때 하드코딩된 경로를 사용하지 않는 법
- 프로젝트 패키징
- 패키징 이후에 할 일들
- 요약