- 인벤토리 게임 아이템 설정.
스크립터블 오브젝트
Item.cs
using UnityEngine;
public enum ItemType
{
Equipment, // 장비형
Consumable, // 소비형
Material, // 재료
Quest, // 퀘스트
Misc // 기타
}
[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")]
public class Item : ScriptableObject
{
[Header("기본 정보")]
public string itemName; // 아이템 이름
public Sprite itemIcon; // 아이템 아이콘
[TextArea(3, 5)]
public string itemDescription; // 아이템 설명
public ItemType itemType; // 아이템 타입
public string itemID; // 고유 ID
public bool isStackable; // 중첩 가능 여부
public int maxStackSize = 1; // 최대 중첩 개수
[Header("아이템 효과")]
public float useTime = 1f; // 사용 시간
public bool canUseInBattle = true; // 전투중 사용 가능 여부
[Header("장비 속성")]
public bool isEquipment; // 장비 여부
public EquipmentSlotType equipSlot; // 장착 슬롯 종류
public int durability = 100; // 내구도
public int defense; // 방어력
public int attack; // 공격력
[Header("소비 아이템 속성")]
public bool isConsumable; // 소비 아이템 여부
public float healthRestore; // HP 회복량
public float manaRestore; // MP 회복량
public float duration; // 효과 지속시간
[Header("기타")]
public int buyPrice; // 구매 가격
public int sellPrice; // 판매 가격
public string requiredLevel; // 필요 레벨
public Rarity rarity; // 희귀도
// 아이템 사용 메서드
public virtual void Use(PlayerCharacter player)
{
if (isConsumable)
{
// 소비 아이템 사용 로직
player.RestoreHealth(healthRestore);
player.RestoreMana(manaRestore);
}
}
// 장비 장착 메서드
public virtual void Equip(PlayerCharacter player)
{
if (isEquipment)
{
// 장비 장착 로직
player.AddDefense(defense);
player.AddAttack(attack);
}
}
// 장비 해제 메서드
public virtual void Unequip(PlayerCharacter player)
{
if (isEquipment)
{
// 장비 해제 로직
player.RemoveDefense(defense);
player.RemoveAttack(attack);
}
}
}
// 장비 슬롯 타입
public enum EquipmentSlotType
{
None,
Head,
Chest,
Legs,
Feet,
Weapon,
Shield,
Accessory
}
// 아이템 희귀도
public enum Rarity
{
Common,
Uncommon,
Rare,
Epic,
Legendary
}
추가 고려사항:
[CreateAssetMenu(fileName = "NewItem", menuName = "Inventory/Item")]
public class Item : ScriptableObject
{
[Header("쿨다운 관련")]
public float cooldownTime = 0f; // 쿨다운 시간 (초)
// 아이템을 사용할 수 있는지 체크하는 메서드
public bool CanUse(ItemInstance itemInstance)
{
return itemInstance.remainingCooldown <= 0f;
}
}
// 실제 인벤토리에서 사용되는 아이템 인스턴스 클래스
public class ItemInstance
{
public Item itemData; // 아이템의 기본 정보
public float remainingCooldown; // 남은 쿨다운 시간
public void UpdateCooldown()
{
if (remainingCooldown > 0)
{
remainingCooldown -= Time.deltaTime;
}
}
public void Use(PlayerCharacter player)
{
if (CanUse())
{
// 아이템 사용 로직
itemData.Use(player);
// 쿨다운 시작
remainingCooldown = itemData.cooldownTime;
}
}
private bool CanUse()
{
return remainingCooldown <= 0f;
}
}
// 체력 포션 생성 예시
var healthPotion = CreateInstance<Item>();
healthPotion.itemName = "체력 포션";
healthPotion.cooldownTime = 5f; // 5초 쿨다운
// 게임 매니저나 인벤토리 매니저에서의 업데이트
void Update()
{
// 모든 아이템 인스턴스의 쿨다운 업데이트
foreach(var item in inventory.items)
{
item.UpdateCooldown();
}
}
이렇게 구현하면:
대표적인 예시:
이런 식으로 아이템의 밸런스를 조절할 수 있습니다.
유니티 인벤토리 드래그 앤 드롭 (0) | 2024.11.29 |
---|---|
유니티 인벤토리 데이터 베이스 (0) | 2024.11.26 |
유니티 딕셔너리 (0) | 2024.11.01 |
유니티 뉴인풋시스템 - 구르기, 회피, 닷지, 롤 (0) | 2024.10.24 |
유니티 플라잉보드, 호버보드 시스템 (0) | 2024.10.19 |