🎮Unreal4/C++_Plugin

[UE4] DataAsset 읽어와서 ListView에 출력하기 (EngineUtils, FindOrLoadAssetsByPath, OnSelectionChanged, SLATE_EVENT)

공대 컴린이 2023. 4. 28. 17:39
728x90

이전 학습에서는 테스트로 ListView의 데이터를 넣어 표 형식을 Custom Editor에 출력해보았다.

이번에는 프로젝트에 존재하는 WeaponAsset 을 전부 가져와서 해당 내용을 ListView에 출력해보았다.

📑Data Asset List 읽어오고 저장하기

EngineUtils 클래스 FindOrLoadAssetsByPath 함수를 이용하면 매개변수로 전달하는 경로에 존재하는 애셋을 모두 읽어들일 수 있다.

읽어온 UObject 객체가 UCWeaponAsset으로 형변환 되는지를 확인하고, 형변환 된다면 RowDatas에 추가해주었다.

 

이후, RowData는 람다식을 이용하여 Index를 기준으로 오름차순 정렬하였다.

📑Construct 함수

SWeaponListView::Construct

이전에 작성되어있던 SWeaponListView 클래스의 Construct 함수에서 ListView의 OnSelectionChanged 이벤트를 등록시켰다.

OnSelectionChanged 함수는 ListView에 선택한 항목이 바뀔때마다 호출되는 이벤트이다.

 

SWeaponListView.h

헤더파일에서는 SLATE_EVENT 명령어를 통해 OnListViewSelectedItem 함수를 받을 수 있도록 설정하였다.

📑 OnSelectionChanged

OnSelectionChanged 함수에서는 선택된 항목이 InPtr 매개변수로 들어오고, 해당 FWeaponRowDataPtr을 OnListViewSelectedItem 이벤트로 Execute 시켜주었다.

 

ExecuteIfBound 함수는 등록된 함수가 존재한다면, 해당 함수를 실행시키라는 조건문이 포함된 역할을 수행한다.

 

이는 선택된 객체를 WeaponAssetEditor 클래스에서 다뤄야하기 때문에 Execute로 전달해주기 위함이다.

📑 WeaponAssetEditor 클래스

WeaponAssetEditor의 화면이 열릴 때 ListView의 OnListViewSelectedItem 델리게이트에 WeaponAssetEditor 함수를 등록시켜주었다.

 

WeaponAssetEditor.h

WeaponAssetEditor 클래스에서도 OnListViewSelectedItem 함수를 생성하여, WeaponListView에서 전달해주는 FWeaponRowDataPtr을 출력해보았다.

 

컴파일 후 WeaponAssetEditor 창을 열어보면 읽어온 DataAsset들이 ListView에 추가되어 나타나있고,

해당 항목들을 순차적으로 클릭하면 ChangedItem 함수가 호출되면서 정상적으로 로그가 찍히는것을 확인할 수 있었다.

728x90