[언리얼엔진] 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);} 블루프린트에서 구현한 함수의 이름을 통해 해당 기능을 불러올 수 있다. ..
[언리얼엔진] 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 ..
[언리얼엔진] 3-3. 아이템 스폰 및 데이터테이블 관리
·
언리얼 엔진/스파르타코딩클럽
Box CollisionBox Collision 초기화// .hUPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Spawning")UBoxComponent* SpawningBox;// .cppSpawningBox = CreateDefaultSubobject(TEXT("SpawningBox"));SpawningBox->SetupAttachment(Scene); Box Collision 컴포넌트를 C++에서 초기화하는 코드이다.Box Collision 함수// 박스 콜리전의 반지름 값을 가져옴FVector BoxExtent = SpawningBox->GetScaledBoxExtent();// 박스 콜리전의 중심 좌표를 가져옴FVector BoxOrigin..
[언리얼엔진] 3-2. 충돌 이벤트로 획득하는 아이템 구현
·
언리얼 엔진/스파르타코딩클럽
콜리전콜리전 프리셋1. NoCollision : 충돌 무시2. Block All : 모든 객체에 대해 충돌 반영3. OverlapAll : 투명한 객체로서 트리거존과 같은 이벤트 용도로 사용4. BlockAllDynamic : 플레이어처럼 움직이는 객체와 상호작용 할 때 사용5. OverlapAllDynamic : 움직이는 객체와 오버랩 이벤트 발생. 센서 등으로 사용6. Pawn : 플레이어, AI 등 Pawn 타입 객체를 대상으로 충돌 반영이벤트 바인딩void OnItemOverlap( UPrimitiveComponent* OverlapComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool ..