아이템 루팅

2020. 4. 14. 16:31개발일지

이번엔 아이템이 있는 타일로 이동하면 아이템을 습득하는 것을 구현했다.

 

습득한 아이템에 따라 해당 슬롯으로 이동하는 모션을 넣고 싶었다. 예를 들어 무기 습득시에는 무기 슬롯으로 아이템이 이동하는 모션을 넣고, 음식 습득시에는 음식 슬롯으로 이동하도록 구현하기로 했다.

따라서 습득한 아이템의 클래스를 런타임중에 알아야 했는데, 가장 처음에 든 생각은 단순하게 런타임중 Item을 상속받는 모든 형들에 캐스팅을 해보는 것이었다.

위와 같은 방법도 작동은 하겠지만, 아이템 종류가 많아질수록 if문이 한없이 많아지고 런타임중 형변환을 여러번 하는 것을 피하고 싶었기에 다른 방법을 생각해봤다.

 

먼저 Item 클래스는 상속받는 클래스들이 EquipItem 함수를 구현하도록 순수가상함수를 선언했다.

Item 클래스의 EquipItem 순수가상함수

플레이어가 아이템을 습득하면 EquipItem 함수를 호출한다.

 

각각의 클래스에서 필요한 처리를 하고, Player클래스의 Equip 함수를 호출해 준다.

Equip 함수는 오버로딩 되어있어서 이때 각각의 Item 서브 클래스들이 호출하는 Equip 함수는 다른 함수가 된다.

Weapon 클래스의 EquipItem 함수
Food 클래스의 EquipItem 함수
Player 클래스에 오버로딩 되어있는 Equip 함수들

이제 플레이어는 습득한 Item의 종류에 따라 서로 다른 처리가 가능하게 되었다.

멤버변수 m_Inventory는 UIInventory 클래스 객체로 아이템 슬롯의 위치를 가지고 있다.

UIInventory 클래스

 

아이템 습득시 아이템이 슬롯으로 이동하는 모션을 넣기 위해 Lerp 함수를 만들었다.

Lerp 함수를 이용해 습득한 아이템을 슬롯까지 이동시킨다.

 

실행 결과

 

'개발일지' 카테고리의 다른 글

카메라 흔들기  (0) 2020.04.27
몬스터 행동패턴  (0) 2020.04.23
아이템 상자 스폰  (1) 2020.04.14
플레이어 공격 1  (0) 2020.04.07
랜덤 몬스터 스폰  (0) 2020.04.04