안녕하세요! 투니드입니다!

 

전편에 이어 바로 시작하겠습니다! 먼저 CraftingPanel 안에 있는 구분용 Text를 없앴구요!

안에 패널을 하나 더 깔아줬습니다! 패널 안에 Image 컴포넌트에서는 Color 알파값을 0으로 맞춰주시구요!

CraftingPanel/Panel Inspector

 

Grid 레이아웃 그룹으로 안에 버튼들을 넣어줄 거라서, 일정하게 들어갈 수 있도록 컴포넌트를 붙여줬구요!

프리팹으로 있는 인벤토리 버튼을 하나 Panel에 넣어주고 인벤토리와 동일하게 총 36개를 맞춰줬습니다!

Scene

이렇게 세팅을 해주고 나서

CraftingPanel Inspector

 

CraftingPanel에 Recipe List를 붙여주고 테스트를 해보면

Game

 

만들 수 있는 목록이 보이는 걸 확인하실 수 있습니다! 이제 저희가 해야 할 것은 목록에 떠있는 아이템을 클릭하면 제작할 수 있게 만들어야겠죠?!

MainCharacter에 Crafting.cs 를 만들어서 붙여주겠습니다!

Crafting.cs

 

이렇게 작성해 주시면 되는데! 문제는 itemContainer.cs에는 CheckFreeSpace() 메서드와 CheckItem() 메서드가 없죠!

바로 작성하러 가보죠!

itemContainer.cs

 

CheckFreeSpace에서 빈 공간을 탐색하고, 없다면 만들 수 없도록 작성해 주고

CheckItem은 필요한 아이템(CraftingRecipe.cs/elements.item && CraftingRecipe.cs/elements.count)이 필요한 만큼 있는지 검사하도록 만들었습니다!

 

그러면 이제 클릭이벤트로 처리하기 위해서 클릭을 정의하러 가봐야겠죠?

다시 RecipePanel.cs로 갑니다!

RecipePanel.cs

 

ItemPanel을 상속받았으니 OnClick을 재정의 해주면 됩니다! id값이 잘못 들어갔다면 실행하지 않도록 하고,

레시피가 유효하면 제작을 시도합니다!

 

이렇게 작성이 전부 끝났다면 다시 유니티로 와서

CraftingPanel/Panel Inspector

 

이렇게 CraftingPanel에 넣었던 RecipePanel.cs 컴포넌트를 CraftingPanel안에있는 Panel로 옮겨줍니다!

왜 옮기는지 아시나요?

인벤토리 슬롯 자체가 버튼으로 구성이 되어있습니다! InventoryButton.cs 를 잠깐 보시죠!

인벤토리 슬롯을 누르면 OnPointerClick으로 처리하기 위해서 IPointerClickHandler 인터페이스를 상속받았죠?

그리고 내용을 보면

InventoryButton.cs

 

버튼이 클릭이 되면, 부모 패널의 OnClick을 실행하게 됩니다! 즉, RecipePanel이 ItemPanel을 상속받고 있으니 다형성에 의해 클릭 이벤트를 RecipePanel.cs/OnClick() 메서드를 실행하게 만드는 것이죠!

CraftingPanel 오브젝트에 RecipePanel.cs가 붙어있다면 인벤토리 버튼의 부모는 CraftingPanel/Panel이기 때문에 OnPointerClick() 메서드에서 에러가 발생하기 때문입니다!

이해되시나요??

아무튼 이제 실행해 보면!

Game

 

잘 만들어지는 걸 확인하실 수 있습니다!

 

이번 편은 여기까지입니다! ㅎㅎ

+ Recent posts