본문 바로가기

게임 개발

(19)
[이득우의 언리얼 C++ 게임개발의 정석] #12. AI 컨트롤러와 비헤이비어 트리 비헤이비어 트리 모델을 사용해 컴퓨터 인공지능을 설계하고인공지능에 의해 스스로 정찰하고 플레이어를 쫓아와 공격하는 NPC 제작. AIController와 내비게이션 시스템언리얼 엔진에는 컴퓨터가 인공지능으로 NPC를 제어하도록 'AI 컨트롤러'를 제공한다.→ AIController를 상속받는 "ABAIController" 클래스 생성//ABCharacter.cpp#include "ABAIController.h"AABCharacter::AABCharacter(){ AIControllerClass = AABAIController::StaticClass(); //AIControllerClass의 클래스 속성을 ABAIController 의 클래스로 정한다. AutoPossesAI = EAutoPos..
[이득우의 언리얼 C++ 게임개발의 정석] #11. 게임 데이터와 UI 위젯 엑셀 데이터로부터 캐릭터의 능력치를 관리할 수 있도록테이블 데이터를 언리얼 엔진에 불러들이는 방법을 알아본다.게임 데이터를 효과적으로 관리하는 게임 인스턴스 클래스,방대한 로직을 분산시킬 수 있도록 액터 컴포넌트를 설계해 액터에 적용캐릭터의 현재 스탯을 HP바로 표시하는 기능 구현. 엑셀 데이터의 활용엑셀에 저장돼 있는 캐릭터의 스탯 데이터 테이블을 언리얼 엔진에 불러들여보자. 스탯 데이터는 변하지 않는 데이터이므로, 보통 게임 앱이 초기화될 때 불러들인다.→ 게임 앱을 관리하기 위해 '게임 인스턴스'라는 언리얼 오브젝트가 제공된다.→ "ABGameInstance" 게임 인스턴스 클래스를 생성하고, 맵&모드 탭에 있는 GameInstance를 바꿔준다.→ GameInstance의 Init 함수를 호출해 ..
[이득우의 언리얼 C++ 게임개발의 정석] #10. 아이템 상자와 무기 제작 언리얼 엔진의 '소켓 시스템'을 활용해 캐릭터 에셋에 액새서리를 부착하는 방법을 학습한다.물리 엔진 기능을 활용해 플레이어 캐릭터만 감지하는 아이템 상자를 제작하고상자를 먹으면 아이템을 생성한 후 캐릭터에 부착시키는 기능을 구현해 본다. . 캐릭터 소켓 설정캐릭터 오른손에 무기를 장착해 보자. 무기는 캐릭터에 트랜스폼으로 배치하는 것이 아니라 메시에 착용해야 한다.언리얼 엔진은 캐릭터에 무기, 액세서리를 부착하기 위한 용도로 '소켓'이라는 시스템을 제공한다.※예제에는 'hand_rSocket' 이름의 소켓이 오른쪽 손에 있다. 무기는 스켈레탈 메시이기 때문에 스켈레탈 메시 컴포넌트를 캐릭터 메시에 부착한다.//ABCharacter.hUPROPERTY(VisibleAnywhere, Category = We..
[이득우의 언리얼 C++ 게임개발의 정석] #9. 충돌 설정과 대미지 전달 게임 콘텐츠는 액터와 액터 간의 상호작용을 기반으로 한다.좋은 게임 콘텐츠는 시각적인 요소뿐 아니라 기획의 의도대로 액터들이 상호작용할 수 있도록물리 엔진을 제대로 설정하는 것이 중요하다.물리 엔진을 설정하는 방법을 살펴보고, 기획한 대로 물리 시스템이 동작하는지 파악해 보자. . 콜리전 설정 - (콜리전 = 물리적 충돌 영역)※ 액터의 움직임을 사실적으로 표현하는 데 물리 엔진이 활용된다.→ 물리 엔진을 활용하려면 콜리전부터 학습해야 한다. -콜리전 제작 방법스태틱메시 에셋 : 스태틱메시 에셋에 콜리전 영역을 심는 방법.기본도형 컴포넌트 : 구체, 박스, 캡슐 등의 도형을 사용해 충돌 영역을 지정하는 방법. 스태틱메시와 별도로 충돌 영역을 제작하는 데 사용한다. / 스켈레탈 메시를 움직일 때 주로 사용..
[이득우의 언리얼 C++ 게임개발의 정석] #8. 애니메이션 시스템 활용 애니메이션 몽타주, 노티파이라는 기능을 활용하여연속으로 공격 명령을 내리면 콤보 공격을 순서대로 연계하는,만약 입력이 늦으면 다시 처음부터 공격을 시작하는 콤보 시스템을 구현해 보자. 애니메이션 몽타주위에서 말한 콤보 시스템은 지난 장에서 배운 스테이트 머신을 사용해서 모든 공격에 대해 스테이트를 생성하면 구현할 수 있다. 하지만 이렇게 되면 너무 복잡해진다.스테이트 머신의 확장 없이 특정 상황에서 원하는 애니메이션을 발동시키는 '애니메이션 몽타주'라는 기능이 있다. ※애니메이션 몽타주 : 여러 애니메이션 클립들의 일부를 떼어내고 붙여서 새로운 애니메이션을 생성하는 기법 '애님 몽타주' 생성 후, WarriorAttack1, 2, 3, 4를 드래그로 등록하고 각 모션이 끝나는 시각을 파악하여 '끝 시간'..
[이득우의 언리얼 C++ 게임개발의 정석] #7. 애니메이션 시스템의 설계 애니메이션 블루프린트의 기반을 이루는 '애님 인스턴스'클래스를 C++로 제작하고애님 인스턴스 클래스의 데이터를 기반으로 캐릭터가 애니메이션을 체계적으로 재생할 수 있도록스테이트 머신에 기반한 애니메이션 시스템 제작 방법. 애니메이션 블루프린트 = '애님 그래프' + '애님 인스턴스'애님 인스턴스 : 스켈레탈 메시를 소유하는 폰의 정보를 받아 애님 그래프가 참조할 데이터 제공.애님 그래프 : 애님 인스턴스의 변수 값에 따라 변화하는 애니메이션 시스템 설계하는 공간.※ C++로 애님 인스턴스를 제작 → 폰의 현재 속력을 애님 인스턴스에 저장 → 이 값에 따라 '애님 그래프'에서는 IDLE 혹은 RUN 애니메이션 재생하도록 해보자AnimInstance를 부모로 하는 ABAnimInstance라는 c++ 클래스..
[이득우의 언리얼 C++ 게임개발의 정석] #6. 캐릭터의 제작과 컨트롤 인간형 캐릭터를 효과적으로 제작하기 위해 언리얼 엔진이 제공하는 캐릭터 모델을 학습하고,이를 기반으로 움직이는 캐릭터를 제작한다.카메라를 자유자재로 설정하기 위해 컨트롤 회전에 대한 개념을 익힌다.. 캐릭터 모델캐릭터 에셋을 사용해 인간형 '폰'을 만들 수도 있지만, '캐릭터' 모델을 사용해서 만들 수도 있다. 'ABCharacter" 클래스 생성→ACharacter라는 클래스 상속받고 있음→ACharacter는 APawn 클래스를 상속받고 있음→둘 다 동일하게 Capsule 컴포넌트, SkeletalMesh 컴포넌트, CharacterMovement 컴포넌트를 사용함 ACharacter 클래스는 GetCapsuleComponent, GetMesh, GetCharacterMovement 함수를 제공한다...
[이득우의 언리얼 C++ 게임개발의 정석] #5. 폰의 제작과 조작 폰을 조작하기 위해 프로젝트의 입력을 설정하고,입력 값을 폰의 움직임으로 변환하는 폰 무브먼트 컴포넌트를 사용한다.애니메이션 블루프린트를 사용해 애니메이션을 불어넣는 법을 학습한다.. 폰의 구성 요소폰은 여러 가지 형태가 될 수 있지만, 여기서는 인간형 폰을 제작한다. ※인간형 폰을 제작하기 위해 고려할 요소들시각적 요소 : 스켈레탈 메시충돌 요소 : 캡슐 컴포넌트움직임 요소 : 폰 무브먼트 컴포넌트내비게이션 : 스스로 길 찾기 기능카메라 출력 : 폰을 화면에 전송마켓플레이스에서 임포트한 에셋을 추가하고 C++ 코드를 사용해 폰을 제작한다. 위의 요소를 바탕으로 5개의 컴포넌트를 사용한다.SkeletalMesh (시각적 요소) Capsule (충돌 요소) - 움직임을 담당할 예정이므로 루트 컴포넌트로 설..