오늘은 아이템에서 구현한 것을 정리하고자 한다.
어제 과제에 이어서 이번에는 아이템을 얻었을 때 사용하게 구현하고자 한다.
물론 에셋에 가져온거라 한번 분위기대로 만들려고 하는데 아무튼 이 포션 몹들을 프리팹화 하기 전에 SO(Scriptable Objective)를 작성부터 한다.
public enum ItemType //얻는 아이템 타입 (다른것도 있을테지만 일단 포션만 정의해놨다.)
{
Potion
}
public enum PotionItem //포션이면 두가지 종류가 있을 것이다.
{
Health,
Skill
}
[CreateAssetMenu(fileName = "ItemData", menuName = "New Item")]
public class ItemData : ScriptableObject
{
//각 아이템에 필요한 이름, 정보 그리고 종류가 정의되어 있다.
[Header("Item Info")]
public string Name;
public string Description;
public ItemType Type;
//아래들은 아이템을 얻으면 얼만큼 회복하는 양이다.
[Header("Item Prop")]
public float Recover;
//말 그대로 포션이 어떤 유형인지
[Header("Item Potion")]
public PotionItem PotionType;
}
작성 후 두개의 SO파일을 생성하고 다음그림처럼 속성을 설정한다.
그리고 아이템을 획득할수 있게 하는 스크립트를 작성하자
public interface IInteractable
{
public string GetItemData();
public void OnInteract();
}
public class ItemObject : MonoBehaviour, IInteractable
{
public ItemData itemData;
public string GetItemData()
{
return $"{itemData.Name}\n{itemData.Description}";
}
public void OnInteract()
{
CharacterManager.Instance.Player.itemData = itemData;
CharacterManager.Instance.Player.status.UseItem(this);
}
}
public class PlayerGetItem : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
//아이템이랑 충돌하면 자동으로 획득하게
if (collision.gameObject.TryGetComponent<ItemObject>(out ItemObject item))
{
Debug.Log("아이템 획득");
Destroy(item.gameObject);
//획득시 사용
CharacterManager.Instance.Player.status.UseItem(item);
}
}
}
플레이어가 아이템을 얻을수 있도록 컴포넌트에 추가
다음으로 아이템을 얻으면 얻은 효과를 구현하자
public class PlayerStatus : MonoBehaviour
{
//hp, sp, exp
public StatusUI status;
Status hp { get => status.hp; }
Status sp { get => status.sp; }
Status exp { get => status.exp; }
public void UseItem(ItemObject item)
{
if(item.itemData.Type == ItemType.Potion)
{
UsePotion(item);
}
}
private void UsePotion(ItemObject item)
{
switch(item.itemData.PotionType)
{
case PotionItem.Health:
//체력 회복
hp.Add(item.itemData.Recover);
break;
case PotionItem.Skill:
//스킬 회복
sp.Add(item.itemData.Recover);
break;
case PotionItem.SpeedUp:
//일정 시간동안 스피드 업
break;
}
}
}
거의 완성 됐으니 실행해서 확인해보자
'개발 TIL' 카테고리의 다른 글
5/31 부트캠프 개발 TIL (Nav Mesh) (0) | 2024.05.31 |
---|---|
5/30 부트캠프 개발 TIL (직렬화 Json) (0) | 2024.05.30 |
5/28 부트캠프 개발 TIL (물리 가속도와 마찰) (0) | 2024.05.28 |
5/27 부트캠프 개발 TIL (2D Sprite) (0) | 2024.05.27 |
5/24 부트캠프 개발 TIL (ForceMode, Ray관련, Skybox) (0) | 2024.05.24 |