[언리얼엔진] 01. 간단한 기획 정리
·
언리얼 엔진/[개인프로젝트] FPS 구현 맛보기
기획주제 : 멀티 웨이브 멀티 웨이브가 메인 시스템인 게임이 뭐가 있을까요 ? 뱀서라이크, 디펜스 등등이 있을 것 같네요. 저는 이전부터 , 처럼 슈팅 게임을 만들어보고 싶긴 했는데요 ! 이 두 게임은 멀티 웨이브가 메인 시스템인 게임은 아닙니다. 두 게임의 메인 시스템적인 기획보다는 일반 몬스터를 처리하다가 후반부에 등장하는 보스 몬스터를 제거하는 시스템을 가져오고자 해요. TPS를 구현하기에는 메인 캐릭터 모델링이 따로 필요하기 때문에 FPS로 하는 게 리소스 측면에서 효율적이겠죠 ?서든어택 느낌으로 플레이어의 시점은 1인칭이지만, First Descendent, Once Huma처럼 PVE가 가능하도록 설계를 해야겠어요. 게임의 메인 컨셉은 정해진 것 같고, 이제 리소스를 해결해볼까요 ?앞서 언급했..
[언리얼엔진] 4-4. 파티클과 사운드 구현
·
언리얼 엔진/스파르타코딩클럽
파티클/.hUPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item|Effects")UParticleSystem* PickupParticle;/.cppUParticleSystemComponent* Particle = nullptr; if (PickupParticle){ Particle = UGameplayStatics::SpawnEmitterAtLocation( GetWorld(), PickupParticle, GetActorLocation(), GetActorRotation(), true // 파티클 수명이 끝나면 Destroy 처리 );}// 2초 후 파티클 제거if ..
[언리얼엔진] 4-3. UI 애니메이션 효과 구현
·
언리얼 엔진/스파르타코딩클럽
UI 애니메이션애니메이션 추가 + Animation 버튼을 선택하면 애니메이션 클립이 추가된다. 이후 해당 애니메이션 클립을 선택하면 UI 중 어떤 컴포넌트에 애니메이션을 적용할지 선택할 수 있다.애니메이션 함수 생성 C++를 통해 애니메이션 재생을 위해 그래프에서 애니메이션 재생 기능이 포함된 함수를 구현한다.C++로 애니메이션 호출UFunction* PlayAnimFunc = MainMenuWidgetInstance->FindFunction(TEXT("PlayGameOverAnim"));if (PlayAnimFunc){ MainMenuWidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);} 블루프린트에서 구현한 함수의 이름을 통해 해당 기능을 불러올 수 있다. ..
[언리얼엔진] Mobility 속성
·
언리얼 엔진/컴포넌트
Mobility: 해당 액터가 플레이 중에 위치, 회전, 크기의 변동이 있는지 체크하는 항목Static게임플레이 동안 어떤 방식으로도 이동 또는 업데이트되지 않는 액터를 위한 설정이다. 머티리얼은 여전히 애니메이팅될 수 있다. "Static"으로 설정된 스태틱 메시의 그림자는 라이트매스에 의해 생성되며 라이트 맵에 반영이 된다. "Static Light"는 라이트매스를 사용하여 라이트 맵에 기여한다. "Movable" 액터의 경우에는 Volumetric Lightmap 혹은 간접광 캐시와 같은 간접광 메서드를 사용하여 빛을 비춘다. 게임 도중 빛의 밝기나 색상을 변경할 수 없다.Stationary게임플레이 동안 변경은 되지만 이동되지는 않는 액터를 위한 설정이다. "Stationary"로 설정된 스태틱 ..
[언리얼엔진] 4-2. 메인 메뉴 구현
·
언리얼 엔진/스파르타코딩클럽
UI 추가, 삭제게임 스코어를 표시하는 UI가 아니라, 게임 재시작을 표시하는 UI를 띄우고자 할 때에는 게임 스코어 UI를 화면에서 안 보이게 한 후, 게임 재시작 UI를 화면에 표시해야 한다.void ASpartaPlayerController::ShowMainMenu(bool bIsRestart){ if (HUDWidgetInstance) { HUDWidgetInstance->RemoveFromParent(); HUDWidgetInstance = nullptr; } if (MainMenuWidgetInstance) { MainMenuWidgetInstance->RemoveFromParent(); MainMenuWidgetInstance = nullptr; } if (MainMenuWidgetC..
[언리얼엔진] 4-1. UI 위젯 설계와 실시간 데이터 연동
·
언리얼 엔진/스파르타코딩클럽
HUD (Heads-Up Display)게임 상황을 이해하는데 도움이 되는 정보를 화면 상에 띄우는 기능을 제공 언리얼에서는 대표적으로 Canvas 기반 HUD와 UMG 방법이 존재한다.Canvas 기반 HUD는 HUD Class를 상속해서 구현하는 방법으로 구방식에 해당하고, 요즘에는 UMG 방법을 채택한다고 한다. UMG (Unreal Motion Graphics)생성하는 방법플랫폼별 호환 확인 해당 Screen Size 메뉴를 통해 각 화면별로 UI의 짤림 현상이 있는지 확인할 수 있다.UI 바인딩 바인딩하고자 하는 UI를 클릭한 후 Content를 살펴보면 버튼이 하나 존재한다. 해당 버튼을 클릭하여 노드 기반 방식으로 바인딩을 할 수 있다.하지만 노드 기반 바인딩에는 단점이 있는데, Tick 함..
[언리얼엔진] 3-5. 게임 루프 설계
·
언리얼 엔진/스파르타코딩클럽
GameInstanceGameInstance새로운 레벨이 로드가 되면 GameState에 구현한 생성자, BeginPlay가 다시 호출되며 게임의 정보가 초기화 된다. GameInstance 클래스는 레벨이 로드가 되어도 저장한 정보가 초기화 되지 않는다. 따라서, 게임 점수, 게임 시간 등의 게임이 진행되는 동안 유지가 되어야하는 정보는 GameInstance 클래스에 구현해야 한다.작성한 코드더보기#pragma once#include "CoreMinimal.h"#include "Engine/GameInstance.h"#include "SpartaGameInstance.generated.h"UCLASS()class SPARTAPROJECT_API USpartaGameInstance : public UG..
[언리얼엔진] 3-4. 캐릭터 체력 및 점수 시스템 구현
·
언리얼 엔진/스파르타코딩클럽
PlayerStatePlayerState플레이어마다의 고유한 정보를 관리하는 기능을 제공 멀티플레이 모드에서 핵심적인 기능이라고 한다. 싱글플레이에서는 사용할 필요가 없다고 하니, 추후에 멀티플레이를 구현할 때 자세히 알아볼 예정이다. GameStateGameState게임내의 전역 정보를 저장하는 기능을 제공 게임 점수, 웨이브 지속 시간 등 게임 내의 핵심이 되는 요인들을 관리하기에 유용한 클래스이다.GameState, GameStateBase 2가지 종류가 있는데, 싱글플레이 모드에서는 단순한 GameStateBase를 선호한다고 한다.//.hpublic: ASpartaGameStateBase(); UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category ..