이 책을 고른 이유 언리얼 엔진 관련하여 C++로 개발관련된 책은 얼마 없었다. 그 중에서도 이 책은 책제목에 정석 이라는 단어를 썼다는 점에서 높은 신뢰감을 얻을 수 있었고, 바로 구매하여 책을 따라하기 시작하였다. 느낀 점 챕터 1부터 간단한 게임을 차례대로 만들어보며 구현해 나가는 점에서 성취감과 보람을 느낄 수 있었고, 에디터의 설정이라든지 결과 화면등을 스크린샷으로 보여주고 있어 따라하는데 큰 문제가 없었다. 게임모드, 게임 캐릭터, 모델링, 애니메이션, 월드, 레벨이동, UI 처리 등 게임에서 다뤄야할 필수적인 부분들을 차례대로 설명해주고 있어, 전반적인 기능을 훑어보게되어 좋았다.기술 서적들을 읽으면서 필요한 부분만 읽고 마는 경우가 있었는데, 이 책은 처음부터 끝까지 진행해야만 끝낼 수 있..
💻 Code : https://github.com/tedison7/ArenaBattle 게임 데이터의 저장과 로딩 플레이어의 데이터를 저장하고 불러오는 로직을 구현해보자. 언리얼 엔진은 게임의 데이터를 저장하고 불러들이는 기능을 제공한다. SaveGame이라는 언리얼 오브젝트를 상속받은 클래스를 설계해보자. ABSaveGame 클래스를 생성하였다. 이후 SaveGame을 PlayerState 등에 연결하여 UI에 플레이어 데이터가 나타나도록 예제를따라 코드를 작성하였다. 그리고 플레이어 데이터가 초기화되어 적용된 화면을 확인할 수 있다. 이어서 플레이어 관련 데이터가 변경될 때마다 저장하도록 해보자 그리고 PlayerState의 HighScore 값을 HUD UI에 연동하자 빌드후 플레이를 눌러서 NPC..
💻 Code : https://github.com/tedison7/ArenaBattle 캐릭터의 스테이트 설정 플레이어 캐릭터와 AI 캐릭터의 기능을 체계적으로 관리하기 위해 캐릭터에도 스테이트 머신 모델을 구현해 보자 PREINIT 스테이트 : 캐릭터 생성 전의 스테이트, 캐릭터와 UI를 숨겨둔다 LOADING 스테이트 : 선택한 캐릭터 애셋을 로딩하는 스테이트, AI인지 플레이어인지 구분 가능, 로딩이 완료될때 까지 조종을 비활성화 READY 스테이트 : 캐릭터 애셋 로딩이 완료된 스테이트, 숨겨둔 캐릭터와 UI를 보여주며, 이때부터는 대미지 처리가 가능하며 캐릭터를 조종할수 있다. DEAD 스테이트 : 캐릭터가 HP를 소진하여 사망하는 스테이트, 죽는 애니메이션을 재생하고 UI를 끄는 한편 충돌을 ..
💻 Code : https://github.com/tedison7/ArenaBattle 프로젝트의 정리와 모듈의 추가 언리얼 소스코드는 오브젝트에 관련된 헤더들은 Classes 폴더를 사용하고, 외부에 공개하는 선언 파일은 Public 폴더에서, 외부에 공개하지 않는 파일은 Private 폴더에서 보관하고 있다. 이와같이 폴더 구조를 변경해보자. Source/ArenaBattle 폴더안에 Public, Private 폴더를 생성한다. 그리고 헤더파일(.h)은 Public으로, cpp파일은 Private 폴더오 옮겨 놓는다. 그리고 uproject 파일을 우클릭하여 Generate Visual Studio project files를 선택하여 프로젝트가 재생성될 수 있도록 하자. 컴파일을 하고 에디터를 실행..
💻 Code : https://github.com/tedison7/ArenaBattle AIController와 내비게이션 시스템 플레이어가 조종하지 않는 캐릭터를 NPC(Non Player Character)라고 한다. 드래그하여 배치한 ABCharacter 액터에 인공지능을 추가해 플레이어를 공격할 수 있도록 해보자. AIController를 상속받는 ABAIController 클래스를 생성하였다. 그리고 ABCharacter가 ABAIController를 사용하도록 설정한다. 왜인지 모르겠지만 현재 레벨을 step3 이름의 다른 레벨로 저장하였고, NavMeshBoundsVolume 을 배치하였다. 배치후 뷰포트에서 P 키를 눌러보면 녹색의 네비메시 영역을 확인할 수 있다. 네비메시를 생성한 이유는..
💻 Code : https://github.com/tedison7/ArenaBattle 엑셀 데이터의 활용 엑셀에 저장돼 있는 캐릭터 스탯 데이터 테이블을 언리얼 엔진에 불러들이는 기능을 구현해보자. 언리얼 엔진은 게입을 관리하기 위한 용도로 게임 인스턴스라는 언리얼 오브젝트를 제공한다. 이 게임 인스턴스가 게임의 데이터를 관리하도록 작업하고자 한다. GameInstance 클래스를 상속받는 ABGameInstance클래스를 생성하고. 생성한 ABGameInstance클래스가 게임을 관리하도록 지정하기 위해 프로젝트 세팅의 맵&모드 탭에서 GameInstance 항목을 ABGameInstance로 지정하였다. 그리고 ABGameInstance의 Init함수를 구현하여 로그를 찍어보자 컴파일후 시작시 로그..
💻 Code : https://github.com/tedison7/ArenaBattle 캐릭터 소켓 설정 캐릭터 무기 추가를 위해 마켓 플레이스에서 InfinityBlade: Weapons 를 프로젝트에 추가하자. 무기는 캐릭터에 트랜스폼으로 배치하는 것이 아니라 메시에 착용해야 캐릭터 애니메이션에 따라 무기가 같이 움직인다. 언리얼 엔진은 아이템을 캐릭터에 부착하기 위해 소켓 시스템을 제공한다. hand_rSocket 소켓에 검을 부착해보자. 그리고 위치값을 조정해서 자연스럽게 보이도록 하자. 코드를 통해무기 스켈레탈 메시 컴포넌트를 캐릭터 메시에 부착해보자. 컴파일후 플레이를 해보면 캐릭터손에 무기가 쥐어진 것을 확인할 수 있다. 무기 액터의 제작 필요에 따라 무기를 바꿀수 있게 하려면 무기를 액터로..
💻 Code : https://github.com/tedison7/ArenaBattle 콜리전 설정 언리얼 엔진의 물리 엔진을 활용하려면 콜리전(Collision)이라는 충돌 영역에 대해서 학습해야한다. 크게 세가지 방법으로 제작할 수 있다. 스태틱메시 애셋 : 스태틱메시 애셋에 콜리전 영역을 심는 방법 기본 도형 컴포넌트 : 구체, 박스, 캡슐의 기본 도형을 사용해 충돌 영역을 지정하는 방법 피직스 애셋 : 캐릭터의 각 부위에 충돌영역을 설정하는 방법, 래그돌 효과를 구현할 때 사용 물리 설정은 크게 세 가지로 구분된다. 콜리전 채널과 기본 반응 콜리전 채널의 용도 다른 콜리전 채널과의 반응 충돌체는 반드시 하나의 콜리전 채널을 설정해야한다. 엔진에서는 기본적으로 8개의 콜리전 채널을 제공한다. Wor..
💻 Code : https://github.com/tedison7/ArenaBattle 애니메이션 몽타주 주어진 4개의 공격 애니메이션을 가지고 애니메이션 몽타주를 활용하여 콤보 공격을 구현해보자. 캐릭터 애니메이션 창을 열고 애님 몽타주 생성 메뉴를 눌러 몽타주 애셋을 생성한다. 몽타주는 섹션(Section) 단위로 애니메이션을 관리한다. 몽타주 애셋을 생성하면 기본으로 Default 이름의 섹션이 주어진다. 섹션을 선택하고 디테일 창에서 섹션 이름을 Attack1로 변경하였다. Attack1 ~ Attack4 까지 애니메이션을 섹션에 드래그로 등록하고 각 애니메이션들의 끝시간 항목을 수정하여 연속 공격 모션처럼 보이도록 하였다. 그리고 입력 설정창으로 가서 Action Mappings에 Attack ..
💻 Code : https://github.com/tedison7/ArenaBattle 애니메이션 블루프린트 언리얼 엔진에서는 애니메이션 시스템 제작 도구인 애니메이션 블루프린트를 제공한다. 애님 인스턴스(Anim Instance) : 스켈레탈 메시를 소유하는 폰의 정보를 받아 애님 그래프가 참조할 데이터를 제공 (BP, C++) 애님 그래프 (Anim Graph) : 애님 인스턴스의 변수 값에 따라 변화하는 애니메이션 시스템을 설계하는 공간 (BP) C++로 애님 인스턴스를 제작하여 속력 값을 저장하고 애님 그래프에서는 이 값을 가지고 IDLE, RUN 애니메이션을 재생하도록 해보자 이후 이전에 생성해놓은 WarriorAnimBlueprint 애셋에서 부모 클래스를 ABAnimInstance로 변경하고..
💻 Code : https://github.com/tedison7/ArenaBattle 캐릭터 모델 Character 클래스를 부모로하는 ABCharacter 클래스를 생성한다. ACharacter 는 APawn 클래스를 상속 받고 있다. 앞서 실습한 ABPawn과 동일하게 Capsule 컴포넌트, SkeletalMesh 컴포넌트를 사용하고 있으며, CharacterMovement 라는 컴포넌트를 사용하여 움직임을 관리한다. 게임 모드에 기본 폰으로 설정하자 캐릭터 모델은 캐릭터 무브먼트(CharacterMovement) 컴포넌트를 사용하는데 이는 FloatingPawnMovement에 비해 다음과 같은 장점을 가진다. 점프와 같은 중력을 반영한 움직임을 제공 다양한 움직임 설정. 걷기, 기어가기, 날기..
💻 Code : https://github.com/tedison7/ArenaBattle 폰의 구성요소 기본적인 인간형 폰을 제작하기 위해 고려할 요소는 다음과 같다. 시각적 요소 : 애니메이션 기능을 가지고 있는 스켈레탈 메시 컴포넌트. 애니메이션을 재생하도록 리깅(Rigging)데이터를 추가한 메시를 스켈레탈 메시라고 하며 이를 관리하는 컴포넌트가 스켈레탈 메시 컴포넌트다. 충돌 요소 : 인간형의 경우 일반적으로 캡슐 컴포넌트를 사용한다. 움직임 요소 : 폰 무브 컴포넌트를 사용한다. FloatingPawnMovement와 CharacterMovement 두가지가 있다. 내비게이션(Navigation) : 폰은 엔진의 내비게이션 시스템과 연동되어 스스로 목적지까지 이동하는 길찾기 기능을 가지고 있다. ..