프로젝트 기반으로 배우는 언리얼 엔진 5 게임 개발 2/e [언리얼 엔진 5와 C++를 활용한 게임 아이디어 실현]
- 원서명Elevating Game Experiences with Unreal Engine 5, 2nd Edition: Bring your game ideas to life using the new Unreal Engine 5 and C++ (ISBN 9781803239866)
- 지은이곤살로 마르케스(Gonçalo Marques), 데빈 쉐리(Devin Sherry), 데이비드 페레이라(David Pereira), 하마드 포지(Hammad Fozi)
- 옮긴이장세윤
- ISBN : 9791161757872
- 65,000원
- 2023년 09월 27일 펴냄
- 페이퍼백 | 900쪽 | 188*235mm
- 시리즈 : 게임 개발 프로그래밍
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/game-development-ue5
요약
언리얼 엔진 5를 활용한 게임 개발에 필요한 기술을 충실히 설명한다. 언리얼 엔진 5에 대한 소개를 시작으로, 게임 플레이 프레임워크, 엔진에 임포트한 콘텐츠를 C++에서 로드하는 방법, 언리얼 C++ 클래스와 블루프린트의 연동 방법, 플레이어 입력 처리, 라인 트레이스(Line Trace), 물체간 충돌 처리 방법, 액터 컴포넌트, 인터페이스, 블루프린트 함수 라이브러리 등의 언리얼 엔진 5 유틸리티 활용 방법, 사용자 인터페이스(User Interface), 사운드 및 오디오 이펙트 사용 방법, 블렌드 스페이스, 애니메이션 몽타주 등 애니메이션 활용 방법, 비헤이비어 트리와 블랙보드를 활용한 인공 지능 시스템 개발, 멀티 플레이어에 대한 내용까지 언리얼 엔진 5를 활용해 게임 제작을 할 때 필수적인 내용을 모두 다룬다.
각 내용에 대한 설명에 그치지 않고 배운 내용을 활용할 수 있도록 단계별로 프로젝트를 진행한다. 멀티 플레이어에 대한 내용까지 다루고 있기 때문에 싱글 플레이어 게임을 준비하는 개발자뿐만 아니라 멀티 플레이어 게임을 준비하는 개발자에게도 좋은 책이 될 수 있을 것이다.
이 책에서 다루는 내용
◆ 모든 기능을 갖춘 삼인칭 캐릭터와 적 제작
◆ 키보드, 마우스, 게임패드를 사용한 레벨 탐색 기능 구현
◆ 콜리전과 파티클 이펙트를 활용한 프로그램 로직 및 게임 메카닉 구현
◆ 블랙보드와 비헤이비어 트리를 활용한 AI 탐색 기능 구현
◆ 애니메이션 블루프린트와 애니메이션 몽타주를 활용한 캐릭터 애니메이션 제작
◆ 멋진 비주얼 이펙트 및 오디오 이펙트를 활용한 게임 폴리싱 방법
◆ 헤드업 디스플레이(HUD)를 활용한 기본적인 게임 UI의 제작
◆ 게임에 멀티플레이어를 구현하는 방법
이 책의 대상 독자
프로젝트에 언리얼 엔진 5(UE5, Unreal Engine 5)를 처음 사용하려는 게임 개발자를 대상으로 하는 책이다. 하지만 언리얼 엔진을 이미 경험했으며 자신의 기술을 통합하고 향상시켜 적용하려는 이들에게도 유용하다. 이 책에 설명된 개념을 충분히 이해하려면 C++에 대한 기본 지식이 필요하며 변수, 함수, 클래스, 다형성, 포인터를 이해해야 한다. 또한 책에 사용된 통합 개발 환경(IDE, Integrated Development Environment)과의 완전한 호환성을 위해 윈도우 시스템을 권장한다.
이 책의 구성
1장. ‘언리얼 엔진 소개’에서는 언리얼 엔진 에디터를 살펴본다. 에디터 인터페이스를 소개하며, 레벨에서 액터를 조작하는 방법과 비주얼 스크립팅 언어인 블루프린트의 기초를 이해하기 위한 내용을 다룬다. 또한 메시(mesh)에서 사용할 수 있는 머티리얼 애셋을 만드는 방법도 알아본다.
2장. ‘언리얼 엔진을 활용한 작업’에서는 C++ 프로젝트를 생성하고 프로젝트의 콘텐츠 폴더(Content Folder)를 설정하는 방법과 함께 언리얼 엔진 게임의 기본 사항을 소개한다. 또한 애니메이션 관련 내용도 살펴본다.
3장. ‘Character 클래스 컴포넌트 및 블루프린트 설정’에서는 객체 상속에 대한 개념 및 입력 매핑을 활용하는 방법과 함께 언리얼 캐릭터(Unreal Character) 클래스를 소개한다.
4장. ‘플레이어 입력 시작’에서는 플레이어 입력을 살펴본다. 액션 매핑 및 축 매핑을 활용해 점프나 이동 동작과 같은 인게임 액션(in-game action)에 키 눌림이나 터치 입력을 연결하는 방법을 배운다.
5장. ‘라인 트레이스를 활용한 충돌 처리’에서는 Dodgeball이라는 새로운 프로젝트를 시작한다. 이 장에서는 라인 트레이스의 개념과 게임 제작에 라인 트레이스를 사용하는 다양한 방법을 배운다.
6장. ‘콜리전 오브젝트 설정’에서는 물체 충돌(object collision)을 알아본다. 콜리전 컴포넌트, 콜리전 이벤트, 피직스(physics) 시뮬레이션을 배우고 타이머, 프로젝타일 무브먼트 컴포넌트, 피직스 머티리얼도 함께 살펴본다.
7장. ‘언리얼 엔진 5 유틸리티 활용’에서는 언리얼 엔진에서 활용할 수 있는 몇 가지 유용한 유틸리티를 구현하는 방법을 설명한다. 여기에는 액터 컴포넌트, 인터페이스, 블루프린트 함수 라이브러리에 대한 설명이 포함된다. 이런 유틸리티는 개발 팀에 합류하는 다른 사람들이 프로젝트를 좋은 구조로 유지하고, 쉽게 접근할 수 있도록 도와준다.
8장. ‘UMG로 사용자 인터페이스 만들기’에서는 게임 UI를 설명한다. 언리얼 엔진의 UI 시스템인 UMG를 사용해 메뉴, HUD를 만드는 방법을 배운다. 또한 프로그레스 바를 사용해 플레이어 캐릭터의 체력을 표시하는 방법도 살펴본다.
9장. ‘오디오-비주얼 요소 추가’에서는 언리얼 엔진의 사운드 및 파티클 이펙트를 소개한다. 프로젝트에 사운드 파일을 임포트하는 방법과 2D 및 3D 사운드로 사용하는 방법, 기존의 파티클 시스템을 게임에 추가하는 방법을 배운다. 마지막으로, 지난 몇 장에 걸쳐 만든 모든 게임 메카닉을 사용해 Dodgeball 프로젝트를 완성할 새 레벨을 제작한다.
10장. ‘슈퍼 사이드 스크롤러 게임 만들기’에서는 SuperSideScroller 프로젝트의 목표를 상세히 살펴보며, 기본 마네킹 스켈레톤을 조작하는 예제를 통해 언리얼 엔진 5에서 애니메이션이 동작하는 방식을 다룬다.
11장. ‘블렌드 스페이스 1D, 키 바인딩, 스테이트 머신을 활용한 작업’에서는 플레이어 캐릭터의 이동 기반 애니메이션 로직을 제작하기 위해 블렌드 스페이스 1D, 애니메이션 스테이트 머신, 언리얼 엔진 5의 향상된 입력 시스템을 사용하는 방법을 배운다.
12장. ‘애니메이션 블렌딩과 몽타주’에서는 플레이어 캐릭터가 움직이면서 발사체를 던질 때 동시에 애니메이션이 재생되도록 하기 위해 언리얼 엔진 5의 애니메이션 블렌딩과 애니메이션 몽타주 같은 애니메이션 개념을 추가적으로 배운다.
13장. ‘적 인공지능 생성 및 추가’에서는 플레이어가 마주할 수 있는 적에 대한 간단한 AI 기능을 만들기 위해 언리얼 엔진 5의 AI 컨트롤러, 블랙보드, 비헤이비어 트리를 사용하는 방법을 배운다.
14장. ‘플레이어 발사체 생성’에서는 게임 물체를 생성하고 파괴하는 방법을 배운다. 또한 애님 노티파이, 애님 노티파이 스테이트와 같은 애니메이션 기능을 추가적으로 사용해 애니메이션 도중에 플레이어 발사체를 생성하는 방법을 살펴본다.
15장. ‘수집 아이템, 강화 아이템, 픽업 아이템’에서는 언리얼 엔진 5의 UMG UI 개념을 소개하고, 플레이어를 위한 수집 아이템, 강화 아이템을 제작한다.
16장. ‘멀티플레이어 기본’에서는 서버-클라이언트 아키텍처가 동작하는 방식을 소개하고 연결, 액터 소유권, 역할, 변수 리플리케이션과 같은 멀티플레이어 개념을 다룬다. 또한 2D 블렌드 스페이스를 살펴보고, 2차원 움직임에 대한 애니메이션 그리드를 생성하고, Transform Modify Bone 컨트롤을 사용해 본의 트랜스폼을 런타임에 변경하는 방법을 배운다.
17장. ‘RPC 사용’에서는 RPC(Remote Procedure Call)가 동작하는 방식, 다른 타입의 RPC, RPC를 사용할 때 고려해야 할 사항 등을 설명한다. 또한 열거형을 에디터에 노출시키는 방법과 배열 인덱스 래핑을 사용해 양방향으로 배열을 순회하는 방법을 소개한다.
18장. ‘멀티플레이어에서 게임플레이 프레임워크 클래스 사용’에서는 멀티플레이에서 게임플레이 프레임워크의 가장 중요한 클래스를 사용하는 방법을 설명한다. 게임 모드, 플레이어 스테이트, 게임 스테이트와 몇 가지 유용한 엔진 내장 기능도 살펴본다.
상세 이미지
목차
목차
- 1장. 언리얼 엔진 소개
- 기술적 요구 사항
- 실습 1.01: 언리얼 엔진 5 프로젝트 생성하기
- 언리얼 엔진 살펴보기
- 에디터 창 탐험하기
- 뷰포트 탐색
- 액터 조작하기
- 실습 1.02: 액터를 추가 및 삭제하기
- 블루프린트 액터
- 실습 1.03: 블루프린트 액터 생성하기
- 블루프린트 에디터 탐험하기
- 이벤트 그래프 창 탐험하기
- 실습 1.04: 블루프린트 변수 생성하기
- 실습 1.05: 블루프린트 함수 생성하기
- 곱하기 노드 이해하기
- BeginPlay와 Tick 이벤트 탐험하기
- 실습 1.06: TestActor 클래스를 Z축으로 이동시키기
- ThirdPersonCharacter 블루프린트 클래스
- 메시와 머티리얼의 사용법 탐험하기
- 메시
- 머티리얼
- UE5에서 머티리얼 조작하기
- 활동 1.01: TestActor를 Z축으로 계속 이동시키기
- 요약
- 기술적 요구 사항
- 2장. 언리얼 엔진을 활용한 작업
- 기술적 요구 사항
- 빈 C++ 프로젝트를 생성하고 설정하기
- 실습 2.01: 빈 C++ 프로젝트 생성하기
- 언리얼 엔진의 Content 폴더 구조
- 비주얼 스튜디오 솔루션을 활용해 작업하기
- 비주얼 스튜디오에서 코드 디버깅하기
- 실습 2.02: 삼인칭 템플릿 코드 디버깅하기
- 필요한 애셋 임포트하기
- 실습 2.03: 캐릭터 FBX 파일 임포트하기
- 언리얼 게임 모드 클래스
- 게임 모드 기본 클래스
- 게임플레이 이벤트
- 네트워킹
- GameModeBase와 게임 모드 비교하기
- 레벨과 레벨 블루프린트 이해하기
- 언리얼 폰 클래스
- 언리얼 플레이어 컨트롤러 클래스
- 실습 2.04: 게임 모드, 플레이어 컨트롤러, 폰 설정하기
- 애니메이션 활용하기
- 애니메이션 블루프린트
- 이벤트 그래프
- 애님 그래프
- 스테이트 머신
- 트랜지션 룰
- 블렌드 스페이스
- 실습 2.05: 마네킹 애니메이션 만들기
- 활동 2.01: 캐릭터에 애니메이션 연결하기
- 요약
- 3장. Character 클래스 컴포넌트 및 블루프린트 설정
- 기술적 요구 사항
- 언리얼 캐릭터 클래스
- 캐릭터 클래스 확장하기
- 실습 3.01: 삼인칭 캐릭터 C++ 클래스 생성 및 설정하기
- C++ 클래스를 블루프린트에서 확장하기
- 실습 3.02: 블루프린트로 C++ 클래스 확장하기
- 활동 3.01: 애니메이션 프로젝트에서 C++ 캐릭터 클래스를 블루프린트로 확장하기
- 요약
- 4장. 플레이어 입력 시작
- 기술적 요구 사항
- 입력 액션과 입력 콘텍스트 이해하기
- 실습 4.01: Movement와 Jump 입력 액션 생성하기
- 플레이어 입력 처리하기
- 실습 4.02: Movement 및 Jump 입력 액션 수신하기
- 캐릭터 주변으로 카메라 회전시키기
- 활동 4.01: 캐릭터에 걷기 로직 추가하기
- 요약
- 5장. 라인 트레이스를 활용한 충돌 처리
- 기술적 요구 사항
- 콜리전 소개
- 프로젝트 설정
- 실습 5.01: DodgeballCharacter를 톱다운 시점으로 전환하기
- 라인 트레이스 이해하기
- EnemyCharacter C++ 클래스 생성하기
- 실습 5.02: 라인 트레이스를 실행하는 CanSeeActor 함수 생성하기
- 라인 트레이스 시각화하기
- 실습 5.03: LookAtActor 함수 만들기
- EnemyCharacter 블루프린트 클래스 생성하기
- 스윕 트레이스
- 실습 5.04: 스윕 트레이스 실행하기
- Visibility 트레이스 반응 변경하기
- 멀티 라인 트레이스
- Camera 트레이스 채널
- 실습 5.05: 커스텀 EnemySight 트레이스 채널 만들기
- 활동 5.01: SightSource 속성 생성하기
- 요약
- 6장. 콜리전 오브젝트 설정
- 기술적 요구 사항
- UE5에서의 물체 간 충돌
- 콜리전 컴포넌트
- 충돌 이벤트 이해하기
- 콜리전 채널 이해하기
- 실습 6.01: Dodgeball 클래스 생성하기
- 피지컬 머티리얼 생성하기
- 실습 6.02: DodgeballProjectile에 프로젝타일 무브먼트 컴포넌트 추가하기
- 타이머 도입하기
- 액터 생성 방법 이해하기
- 실습 6.03: EnemyCharacter 클래스에 발사체 던지기 로직 추가하기
- Wall 클래스 생성하기
- 실습 6.04: Wall 클래스 생성하기
- 빅토리 박스 생성하기
- 실습 6.05: VictoryBox 클래스 만들기
- 실습 6.06: DodgeballProjectile에 ProjectileMovementComponent Getter 함수 추가하기
- 활동 6.01: EnemyCharacter의 SpawnActor를 SpawnActorDeferred 함수로 대체하기
- 요약
- 7장. UE5 유틸리티 활용
- 기술적 요구 사항
- 모범 사례: 느슨한 결합
- 블루프린트 함수 라이브러리
- 실습 7.01: CanSeeActor 함수를 블루프린트 함수 라이브러리로 옮기기
- 액터 컴포넌트
- 실습 7.02: HealthComponent 액터 컴포넌트 만들기
- 실습 7.03: HealthComponent 액터 컴포넌트 통합하기
- 인터페이스 살펴보기
- 블루프린트 네이티브 이벤트
- 실습 7.04: HealthInterface 클래스 만들기
- 활동 7.01: LookAtActor 로직을 액터 컴포넌트로 옮기기
- 요약
- 8장. UMG로 사용자 인터페이스 만들기
- 기술적 요구 사항
- 게임 UI
- UMG 기초
- 실습 8.01: 위젯 블루프린트 생성하기
- 앵커 소개하기
- 실습 8.02: UMG 앵커 편집하기
- 실습 8.03: RestartWidget C++ 클래스 생성하기
- 실습 8.04: RestartWidget을 화면에 추가하는 로직 만들기
- 실습 8.05: DodgeballPlayerController 블루프린트 클래스 설정하기
- 프로그레스 바 이해하기
- 실습 8.06: 체력 바 C++ 로직 추가하기
- 활동 8.01: RestartWidget 향상시키기
- 요약
- 9장. 오디오-비주얼 요소 추가
- 기술적 요구 사항
- UE5의 오디오
- 실습 9.01: 오디오 파일 임포트하기
- 실습 9.02: 닷지볼이 표면에 부딪힐 때마다 사운드 재생하기
- Sound Attenuation
- 실습 9.03: BOUND SOUND를 3D 사운드로 변경하기
- 실습 9.04: 게임에 배경 음악 추가하기
- 파티클 시스템 이해하기
- 실습 9.05: 닷지볼이 플레이어에 맞았을 때 파티클 시스템 생성하기
- 활동 9.01: 닷지볼이 플레이어에 맞을 때 오디오 재생하기
- 레벨 디자인 살펴보기
- 실습 9.06: 레벨 블록아웃 제작하기
- 추가 기능
- 요약
- 10장. 슈퍼 사이드 스크롤러 게임 만들기
- 기술적 요구 사항
- 프로젝트 분석
- 플레이어 캐릭터
- 삼인칭 템플릿을 사이드 스크롤러로 전환하기
- 실습 10.01: 횡스크롤 프로젝트 생성 및 캐릭터 무브먼트 컴포넌트 사용해보기
- 활동 10.01: 캐릭터가 더 높이 점프하도록 만들기
- 슈퍼 사이드 스크롤러 게임의 기능 살펴보기
- 적 캐릭터
- 파워업
- 수집용 아이템
- 헤드업 디스플레이
- 실습 10.02: 페르소나 에디터와 기본 마네킹 스켈레톤의 가중치 조정해보기
- 활동 10.02: 스켈레탈 본 조작 및 애니메이션
- 언리얼 엔진 5의 애니메이션 이해하기
- 스켈레톤
- 스켈레탈 메시
- 애니메이션 시퀀스
- 실습 10.03: 캐릭터와 애니메이션의 임포트 및 설정
- 활동 10.03: 더 많은 커스텀 애니메이션을 임포트하고 캐릭터의 달리는 애니메이션 확인하기
- 요약
- 11장. 블렌드 스페이스 1D, 키 바인딩, 스테이트 머신
- 기술적 요구 사항
- 블렌드 스페이스 생성하기
- 1D 블렌드 스페이스 vs. 일반 블렌드 스페이스
- 실습 11.01: CharacterMovement 블렌드 스페이스 1D 생성하기
- 활동 11.01: 걷기와 달리기 애니메이션을 블렌드 스페이스에 추가하기
- 메인 캐릭터 애니메이션 블루프린트
- 애니메이션 블루프린트
- 실습 11.02: 캐릭터 애니메이션 블루프린트에 블렌드 스페이스 추가하기
- 속도 벡터란?
- 실습 11.03: 블렌드 스페이스에 캐릭터의 Speed 변수 전달하기
- 활동 11.02: 게임에서 달리는 애니메이션 미리보기
- 향상된 입력 시스템
- 실습 11.04: 전력 질주를 위한 입력 추가하기
- 실습 11.05: 캐릭터 블루프린트의 부모 클래스 재설정하기
- 실습 11.06: 캐릭터 전력 질주 기능 코딩하기
- 활동 11.03: 던지기 입력 구현하기
- 애니메이션 스테이트 머신
- 실습 11.07: 플레이어 캐릭터의 이동 및 점프 스테이트 머신
- 트랜지션 룰
- 실습 11.08: 스테이트 머신에 새 스테이트와 트랜지션 룰 추가하기
- 실습 11.09: Time Remaining Ratio 함수
- 활동 11.04: Movement와 Jumping 스테이트 머신 완성하기
- 요약
- 12장. 애니메이션 블렌딩과 몽타주
- 기술적 요구 사항
- 애니메이션 블렌딩, 애님 슬롯, 애니메이션 몽타주
- 실습 12.01: 애니메이션 몽타주 설정하기
- 애니메이션 몽타주
- 실습 12.02: 몽타주에 던지기 애니메이션 추가하기
- Anim Slot Manager
- 실습 12.03: 새 애님 슬롯 추가하기
- Save Cached Pose
- 실습 12.04: Movement 스테이트 머신의 Save Cached Pose
- Layered blend per bone
- 실습 12.05: Upper Body 애님 슬롯과 애니메이션 블렌딩하기
- 실습 12.06: Throw 애니메이션 미리보기
- 슈퍼 사이드 스크롤러 게임의 적
- 실습 12.07: 기본 적 C++ 클래스 생성하기
- 실습 12.08: 적 애니메이션 블루프린트의 생성 및 적용
- 머티리얼과 머티리얼 인스턴스
- 실습 12.09: 적 머티리얼 인스턴스의 생성 및 적용
- 활동 12.01: 블렌드 웨이트 업데이트하기
- 요약
- 13장. 적 AI 생성 및 추가
- 기술적 요구 사항
- 적 AI
- AI 컨트롤러
- Auto Possess AI
- 실습 13.01: AI 컨트롤러 구현하기
- 내비게이션 메시
- 실습 13.02: 적을 위한 내비 메시 볼륨 구현하기
- RecastNavMesh
- 실습 13.03: RecastNavMesh 볼륨 파라미터
- 활동 13.01: 새 레벨 생성하기
- 비헤이비어 트리와 블랙보드
- 태스크
- 데코레이터
- 서비스
- 실습 13.04: AI 비헤이비어 트리와 블랙보드 생성하기
- 실습 13.05: 비헤이비어 트리 태스크 생성하기
- 실습 13.06: 비헤이비어 트리 로직 생성하기
- 활동 13.02: 플레이어 위치로 이동하는 AI
- 실습 13.07: 적 정찰 위치 생성하기
- 벡터 변환
- 실습 13.08: 배열에서 랜덤 위치 선택하기
- 실습 13.09: 정찰 위치 액터 참조하기
- 실습 13.10: BTTask_FindLocation 업데이트하기
- 플레이어 발사체
- 실습 13.11: 플레이어 발사체 생성하기
- 실습 13.12: PlayerProjectile 클래스의 설정 초기화하기
- 활동 13.03: 플레이어 발사체 블루프린트 생성하기
- 요약
- 14장. 플레이어 발사체 생성
- 기술적 요구 사항
- 애님 노티파이와 애님 노티파이 스테이트
- 실습 14.01: UAnimNotify 클래스 생성하기
- 실습 14.02: Throw 애니메이션 몽타주에 새 노티파이 추가하기
- 애니메이션 몽타주 재생하기
- 블루프린트에서 애니메이션 몽타주 재생하기
- C++에서 애니메이션 몽타주 재생하기
- 실습 14.03: C++에서 Throw 애니메이션 재생하기
- 실습 14.04: 발사체 생성 소켓 만들기
- 실습 14.05: SpawnProjectile() 함수 준비하기
- 실습 14.06: Anim_ProjectileNotify 클래스 업데이트하기
- 액터 제거하기
- 실습 14.07: DestroyEnemy() 함수 생성하기
- 실습 14.08: 발사체 제거하기
- 활동 14.01: 적을 파괴하는 발사체
- 비주얼 이펙트와 오디오 이펙트
- 비주얼 이펙트
- 오디오 이펙트
- 실습 14.09: 적이 파괴될 때 이펙트 추가하기
- 실습 14.10: 플레이어 발사체에 이펙트 추가하기
- 실습 14.11: VFX 노티파이와 SFX 노티파이 추가하기
- 활동 14.02: 발사체가 파괴될 때 이펙트 추가하기
- 요약
- 15장. 수집 아이템, 강화 아이템, 픽업 아이템
- 기술적 요구 사항
- URotatingMovementComponent 이해하기
- 실습 15.01: PickableActor_Base 액터 클래스 생성 및 URotatingMovementComponent 추가하기
- 활동 15.01: PickableActor_Base에서 플레이어 오버랩 감지 및 이펙트 생성하기
- 실습 15.02: PickableActor_Collectable 클래스 생성하기
- 활동 15.02: PickableActor_Collectable 액터 마무리하기
- UE_LOG를 사용해 변수 출력하기
- 실습 15.03: 플레이어가 수집한 코인의 수 추적하기
- 언리얼 모션 그래픽 UI 소개하기
- Text 위젯 이해하기
- 앵커
- 텍스트 서식
- 실습 15.04: 코인 카운터 UI HUD 요소 생성하기
- UMG 사용자 위젯의 추가와 생성
- 실습 15.05: 플레이어 화면에 코인 카운터 UI 추가하기
- 타이머 사용하기
- 실습 15.06: 플레이어에게 파워업 물약 동작 추가하기
- 활동 15.03: 파워업 물약 액터 생성하기
- 실습 15.07: Brick 클래스 생성하기
- 실습 15.08: Brick 클래스 C++ 로직 추가하기
- 요약
- 새로운 도전 과제
- 16장. 멀티플레이어 기본
- 기술적 요구 사항
- 멀티플레이어의 기본
- 서버 이해하기
- 데디케이트 서버
- 리슨 서버
- 클라이언트 이해하기
- 실습 16.01: 멀티플레이어에서 삼인칭 템플릿 테스트하기
- 프로젝트 패키징하기
- 연결과 오너십 살펴보기
- 롤 살펴보기
- 액터가 서버에서 생성됨
- 액터가 클라이언트에서 생성됨
- 플레이어가 소유한 폰이 서버에서 생성됨
- 플레이어가 소유한 폰이 클라이언트에서 생성됨
- 실습 16.02: 오너십과 롤 구현하기
- 서버 창의 출력
- 서버 캐릭터
- 클라이언트 1 캐릭터
- OwnershipTest 액터
- 클라이언트 1 창의 출력
- 변수 리플리케이션 이해하기
- 복제된 변수
- 실습 16.03: Replicated, ReplicatedUsing, DOREPLIFETIME, DOREPLIFETIME_CONDITION을 사용해 변수 복제하기
- 서버 창의 출력
- 클라이언트 1 창의 출력
- 2D 블렌드 스페이스
- 실습 16.04: Movement 2D 블렌드 스페이스 생성하기
- 본 변환하기
- 실습 16.05: 위아래로 보는 캐릭터 만들기
- 활동 16.01: 멀티플레이어 FPS 프로젝트에 사용할 캐릭터 생성하기
- 요약
- 17장. RPC 사용
- 기술적 요구 사항
- RPC 이해하기
- 서버 RPC
- 멀티캐스트 RPC
- 클라이언트 RPC
- RPC를 사용할 때 주의할 사항
- 실습 17.01: RPC 사용하기
- 에디터에 열거형 노출시키기
- TEnumAsByte
- UMETA
- BlueprintType
- 실습 17.02: 에디터에서 C++ 열거형 사용하기
- 순환 배열 인덱싱
- 실습 17.03: 양방향 순환 배열 인덱싱을 활용한 열거형 순환
- 활동 17.01: 멀티플레이어 FPS 게임에 무기와 탄약 추가하기
- 요약
- 18장. 멀티플레이어에서 게임플레이 프레임워크 클래스 사용
- 기술적 요구 사항
- 멀티플레이어에서 게임플레이 프레임워크 클래스 접근하기
- 실습 18.01: 게임플레이 프레임워크 인스턴스 값 표시하기
- 서버 창 출력
- 클라이언트 1 창
- 게임 모드, 플레이어 스테이트, 게임 스테이트 사용하기
- 게임 모드
- 플레이어 스테이트
- 게임 스테이트
- 유용한 내장 기능들
- 실습 18.02: 간단한 멀티플레이어 아이템 줍기 게임 만들기
- 활동 18.01: 멀티플레이어 FPS 게임에 죽음, 리스폰, 스코어보드, 킬 제한, 아이템 추가하기
- 요약
- 찾아보기
도서 오류 신고
정오표
정오표
[ p.128 : 3행 ]
24. 22단계에서 얻은 노드에서
->
24. 23단계에서 얻은 노드에서
[ p.132 : 1행 ]
38. Jump_Start 스테이트를 열고 ThirdPersonJump_Loop 재생 노드를 클릭한다.
->
38. Jump_Start 스테이트를 열고 ThirdPersonJump_Start 재생 노드를 클릭한다.
[ p.153 : 3행 ]
16. 입력(input) 섹션을 클릭하면 엔진(Engine) 섹션을 찾을 수 있을 것이다.
->
16. 엔진(Engine) 섹션에서 입력(input) 섹션을 찾아서 클릭한다.
[ p.171: 실습 4.01 - 3단계 ]
Actuation Threshold를 0,1로 설정한다.
이렇게 하면 이 입력 액션은 매핑된 키들 중 하나가 적어도 0,1의 동작 임계값을 넘어야 호출된다.
->
Actuation Threshold를 0.1로 설정한다.
이렇게 하면 이 입력 액션은 매핑된 키들 중 하나가 적어도 0.1의 동작 임계값을 넘어야 호출된다.
[ p.171: 그림 4.4 ]
->
[ p.175: 16단계 ]
Down 트리거를 추가하고 Actuation Threshold를 0,5로 설정한다.
->
Down 트리거를 추가하고 Actuation Threshold를 0.5로 설정한다.
[ p.175: 그림 4.12 ]
->
[ p.177 : 11행 ]
2. public 클래스 UInputMappingContext* 속성을
->
2. public class UInputMappingContext* 속성을
[ p.177 : 16행 ]
2개의 public 클래스 UInputAction* 속성을
->
2개의 public class UInputAction* 속성을
[ p.187 : 3행 ]
2장, '언리얼 엔진을 활용한 작업'에서
->
3장, 'Character 클래스 컴포넌트 및 블루프린트 설정'에서
[ p.187 : 6행 ]
1. IA_Move 입력 액션을
->
1. IA_Movement 입력 액션을
[ p.187 : 8행 ]
IA_Move 입력 액션과
->
IA_Movement 입력 액션과
[ p.187 : 10행 ]
IA_Character
->
IC_Character
[ p.187 : 13행 ]
Y키는 입력 액션의 Y축을 제어하기 때문에
->
Mouse Y, 게임패드 오른쪽 썸스틱 Y축은 입력 액션의 Y축을 제어하기 때문에
[ p.192 : 1행 ]
2. 이어서, IA_Character
->
2. 이어서, IC_Character
[ p.201 : 아래에서 5행 ]
실습 4.02의 14단계에서
->
실습 4.02의 13단계에서
[ p.230 : 10행 ]
4. BP_Character 블루프린트 클래스를 열고
->
4. BP_EnemyCharacter 블루프린트 클래스를 열고
[ p.319 : 아래에서 2행 ]
계층 구조 탭에서
->
계층 구조 탭으로
[ p.433 : 3행 ]
Shift 키를 누른 상태에서
->
Ctrl 키를 누른 상태에서
[ p.438 : 아래에서 5행 ]
11. 마지막으로, Number of Grid Divisions 파라미터의 값을
->
11. 마지막으로, Grid Divisions 파라미터의 값을
[ p.441 : NOTE ]
축을 따라 Shift 키를 누른 채
->
축을 따라 Ctrl 키를 누른 채
[ p.620 : 5행 ]
8. 디테일 패널에서는 Throw Montage 파라미터에서 Player Projectile 파라미터를 찾을 수 있을 것이다.
->
8. 디테일 패널의 Throw Montage 프로퍼티 밑에서 Player Projectile 프로퍼티를 찾을 수 있을 것이다.
[ p.679 : 아래에서 3행 ]
19. 그런 다음, Get Number of Collectables 함수의 Return Value 텍스트 파라미터에서
->
19. 그런 다음, Return Node 의 Return Value 핀에서
[ p.687 : 7행 ]
13. Return Value 파라미터를 CreateWidget 함수에 연결했으면,
->
13. 형 변환 노드와 CreateWidget 함수를 연결했으면,
[ p.692 : 10행 ]
4. 다음으로, private 접근
->
4. 다음으로, public 접근
[ p.693 : 11행 ]
GetCharacterMovement()->JumpZVelocity = 1500.0f
->
GetCharacterMovement()->JumpZVelocity = 1500.0f;
[ p.710 : 아래에서 6행 ]
액터의 디테일(Details) 패널에서 Super Side Scroller Brick 섹션을 찾고
->
액터의 디테일(Details) 패널에서 Brick 섹션을 찾고
[ p.730 : 아래에서 7행 ]
Platforms > 창(Windows) > 패키지 프로젝트 메뉴로
->
Platforms > Windows > 패키지 프로젝트 메뉴로
[ p.740 : 아래에서 2행 ]
앞의 코드를 살펴보면 OwnershipRoles.h, OwnershipRolesCharacter.h, StaticMeshComponent.h를 포함시켰는데,
->
앞의 코드를 살펴보면 OwnershipRoles.h, OwnershipRolesCharacter.h, Kismet/GameplayStatics.h를 포함시켰는데,
[ p.812 : 첫 번째 코드 ]
Display Name
->
DisplayName
언리얼 5.0.3 변경사항
[ p.400 : 2행 ]
1. SideScrollerCharacter 블루프린트로 가서
->
1. BP_ThirdPersonCharacter 블루프린트로 가서
[ p.400 : 5행 ]
3. SideScrollerCharacter 블루프린트를
->
3. BP_ThirdPersonCharacter 블루프린트를
[ p.400 : 7행 ]
SideScrollerCharacter 블루프린트로 돌아가서
->
BP_ThirdPersonCharacter 블루프린트로 돌아가서
[ p.420 : 아래에서 3행 ]
SideScrollerCharacter 클래스를 기반으로
->
BP_ThirdPersonCharacter 클래스를 기반으로
[ p.421 : 그림 10.32 ]
SideScrollerCharacter
->
BP_ThirdPersonCharacter
[ p.637 : 3행 ]
#include "Components/AudioComponent.h"
#include "Engine/Classes/Particles/ParticleSystemComponent.h"
->
#include "Components/AudioComponent.h"
#include "Particles/ParticleSystemComponent.h"
[ p.689 : 1행 ]
앞서 생성했던 SuperSideScroller_GameMode 블루프린트를 선택한다.
->
앞서 생성했던 BP_SuperSideScroller_GameMode 블루프린트를 선택한다.