분류 전체보기 84

첫 게임 개발 (34) _ 향상된 레벨이동

예전에 게이트 블프를 만들어서 오버랩시 Open Level 함수로 다른 맵으로 이동을 구현했었다. 하지만 그 레벨에서 플레이어 스타터 위치로만 이동했었다. 여러 맵을 이동해야하기 때문에 한 맵에서도 여러 스폰 장소가 필요하다. 이러한 레벨 이동을 간단히 구현해볼 것이다. 게임 인스턴스에서 TeleportationTag를 변수로 만들었다. 게이트 블프에서 마찬가지로 LevelName과 TeleportationTag 변수 2개를 추가하고 인스턴스 편집이 가능하게 하였다. 오버랩시 게임 인스턴스의 TeleportationTag에 게이트의 TeleportationTag를 넣는다. 이후 카메라 Fade 이후 LevelName에 맞는 Open Level을 실행한다.게임모드에서 ChoosePlayerStart 함수를..

첫 게임 개발 (33) _ 체크포인트와 리스폰 구현

기존에 만들었던 체크포인트를 세이브 포인트로 바꾸고 새롭게 체크포인트를 만들것이다. 체크포인트는 세이브 포인트와 다르게 특정 부분을 지나가면 활성화되며 떨어지는 함정에서 떨어졌을때 대미지를 입고 가장 마지막에 닿았던 체크포인트에서 나타나게 된다.체크포인트 블프를 만들고 박스콜리전을 추가한다. 플레이어 블프에서 기존의 체크포인트를 세이브 포인트로 바꾸고 새롭게 LastCheckPoint 변수를 추가한다. 이는 가장 최근에 닿은 체크포인트를 저장하기 위함이다. 체크포인트 박스 콜리전 오버랩시 플레이어 블프의 LastCheckPoint변수에 자신을 저장한다. 다음으로 바닥에 떨어지는 함정에 콜리전을 만들것이다. FallDetector 블프를 만들고 체크포인트와 같이 박스 콜리전을 추가한다. 플레이어와 오버랩시..

첫 게임 개발 (32) _ 아이템 사용시 물체와 상호작용

인벤토리에 있는 아이템을 사용하여 물체와 상호작용하는 것을 구현해볼 것이다.간단히 에셋을 구해서 Door와 DoorFrame을 Static Mesh로 두었다.커스텀 이벤트를 만들어서 Door가 시간에 따라 돌아가도록 하였다. 문이 열리고 난 후를 구분하기 위해서 Is Door Opened? Bool 변수를 추가하였다. 타임라인은 위와 같이 1초로 지정하였다. 플레이어 이벤트 틱에 위와 같이 추가하였다. WoodenKey 변수를 따로 만들어서 이 변수가 BPC Inventory에 있고 Is Door Opended가 False일 경우 상호작용 위젯이 보이도록 설정하였다. 즉 인벤토리에 WoodenKey가 없으면 가까이 갔을 때 상호작용 위젯이 뜨지 않고 WoodenKey가 있어야 위젯이 표시된다.플레이어의 ..

첫 게임 개발 (31) _ 인벤토리 구현

언리얼에서 지원하는 카오스 Destruction에 대해 며칠 공부하다가 개발하는 게임에는 맞지 않는 것 같아서 쓰지 않기로 하였다. 아이템을 습득하고 얻은 아이템을 보여주는 인벤토리를 구현해 볼 것이다.열거형을 만들고 위와같이 3가지 아이템 타입의 이름을 정한다.구조체 S_Slot을 만들고 3가지 변수를 만든다.구조체 S_Item을 만들고 위와 같이 변수를 추가하였다.구조체 S_AllItem을 만들고 위와 같이 변수를 추가하였다. S_Slot 배열형식으로 저장하여 S_AllItem은 플레이어가 가지는 아이템 목록이 될 것이다. 좀 복잡한데 정리하면 S_AllItem가 제일 상위로서 플레이어가 소지한 전체 인벤토리 아이템이다. S_AllItem은 각각 S_Slot 배열형식으로 변수를 가지게 되므로 Obje..

첫 게임 개발 (30) _ 숨겨진 장소 만들기

플랫포머 게임에 자주 나오는 숨겨진 장소를 간단히 구현해볼 것이다. 이를 위해 먼저 캐릭터가 들어가면 투명하게 보이는 머티리얼을 구현해야한다. 콜리전에서 Wall 커스텀 콜리전을 추가한다. 다음으로 이 Wall 콜리전을 감지하는 Trace함수를 만든다. 카메라와 캐릭서 사이의 Sphere Trace로 Wall을 감지하면 TraceWall 변수에 넣고 머티리얼의 값을 조정하는 함수이다. 머티리얼은 위와 같이 Mask와 TransStrength를 파라미터로 조절할 수 있도록 하였다. 인스턴스 머티리얼을 만들고 값을 조절한다. 값에 따라 캐릭터 주변의 투명해지는 정도를 조절할 수 있다. 숨길 장소크기만큼의 박스를 두고 머티리얼을 입힌다. 배경을 검은색으로 하였고 숨겨진 장소에 들어갔을 때 장소를 인지할 수 있..

첫 게임 개발 (29) _ 대화 시스템 추가 및 간단한 컷씬 구현

저번에 만든 향상된 대화시스템에서 텍스트가 앞에서부터 출력되는것이 아니라 통째로 바뀌어 좀 밋밋했었다. 먼저 만들었던 간단한 대화 시스템에서는 텍스트가 앞에서부터 글쓰듯이 출력이 되도록 만들었는데 이것을 새롭게 만든 시스템에 적용해볼 것이다. 먼저 대화 위젯에서 TextDelay 변수를 플로트형식으로 추가하고 위와 같이 노드를 추가하였다. 추가한 노드는 전에 만들었던 간단한 대화구현에서와 동일하여 어렵지 않게 추가하였다. Add Dialogue 함수에도 마찬가지로 TextDelay 변수를 추가한다. TextDelay로 각각의 텍스트가 출려되는 속도를 조절할 수 있다. 테스트를 위해 'Z...Z...Z...'의 출력 속도만 위와 같이 느리게 설정하였다.  잘 적용이 된 것을 볼 수 있다. 다음으로는 간단히..

첫 게임 개발 (28) _ 대화 선택지 구현

저번에 대화를 간단히만 구현해보았는데 이번에는 대화에서 직접 선택지를 고를 수 있는 좀 더 향상된 대화 시스템을 구현해보고자 한다.  열거형 블프를 만들어서 위와 같이 2가지의 상태를 입력으로 추가한다. 대화 위젯을 위와 같이 만들었다. 대화 선택지를 고르는 Option 위젯을 만들었다. BPI를 만들고 Interact, ConversationClosed, SetInteractableState 함수를 추가한다. 다음으로 액터 컴포넌트를 만들고 함수를 9개를 추가한다. 이는 대화를 하는 NPC에 들어가는 액터 컴포넌트의 베이스이다. Open Conversation은 대화 위젯을 띄운다.  Close Conversation은 대화 위젯을 지우고 BPI에 신호를 보낸다. 이 신호는 대화가 끝나고 위젯 제거 후..

첫 게임 개발 (27) _ 세이브 로드 시스템 구현하기 2

캐릭터의 속성을 저장하는 방법에 대해서 학습하였고 이번에는 각 슬롯별로 저장 및 로드는 구현해볼 것이다. 구현하고 싶은 세이브 로드 시스템을 정리하면 다음과 같다. 저장 슬롯은 1,2,3,4,5로 총 5개이며 메인메뉴에서 뉴 게임 또는 로드 게임을 선택 할 수 있다. 로드 게임을 선택하고 각 슬롯을 눌렀을 때 저장된 값이 있다면 그 값을 로드한다. 저장된 값이 없다면 아무일도 일어나지 않는다. 뉴 게임을 선택하고 슬롯을 선택할 때 저장된 값이 있다면 새 창을 띄워서 기존파일에 덮어 씌우겠냐고 물어보고 Yes를 누르면 그 슬롯에서 새 게임을 시작하고 No를 누르면 다시 슬롯 선택창으로 돌아온다. 저장된 값이 없다면 바로 새 게임을 시작한다. 하루면 구현가능할 것으로 잡았지만 중간에 다 다시 작업을 뒤엎으면..

첫 게임 개발 (26) _ 세이브 로드 시스템 구현하기 1

세이브 로드 시스템을 구현해 볼 것이다. 여러 강의들과 자료들을 찾아보았지만 능력 구현 저장에 대한 내용은 없어서 구현하기 꽤 애를 먹었다. 제작하려는 게임에서 여러 능력들을 사용하므로 능력 구현 저장이 필수로 들어가기 때문에 여러 시행착오를 거쳤다. 먼저 저장하려는 값들을 구조체 블프의 형태로 저장한다. 체력과 에너지는 Float 형식, 능력은 전에 만들었던 E Abilities 열거형식, 위치는 트랜스폼의 형태로 저장한다. 블프 형식에서 언리얼에서 제공하는 Save 형식의 블프를 만들고 변수로 PlayerSave를 만들어 형식을 위에서 만든 구조체 형식으로 넣는다. BPI를 만들고 위와 같이 4개의 함수를 추가한다. 단순히 ESC를 누르고 게임을 저장하는 방식이 아니라 특정 위치에서 물체와 상호작용시..

첫 게임 개발 (25) _ 메인 메뉴 만들기

메인메뉴에 세이브와 로드 시스템까지 엮여있어 한번에 하려 했으나 세이브 로드 시스템이 생각보다 복잡하고 적용해야하는 것들이 많아서 따로 분리하였다.먼저 메인메뉴와 게임내에서 일시정지창을 구현할 것이다. 간단히 메인메뉴 창을 디자인하였다. 로드게임은 아직 구현하지 않았고 나머지는 위와같이 구성하였다. 뉴게임 버튼은 Open Level로 캐릭터 컨트롤러를 받아서 실행하도록 하였다. Quit 버튼은 Quit Game 함수로 간단히 구현할 수 있다. Settings 버튼은 누르면 화면에서 위젯을 제거 후 Settings 위젯을 Add to Viewport하도록 하였다. 다음은 게임내에서의 일시정지 위젯이다. ESC를 누르면 동작하도록 할당하였다. Resume 버튼은 누르면 다시 게임으로 돌아가야 하므로 게임 P..