0. 개요

이전 포스트에서 플레이어 이름을 지정하고 슬롯을 생성했다.

생성된 슬롯에 지정한 플레이어 이름을 가져올 수 있도록 뷰에 뷰 모델의 멤버 변수를 바인딩할 것이다.

 

 

1. 필드 노티파이

(1) 필드 노티파이란?

 

 

(2) 필드 노티파이 작동 원리

필드 노티파이로 선언된 멤버 변수는 뷰 모델에 의해 변경되면 뷰(View)에서 자동으로 변경이 반영된다

 

 

(3) MVVM_LoadSlot에서 플레이어 이름을 필드 노티파이로 지정

	/* 필드 노티파이*/

	UPROPERTY(EditAnywhere, BlueprintReadWrite, FieldNotify, Setter, Getter)
	FString PlayerName;

	void SetPlayerName(FString InPlayerName);

	FString GetPlayerName() const { return PlayerName; }
};
void UMVVM_LoadSlot::SetPlayerName(FString InPlayerName)
{
	// MVVM 매크로 - 값을 바꾸고 값이 바뀌었다는 델리게이트를 호출
	UE_MVVM_SET_PROPERTY_VALUE(PlayerName, InPlayerName);
}

직접 이름을 Setter로 변경하지 않고 매크로를 이용하여 변경하면, 필드 노티파이를 호출하게 된다.

 

 

(4) WBP_LoadSlot_Taken에서 뷰의 멤버 변수인 Text_PlayerName을 바인딩

(4-1) 뷰 바인딩 메뉴

- 위젯 블루프린트 하단의 뷰 바인딩 클릭

- 바인딩 추가 버튼 클릭

- <없음> 콤보 박스를 클릭해 바인딩하려는 위젯 구성요소 클릭

 

 

(4-2) 필드 노티파이로 선언된 멤버 변수 선택하기

- 위젯 구성요소에서 변경하고자 하는 속성 선택 (텍스트)

- 뷰 모델(ViewModel)의 멤버 변수인 -플레이어 이름- 필드 노티파이 선택

 

 

(4-3) 변환 함수 사용

위젯의 텍스트는 FText이므로, FString 타입인 플레이어 이름을 변환하여 넣어야 한다.

- MVVM 선택 콤보 박스를 눌러 Text에서 변환 함수를 선택

- To Text (String) 함수를 사용하여 필드 노티파이 변수를 FString -> FText 변환하여 넣어줌

 


중앙의 화살표 버튼을 누르면 뷰와 뷰 모델 사이의 데이터 흐름을 제어할 수 있다.


(5) MVVM_LoadScreen의 NewSlotButtonPressed 함수에서 플레이어 이름 변수를 Setter로 설정

	LoadSlots[Slot]->PlayerName = EnteredName;

위의 코드 조각을 아래로 대체한다.

	LoadSlots[Slot]->SetPlayerName(EnteredName);

이제 플레이어 이름은 필드 노티파이이므로, 노티파이에 의해 변경된 이름이 뷰에  자동으로 적용되도록 SetPlayerName 함수를 사용한다.