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

UE4 게임 개발 EscapeGame - 8 : 애니메이션 블루프린트와 재질기반사운드

1. 애니메이션 블루프린트 크게 Idle, Run, Jump 세가지로 애니메이션을 구성하였습니다. 상황에 따라 Jump는 필요가 없으므로 제거할수도 있습니다. 애니메이션 노티파이를 설정해준 모습입니다. 원하는 애니메이션 순간에 노티파이 이벤트를 발생시켜서, 여러가지 일을 할 수 있게하는 기능입니다. 앞에서 작업했던 카메라쉐이크, 그리고 지금 작업한 재질 기반 사운드가 그 예 입니다. 2. 재질 기반 사운드 FootStep 노티파이 이벤트가 발생했을 때, 플레이어의 위치와 플레이어로부터 Z좌표가 -150인 지점을 LineTrace 하여 HitResult를 검사합니다. 이 함수가 true이면 해당 Surface Type을 받아서 재질이 무엇인지 구분합니다. 그러고 나서, 해당 재질에 맞는 사운드를 재생시켜줍..

UE4 게임 개발 EscapeGame - 7 : 카메라쉐이크(CameraShake)

카메라쉐이크는 게임에 극적인 요소를 주기 좋은 장치입니다. 간단하게 구현 가능합니다. 코드를 보면, // CameraShakeObstacle.h #pragma once #include "GameInfo.h" #include "Camera/CameraShake.h" #include "CameraShakeObstacle.generated.h" /** * */ UCLASS() class ESCAPEGAME_API UCameraShakeObstacle : public UCameraShake { GENERATED_BODY() public: UCameraShakeObstacle(); }; // CameraShakeObstacle.cpp #include "CameraShakeObstacle.h" UCameraShak..

UE4 게임 개발 EscapeGame - 6 : 디스트럭터블 메시(Destructible Mesh)

바닥에 빠지는 함정을 만들기 위해 디스트럭터블 메시를 이용해봤습니다. 원하는 스태틱 메시를 우클릭하여 디스트럭터블 메시 생성을 합니다. 프랙처 세팅에 Cell Site Count와 Random Seed값을 조절하여 원하는 디스트럭터블 메시를 만들고, 꼭 디스트럭터블 세팅 탭의 Damage에 Enable Impact Damage를 true로 체크해줍니다. 프랙처 메시를 누르고, 폭발량을 조절해서 확인해보고 저장해줍니다. 월드에 배치하고 잘 동작하는지 확인해봅니다. 벽이나 일반 액터의 경우 플레이어가 닿았을 때, 제대로 적용되는걸 볼 수 있었습니다. 하지만 저는 바닥이 부숴져야하는데 바닥은 적용되지않았습니다. 이유를 생각해보니 힘의 방향때문인듯하여, TakeDamage 함수를 이용하기로 했습니다. 1. Ta..

UE4 게임 개발 EscapeGame - 5 : 트리거 클래스 구성

트리거 클래스를 두가지로 구성하면 훨씬 다양한 기능을 연출할 수 있습니다. 1. 트리거 클래스 // TriggerBoxRock.h #pragma once #include "GameInfo.h" #include "GameFramework/Actor.h" #include "ObstacleRock.h" #include "TriggerBoxRock.generated.h" UCLASS() class ESCAPEGAME_API ATriggerBoxRock : public AActor { GENERATED_BODY() public: // Sets default values for this actor's properties ATriggerBoxRock(); protected: UPROPERTY(VisibleAnywhe..

UE4 게임 개발 EscapeGame - 4 : 트리거 활용

트리거를 활용해서 여러가지 장애물들을 만들어봤습니다. 의외로 만드는 방법은 간단합니다. 액터에 박스컴포넌트를 입혀서 플레이어와 오버랩(겹침) 됐을 경우 함수를 호출하고, 그 함수에 소스코드를 작성하면 됩니다. 1. 문 문의 경우, 해당 액터의 Z축을 회전시켰습니다. 2. 돌 굴러오기 굴러오는 돌의 경우, 해당 액터의 Y축을 회전시키면서, 위치를 조정해서 굴러오는 느낌을 표현했습니다. 3. 낙석 떨어지는 돌의 경우, 돌을 스폰하는 액터를 공중에 두고, 물리를 적용시켜서 떨어지게했습니다. 다음에는 또 다른 트리거 활용과, 디스트럭터블 메시를 이용해서 바닥에 빠지는 함정을 만들어보겠습니다.

UE4 게임 개발 EscapeGame - 3 : TriggerBox와 BeginOverlap/EndOverlap

1. 콜리전 세팅 Object Channels에 Player와 Obstacle(장애물) 채널을 기본 블록으로 세팅하고, Preset에 Player와 Obstacle 서로 겹침 설정하였습니다. 장애물과 겹침처리하고 BeginOverlap 함수를 이용해 플레이어와 닿으면 게임오버 시킬 계획입니다. 2. 트리거박스 제작 게임에 핵심이 되는 코딩입니다. 장애물 이동, 문 열기, 다음 레벨로 이동 등 전부 트리거박스로 구현해야합니다. 액터를 상속받아서 클래스를 생성하고, 그 클래스를 상속받아서 블루프린트 클래스를 생성합니다. 멤버로 박스 컴포넌트를 선언하고, 비긴오버랩과 엔드오버랩 함수를 선언합니다. protected: UPROPERTY(Category = TriggerBox, VisibleAnywhere, Bl..

UE4 게임 개발 EscapeGame - 2 : 캐릭터 및 게임모드 기본 세팅

1. 기본 맵 만들기 Starter Content를 추가해서 Architecture에 있는 Floor, Wall, Door 등을 사용했습니다. 기본 맵을 활용해서 여러가지 스테이지를 제작할 예정입니다. 2. 1인칭 캐릭터 만들기 // MyPlayerCharacter.h protected: UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) UCameraComponent* Camera; UPROPERTY(Category = Character, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")..

UE4 게임 개발 EscapeGame - 1 : 컨텐츠 구상

언리얼 엔진 게임 개발을 공부하고 있고, 미로를 베이스로 여러 장애물을 극복하고 탈출하는 게임을 만들어보겠습니다. Unreal Engine 4.25.4 버전 사용. 구현해야할 것들 1. 미로맵/장애물 설계(가장 오래 걸리고 재미를 결정하는 핵심 컨텐츠이기 때문에 시간 많이 투자하고 생각할게 많을듯) -> 각 장애물 별 충돌/소리/애니메이션 등 2. 단순 미로가 아니라 열쇠 획득 -> 문 열기 or 체크 포인트 -> 포탈 등 다양한 요소 3. 재질 기반 사운드 4. 1인칭 or 3인칭 고민중인데 1인칭이 장애물 만났을 때, 더 극적인 상황 연출이 가능할것으로 판단됨. 5. 여러가지 장애물 5-1 땅 꺼지기 5-2 돌 굴러오기 5-3 지뢰밭 5-4 낙석 5-5 불 6. UI (Intro / Game Star..