게임 개발 (언리얼 엔진) 28

UE4 게임 개발 EscapeGame - 18 : 각종 수정 사항

만들다가 처음 생각과 다르게 문제가 생겨서 수정했던 내용들 정리해봤습니다. 1. 좀비 이동 관련 UAIBlueprintHelperLibrary::SimpleMoveToLocation(pController, vTargetLoc); -> 이동하다가 다른 태스크 걸리면 빠져나옴 -> 타겟무브에 활용 pController->MoveToActor(pTarget, -1.f, false, true); -> 타겟까지 무조건 이동 -> 패트롤에 활용 위에서 패트롤에 활용한 무브함수는 방향이 무조건 타겟을 바라보게 되어있어서 굉장히 어색합니다. 따라서 자연스럽게 이동하려면 타겟무브와 동일한 함수 사용. 2. 좀비 피직스 관련 좀비 장애물과의 피직스 off -> 돌이 튕겨나가는 현상 있었음 3. Rotation 관련 Tri..

UE4 게임 개발 EscapeGame - 17 : 인벤토리

1. 아이템 구상 (No Pain Potion, Invisibility Cloak, Penetrate Stone) No Pain Potion - 장애물에 닿아도 죽지않음. Invisibility Cloak - Zombie Detect에 걸리지않음. Penetrate Stone - 벽 가까이에 가면 벽 너머를 볼 수 있음. 2. UI 생성 ListView를 이용하여 인벤토리 제작. 세가지 구성. 1. 각 아이템에 대한 정보를 담고있는 클래스 2. 각 아이템의 정보를 받아와서 한 칸을 차지하는 UI 3. 한칸한칸으로 구성된 전체 인벤토리 UI InventoryItem 블루프린트에서 User Object List Entry 설정을 해줘야합니다. 그래야 Inventory 위젯 블루프린트에서 InventoryIt..

UE4 게임 개발 EscapeGame - 16 : 게임다워지는 과정

세세한 작업들이 게임다워지는데 큰 기여를 합니다. 1. 사운드 앞서 8번에 정리해뒀던 재질기반사운드 장애물들 소리, 죽는 소리, bgm, 클릭 소리, 버튼 소리 등등 2. UI 2-1 마우스 플레이어컨트롤러에서 마우스 애셋을 지정해주고 사용합니다. UI로 사용할거면 Compression Settings를 UserInterface2D(RGBA)로 바꿔줘야합니다. 2-2 메뉴 처음에는 블루프린트로 작업해놓고 cpp로 바꿨습니다. cpp가 훨씬 가독성이 좋기도하고, 확장성이 좋아서 할 수 있는게 많아서 웬만하면 블루프린트 사용은 하지 않았습니다. 2-3 메인HUD 2-4 스타트레벨 게임 제목, Manual 2-5 확인 메세지 전부 cpp에서 작업해줬습니다.

UE4 게임 개발 EscapeGame - 15 : 미로 맵 제작

크게 Level1과 Level2로 제작했습니다. 이 기본 베이스 맵을 기반으로, Level1-1부터 Level2-3까지 총 6가지를 클리어하면 게임을 승리하게됩니다. 생각보다 게임 메인 컨텐츠인 장애물, 좀비 배치 그리고 설계가 상당히 시간이 걸렸습니다. 게임 기획은 아무나 하는게 아니라고 느꼈습니다. 프로그래밍 알고리즘이 떠오르지않으면 디버깅을 해보거나, 쉬고오면 해결이 되었지만 게임 기획 단계는 그렇지않았습니다. 앞으로 남은 작업들도 잘 마무리해보겠습니다. mazegenerator.net/ Maze Generator Create, download and print random mazes in varying styles and sizes. mazegenerator.net 위와 같은 미로를 만들어주는 사..

UE4 게임 개발 EscapeGame - 14 : 각종 효과음

소리를 넣어주니 훨씬 그럴듯해졌습니다. 1. 돌 떨어지는 소리, 굴러오는 소리, 땅이 꺼지는 소리 2. 좀비 -> 거리에 따라서 감쇄 효과 USoundWave를 활용하는 방법과, USoundCue와 AudioComponent를 활용하는 방법으로 나눠서 작업했습니다. 1. USoundWave 한번 재생해줘야하는 상황에서 활용했습니다. // ObstacleFloor.cpp // Sets default values AObstacleFloor::AObstacleFloor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bC..

UE4 게임 개발 EscapeGame - 13 : BGM(Back Ground Music)

배경음악을 삽입해서 더욱 게임답게 만드는 과정을 진행했습니다. // MainGameMode.h class UAudioComponent* AudioComponent; class USoundCue* MainMusicCue; // MainGameMode.cpp // 생성자 static ConstructorHelpers::FObjectFinder MainMusicAsset(TEXT("SoundCue'/Game/GameContent/Sound/bgm/BackGroundMusic.BackGroundMusic'")); if (MainMusicAsset.Succeeded()) { MainMusicCue = MainMusicAsset.Object; } AudioComponent = CreateDefaultSubobjec..

UE4 게임 개발 EscapeGame - 12 : 좀비 AI (비헤이비어트리, 블랙보드)

인공지능을 무엇을 넣으면 좋을까 고민하다가 좀비를 넣어봤습니다. 비헤이비어트리는 아래와같이 구성하였습니다. 블랙보드 키값으로 Target을 가지게했고, 플레이어를 Detect하면 SetTarget으로 플레이어를 Target으로 지정하여 TargetMove 노드를 실행합니다. Target이 없으면, Patrol, Wait 노드를 순차적으로 실행하게됩니다. cpp 프로젝트를 많이 생성해야하는데, Zombie, ZombieAIController, DetectService, PatrolTask, TargetMoveTask를 생성해줍니다. AI를 사용하기 위해, 빌드쪽 모듈에 "AIModule", "GameplayTasks", "NavigationSystem"를 추가해줍니다. AI컨트롤러에 아래와같이 헤더파일도 ..

UE4 게임 개발 EscapeGame - 11 : 좀비 애셋 추가

mixamo.com 에서 무료 에셋 다운로드 할 수 있습니다. 애니메이션을 다운로드할 때, Without Skin을 선택하면 불필요한 중복(머티리얼, 본 등) 다운로드를 막을 수 있습니다. .fbx 파일을 다운로드 받고, 프로젝트에 임포트해서 사용하면 됩니다. 저는 Idle, Patrol, Walk 3가지 애니메이션에 맞는 동작을 찾아서 다운로드했습니다. 플레이어와 마찬가지로, 생성자에서 ConstructorHelpers 함수를 활용해서 애셋 지정해서 사용하면됩니다. // Zombie.cpp #include "Zombie.h" AZombie::AZombie() { // Set this character to call Tick() every frame. You can turn this off to impr..

UE4 게임 개발 EscapeGame - 10 : 카메라 페이드

카메라 페이드라는 기능을 사용해봤습니다. 이런 사소한 부분들이 게임다워지는데 도움을 많이 주는것같습니다. // PlayerCameraManager.cpp void APlayerCameraManager::StartCameraFade(float FromAlpha, float ToAlpha, float InFadeTime, FLinearColor InFadeColor, bool bInFadeAudio, bool bInHoldWhenFinished) { bEnableFading = true; FadeColor = InFadeColor; FadeAlpha = FVector2D(FromAlpha, ToAlpha); FadeTime = InFadeTime; FadeTimeRemaining = InFadeTime; b..

UE4 게임 개발 EscapeGame - 9 : UI(User Interface)

UI는 총 크게 2가지로 구성하였습니다. 추후에 필요에 따라 더 제작할수도 있습니다. 1. 시작 화면 테스트용 배경 사진이며, 맵이 완성되면 맵을 캡쳐해서 시작 화면에 활용할 계획입니다. Play와 Exit 두가지 버튼으로 간단하게 제작하였습니다. // WidgetStartLevel.cpp #include "WidgetStartLevel.h" #include "Components/Button.h" #include "EscapeGameInstance.h" void UWidgetStartLevel::NativeConstruct() { Super::NativeConstruct(); ButtonPlay = Cast(GetWidgetFromName(TEXT("ButtonPlay"))); ButtonExit = C..