기존 문제점
기존 BuildIOSlots()는 설비가 처리할 수 있는 모든 레시피를 순회하면서 Input/Output 아이템을 수집했다.
TArray<FName> AllRecipes;
LoadSub->GetAllRecipeIds(AllRecipes);
그리고 설비 태그와 맞는 모든 레시피의 입력/출력 아이템을 슬롯으로 생성했다.
이 방식은 모든 레시피의 아이템 슬롯이 한 번에 표시되며, 현재 선택한 레시피와 상관 없는 슬롯이 보인다.
선택된 레시피 기준으로 슬롯 생성
현재 Processor에 저장된 SelectedRecipeId를 기준으로 레시피 데이터를 찾는다.
const FName SelectedRecipeId = Proc->GetSelectedRecipe();
const FKORecipeRow* Recipe = LoadSub->FindRecipeRow(SelectedRecipeId);
선택된 레시피를 찾은 뒤, 해당 레시피의 입력과 출력 데이터만 순회해서 슬롯을 생성한다.
for (const TPair<FGameplayTag, int32>& In : Recipe->Inputs)
{
const FName ItemId = LoadSub->FindItemIdByTag(In.Key);
// Input 슬롯 생성
}
for (const TPair<FGameplayTag, int32>& Out : Recipe->Outputs)
{
const FName ItemId = LoadSub->FindItemIdByTag(Out.Key);
// Output 슬롯 생성
}
레시피를 변경할 때 기존 슬롯이 누적되지 않도록, 새 슬롯을 만들기 전에 기존 패널과 슬롯 배열을 정리했다.
InputSlotsPanel->ClearChildren();
InputSlotWidgets.Reset();
OutputSlotsPanel->ClearChildren();
OutputSlotWidgets.Reset();
정리
기존 흐름
설비가 사용할 수 있는 모든 레시피 확인
→ 모든 Input 아이템 수집
→ 모든 Output 아이템 수집
→ 슬롯 생성
수정 후 흐름
레시피 선택
→ 선택된 RecipeId 저장
→ 기존 Input/Output 슬롯 제거
→ 선택된 레시피의 Inputs만 기준으로 Input 슬롯 생성
→ 선택된 레시피의 Outputs만 기준으로 Output 슬롯 생성
슬롯 UI는 선택된 레시피에 따라 동적으로 생성된다. 하지만 실제 아이템 수량은 Processor의 Buffer에서 공유된다.
'Unreal 최종 팀프로젝트' 카테고리의 다른 글
| [TIL] 설비 제작 UI | 최종 팀프로젝트 (0) | 2026.06.11 |
|---|---|
| [TIL] 무기 장착 슬롯 | 최종 팀프로젝트 (0) | 2026.06.10 |
| [TIL] 맵, 미니맵 | 최종 팀프로젝트 (0) | 2026.06.08 |
| [TIL] 파이프 시스템 설계 | 최종 팀프로젝트 (0) | 2026.06.04 |
| [TIL] 건설 회전 기능 | 최종 팀프로젝트 (0) | 2026.06.02 |