아이템 제작 시스템은 게임에 더 많은 선택과 자유도를 부여하며, 캐릭터의 능력을 강화할 수 있고, 게임의 재미와 플레이 시간을 증가시킬 수 있기 때문에 필요합니다. 아이템 제작 시스템을 구현하고 이를 정리하였습니다.
📺 미리보기
💬 목차
- 총 네개의 목차로 구성되어 있습니다.
- 글 별로 아직 언급되지 않은 클래스의 호출이 있을 수 있습니다. 이 사항은 모든 글을 참조하면 충분히 이해할 수 있습니다.
[📌현재 글] 1. [유니티] 제작 시스템(1) - 레시피
📖 구현 내용
- 플레이어의 인벤토리에 있는 아이템을 재료로 하여 아이템을 제작할 수 있습니다.
- 아이템 제작에는 시간이 소요되며 시간을 기다린 후에만 아이템 교환이 이뤄집니다.
- 아이템 제작 시간 도중 창을 닫는경우 아이템 교환은 이뤄지지 않습니다.
- 아이템을 제작중인경우 현재 제작중인 아이템을 또 제작하거나, 다른 아이템을 제작할 수 없습니다.
✅ 구현
- 이번 글에서는 제작 레시피를 에셋으로 관리하고 추후에 편하게 이 조합법을 레퍼런스 할 수 있도록 Scriptable Object 클래스를 다룹니다.
- 이 기능에는 블로그에서 다뤘던 인벤토리 시스템을 기초로하여 작동합니다.
· CraftingRecipe.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace CraftingSystem
{
[CreateAssetMenu(fileName = "Recipe", menuName = "Scriptable Object/CraftingRecipe", order = int.MaxValue)]
public class CraftingRecipe : ScriptableObject
{
[Header("제작에 필요한 재료 아이템들")]
[SerializeField] public CraftingItemInfo[] reqItems;
[Header("제작 결과물 아이템")]
[SerializeField] public CraftingItemInfo resultItem;
[Space(30)]
[Header("요구되는 레벨")]
[SerializeField] public int reqLevel;
[Header("제작에 걸리는 시간")]
[SerializeField] public float craftingTime;
[Header("아이콘을 표시할 이미지")]
[SerializeField] public Sprite buttonSprite;
}
#if UNITY_EDITOR
[CustomEditor(typeof(CraftingRecipe))]
public class CraftingRecipeEditor : Editor
{
CraftingRecipe recipe;
void OnEnable()
{
recipe = (CraftingRecipe)target;
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
// 버튼 생성
if (GUILayout.Button("이름 자동 변경"))
{
// 이름 변경
AssetDatabase.RenameAsset(AssetDatabase.GetAssetPath(recipe), $"RECIPE__{recipe.resultItem.item.ID.ToString()}");
}
}
}
#endif
[System.Serializable]
public struct CraftingItemInfo
{
[SerializeField] public Item item;
[SerializeField] public int count;
}
}
[CreateAssetMenu(fileName = "Recipe", menuName = "Scriptable Object/CraftingRecipe", order = int.MaxValue)]
- 스크립터블 오브젝트로 생성하여 관리할 수 있도록 만듭니다.
[Header("제작에 필요한 재료 아이템들")]
[SerializeField] public CraftingItemInfo[] reqItems;
- CraftingItemInfo를 배열로 사용하여 아이템 제작에 필요한 아이템들을 정의합니다.
[Header("제작 결과물 아이템")]
[SerializeField] public CraftingItemInfo resultItem;
- CraftingItemInfo를 이용하여 제작 시 지급되는 아이템의 정보를 정의합니다.
[System.Serializable]
public struct CraftingItemInfo
{
[SerializeField] public Item item;
[SerializeField] public int count;
}
- 재료 및 결과 아이템에 대한 정보입니다.
- 간단히 어떤 아이템 및 아이템의 개수를 나타냅니다.
✅ 사용
- 프로젝트에서 우클릭 > Create > Scriptable Object > CraftingRecipe를 눌러 새로운 레시피 에셋을 생성합니다.
- Req Items에 요구되는 아이템을 넣습니다.
- Result Item에 결과 아이템을 넣습니다.
- 기타 설정을 해줍니다.
'unity game modules' 카테고리의 다른 글
[유니티] 제작 시스템(3) - 제작소 (0) | 2023.04.02 |
---|---|
[유니티] 제작 시스템(2) - 제작 슬롯 (0) | 2023.04.02 |
[유니티] 상점 시스템(3) - 상점 매니저 (0) | 2023.04.02 |
[유니티] 상점 시스템(2) - 상점 (0) | 2023.04.02 |
[유니티] 상점 시스템(1) - 상점 슬롯 (0) | 2023.04.02 |