아이템 제작 시스템은 게임에 더 많은 선택과 자유도를 부여하며, 캐릭터의 능력을 강화할 수 있고, 게임의 재미와 플레이 시간을 증가시킬 수 있기 때문에 필요합니다. 아이템 제작 시스템을 구현하고 이를 정리하였습니다.

 

📺 미리보기

 

💬 목차

  • 총 네개의 목차로 구성되어 있습니다.
  • 글 별로 아직 언급되지 않은 클래스의 호출이 있을 수 있습니다. 이 사항은 모든 글을 참조하면 충분히 이해할 수 있습니다.

1. [유니티] 제작 시스템(1) - 레시피

2. [유니티] 제작 시스템(2) - 제작 슬롯

[📌현재 글] 3. [유니티] 제작 시스템(3) - 제작소

4. [유니티] 제작 시스템(4) - 매니저

 

📖 구현 내용

  • 플레이어의 인벤토리에 있는 아이템을 재료로 하여 아이템을 제작할 수 있습니다.
  • 아이템 제작에는 시간이 소요되며 시간을 기다린 후에만 아이템 교환이 이뤄집니다.
  • 아이템 제작 시간 도중 창을 닫는경우 아이템 교환은 이뤄지지 않습니다.
  • 아이템을 제작중인경우 현재 제작중인 아이템을 또 제작하거나, 다른 아이템을 제작할 수 없습니다.

 

✅ 구현

  • 이번 글에서는 제작 레시피를 가지고 해당 레시피를 이용하여 제작을 할 수 있도록 제작소를 제공하는 기능을 구현합니다.

 

· CraftingStation.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace CraftingSystem
{
    public class CraftingStation : MonoBehaviour
    {
        [Header("제작 스테이션에서 가능한 조합 레시피들")]
        [SerializeField] private CraftingRecipe[] mRecipes;
        
        [Header("글로벌 레시피를 사용하는가?")]
        [SerializeField] private bool mIsUseGlobalRecipes = true;

        [Header("다이얼로그 창의 타이틀 이름")]
        [SerializeField] private string mTitle = "CRAFTING STATION";

        public void TryOpenDialog()
        {
            CraftingManager.Instance.TryOpenDialog(mRecipes, mIsUseGlobalRecipes, mTitle);
        }
    }
}

 

[Header("제작 스테이션에서 가능한 조합 레시피들")]
[SerializeField] private CraftingRecipe[] mRecipes;
  • 해당 제작소에서 제작이 가능한 레시피들을 등록시킵니다.

 

[Header("글로벌 레시피를 사용하는가?")]
[SerializeField] private bool mIsUseGlobalRecipes = true;
  • 간단한 아이템은 높은 티어의 제작소를 사용하지 않아도 제작할 수 있습니다.
  • 이러한 점을 구현하기위해 글로벌 레시피를 사용할 수 있는 기능을 추가로 구현하였습니다.

 

[Header("다이얼로그 창의 타이틀 이름")]
[SerializeField] private string mTitle = "CRAFTING STATION";
  • 제작소 다이얼로그 창을 열었을 때 해당 제작소의 이름을 UI에 표시하기위해 사용합니다.

 

public void TryOpenDialog()
{
    CraftingManager.Instance.TryOpenDialog(mRecipes, mIsUseGlobalRecipes, mTitle);
}
  • 제작 다이얼로그 창을 엽니다. CraftingManager에게 호출하여 자신의 레시피와, 글로벌 레시피를 사용하는지, 타이틀이름을 함께 전달하여 창을 열도록 합니다.
  • CraftingManager은 다음 글에서 다루겠습니다.

 

 

✅ 사용

· 제작소 등록

  • 제작소를 사용할 오브젝트에 CraftingStation.cs를 컴포넌트로 포함시키고 내부 멤버변수들을 설정해줍니다.
bonnate