분류 전체보기 121

MVVM 패턴

일반적인 MVVM 패턴 MVVM 패턴은 MVC 패턴에서 Controller를 빼고 ViewModel을 추가한 패턴입니다. 역할 및 동작 원리 View iOS는 ViewController까지 View가 됩니다 사용자가 보여지는 View를 생각하면 된다. 유저 인터랙션을 받는 역할, 인터랙션을 받을 시 ViewModel에게 명령을 내립니다. ViewModel View를 표현하기 위해 만들어진 View를 위한 Model View와는 Binding을 하여 연결후 View에게서 액션을 받고 또한 View를 업데이트합니다 ex) textView에 보여줄 내용을 담당하는 함수 등, View에서 변화가 일어나는 ViewController의 역할을 담당 Model 데이터, 비즈니스 로직, 서비스 클라이언트 등으로 구성 ..

디자인 패턴 2021.04.13

MVP 패턴

일반적인 MVP 패턴 MVP 패턴은 MVC 패턴에서 Controller를 제거하고 Presenter를 추가한 것 입니다. Controller 대신에 Presenter로 대체한 이유는 View와 Model의 의존성을 없애기 위함입니다. 역할 및 동작 원리 Model 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분 domain Data 또는 데이터를 다루는 data access layer를 담당하는 카테고리 View 사용자에게 제공되어 보여지는 UI Presenter View에서 요청한 정보를 Model로 부터 가공해서 View로 전달하는 부분 Presenter에는 어떠한 layout code도 담겨져 있지 않습니다 View의 데이터와 상태를 Updating 해주는 역할을 합니다 MV..

디자인 패턴 2021.04.12

MVC 패턴

일반적인 MVC 패턴 MVC 패턴은 일반적으로 널리 사용되는 패턴 중 하나입니다. 위의 그림은 일반적인 MVC 패턴의 모습인데, Controller가 다리 역할이 되어 View의 입력을 Model에 반영합니다. 그리고 그에 따른 Model의 변화를 Controller가 다시 View에게 전달하여 View를 갱신합니다. 역할 및 동작 원리 Model 프로그램에서 사용되는 실제 데이터 및 데이터 조작 로직을 처리하는 부분 View 사용자에게 제공되어 보여지는 UI Controller 사용자의 입력을 받고 처리하는 부분 1. Controller로 사용자의 입력이 들어옵니다 2. Controller가 Model의 데이터를 업데이트합니다 3. Model은 해당 데이터를 보여줄 View를 선택해서 사용자에게 보여줍..

디자인 패턴 2021.04.12

UE4 생존게임 제작 - 18 (Game Ending 시스템 제작)

1. Game Ending Trigger 제작 UPROPERTY(Category = Collision, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) UBoxComponent* TriggerBox; public: // 충돌이 시작할시에 호출되는 델리게이트에 등록하는 함수 UFUNCTION() void TriggerEndingSceneBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult&..

UE4 생존게임 제작 - 17 (SaveGameObject를 사용한 게임 저장 및 각종 UI 제작)

1. 시작 UI 수정 SaveGameObject를 사용해서 게임 저장을 제작하기 전에, 사용자가 저장된 게임을 불러올 수 있도록 시작 UI에 Continue Play 버튼을 추가해주었습니다. 2. SaveGameObject 제작 SaveGame 클래스를 상속받은 C++ 클래스를 생성하였습니다. // 플레이어의 능력치 UPROPERTY(VisibleAnywhere, Category = Basic) int32 HP; UPROPERTY(VisibleAnywhere, Category = Basic) int32 Moisture; UPROPERTY(VisibleAnywhere, Category = Basic) float MoistureMax; UPROPERTY(VisibleAnywhere, Category = Ba..

UE4 생존게임 제작 - 16 (각종 UI 제작)

1. 아이템 설명 텍스트 창 제작 위젯 블루프린트를 생성한 후, 간단하게 아이템 설명 텍스트 창을 꾸며주었습니다. 그리고 나서 전에 만들어두었던 인벤토리 아이템 위젯에 붙여주었습니다. 이때, 아이템 설명 텍스트 창은 Collapsed(안보이는 상태)로 설정하였습니다. 사용자가 아이템에 마우스를 올렸을 때만 보이는 상태로 해줄 것입니다. void UInventoryItem::NativeTick(const FGeometry& MyGeometry, float InDeltaTime) { Super::NativeTick(MyGeometry, InDeltaTime); // 마우스를 아이템에 올려놓았을 때, 아이템 설명 텍스트 창 보이게 설정 if (BackImage->IsHovered() || NameText->I..

UE4 생존게임 제작 - 15 (UI 제작 및 다양한 사운드 처리)

1. 화살 개수 UI 제작 먼저 UMG를 생성한 후, 화살 아이콘과 현재 화살의 개수와 가지고 있을 수 있는 화살의 최대수를 나타내는 TextBlock으로 위젯 블루프린트 클래스를 꾸몄습니다. public: UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = "true")) class UTextBlock* ArrowNum; UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta = (AllowPrivateAccess = "true")) class UTextBlock* ArrowNumMax; void UUIArrowState::NativeConstruct() { Super::Native..

UE4 생존게임 제작 - 14 (트리거 시스템 제작)

1. 플레이어 감지를 위한 프로파일 생성 프로파일을 생성한 후, 플레이어와만 Overlap이 발생하도록 설정하였습니다. 2. 프로파일을 설정할 액터 생성 protected: UPROPERTY(Category = Collision, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) UBoxComponent* TriggerBox; ATriggerMoisture::ATriggerMoisture() { PrimaryActorTick.bCanEverTick = true; TriggerBox = CreateDefaultSubobject(TEXT("TriggerBox")); SetRootComponent(TriggerBox); // 프..

UE4 생존게임 제작 - 13 (아이템 제작창 제작)

1. 아이템 제작창 UMG 생성 아이템 제작창 또한 인벤토리처럼 List View를 이용하여 제작하였습니다. 그래서 UMG를 제작하는 과정은 생략하도록 하겠습니다. 2. 아이템 제작창 키 입력 추가 프로젝트 세팅에서 아이템 제작창을 열기 위한 키 입력을 추가하였습니다. PlayerInputComponent->BindAction(TEXT("OpenRecipe"), EInputEvent::IE_Pressed, this, &APlayerSurvivor::OpenRecipe); 그 다음 플레이어의 입력을 감지하는 SetupPlayerInputComponent 함수에서 액션 매핑을 통해 실행될 함수를 등록해주었습니다. // 제작창을 여는 함수 void APlayerSurvivor::OpenRecipe() { if..

UE4 생존게임 제작 - 12 (인벤토리 UI, 아이템 및 아이템 사용 효과 제작)

1. 인벤토리 UMG 생성 List View를 이용하여 인벤토리를 제작해볼 것입니다. List View의 UI를 만들때에는 두개의 UMG가 필요한데, 목록을 가지고 있을 List View UMG와 목록 안에 항목들을 표현할 UMG가 필요합니다. 그리고 인벤토리에 들어갈 항목들의 데이터를 가지고 있을 UObject 타입의 클래스 또한 필요합니다. 일단 두개의 UMG와 데이터를 담고 있을 클래스를 만들어주었습니다. InventoryItem 위젯 블루프린트의 클래스 세팅에서 구현된 인터페이스에 User Object List Entry라는 것을 추가해줘야 합니다. 이걸 추가해줘야 Inventory 위젯 블루프린트에서 InventoryItem 위젯 블루프린트를 인식하고 불러올 수 있습니다. 2. Inventory..