TIL

25.03.13 TIL

gaon99 2025. 3. 13. 21:10

1. 오늘 학습 키워드

 

크래프팅 시스템


2. 오늘 학습 한 내용을 나만의 언어로 정리하기

 

어제는 크래프팅을 만들기 위한 인벤토리 및 아이템을 제작하였다면, 오늘은 그 기반을 토대로 크래프팅 로직을 좀 만들고 싶었다.

 

다만. 그전에 어제 작업한 Scriptable Object를 활용해서 아이템을 관리하고, 델리게이트를 활용하여 버튼을 할당한 내용을 가시적으로 보고팠기도 했고, 오류 부분이나 수정할 만한 내용을 좀 확인했고, 지난번 강의 때 제작했던 파일에 이번에 작업한 스크립트를 넣어 확인을 해보려고했지만, 이게 계속 selecteditem이 null이 되었다. 아무래도 내가 이번에 작업하면서 누락된 부분이나, 혹은

잘못 작성한 부분이 있는지 낮시간동안 계속 디버깅을 했는데, 본 프로젝트 파일에 플레이어 상호작용 기능을 제작해주셔서

 

팀 프로젝트로 실행을 하니 오류가 사라졌다.  내 생각엔 변수 이름을 너무 비슷하게 지어서 오류가 난것같다.

 

그리고 오류를 수정한 이후에 CraftingRecipe를 먼저 간단히 작성했다

SO를 사용해서, 재료 및 수량을 아이템 프리팹을 제작하여, 넣어주려고 한다.

using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "Crafting Recipe", menuName = "Crafting Recipe")]
    public class CraftingRecipe : ScriptableObject
{
    [System.Serializable]
    public struct Ingredient // 재료 및 수량
    {
        public ItemData itemData;
        public int quantity;
    }
    
    public List<Ingredient> ingredients = new List<Ingredient>();
    public ItemData resultItem;
    public int resultAmount = 1;
}

 

그리고 CraftingSystem이다. 인풋액션을 사용해서 사용자가 특정한 키(C 혹은 B)를 누를시에

Crafting UI를 가시적으로 띄우고, 

    private void toggleCraftingUI(InputAction.CallbackContext context)
    {
        craftingWindow.SetActive(!craftingWindow.activeSelf);
    }

 

재료를 확인하여,

public void CraftItem(CraftingRecipe recipe)
    {
        foreach (var ingredient in recipe.ingredients)
        {
            if (!inventory.HasItem(ingredient.itemData, ingredient.quantity))
            {
                feedbackText.text = "재료가 부족합니다.";
                return;
            }
        }

        foreach (var ingredient in recipe.ingredients)
        {
            inventory.RemoveItem(ingredient.itemData, ingredient.quantity);
        }

        for (int i = 0; i < recipe.resultAmount; i++)
        {
            //PlayerManager.Instance.Player.addItem?.Invoke(recipe.resultItem);
        }

        feedbackText.text = $"{recipe.resultItem.displayName} 제작 완료";
        inventory.UpdateUI();
    }

 

아이템이 있다면 해당 아이템을 인벤토리에서 지우고, 제작 아이템을 추가하는 로직을 생각해보았다.

 

뼈대만 잡아두어서 수정해야 할 내용이 많기에 내일 최대한 수정을 해보려고 한다.


3. 학습하며 겪었던 문제점 & 에러

 

SelectedItem이 null이 되어, 소모 아이템을 사용하였는데 오류가 발생함

체력 회복 및 아이템 사라지는 UI 까지는 적용이 되었으나 오류가 떠서, 해결하는데 좀 골머리를 썼다.


4. 내일 학습 할 것은 무엇인지

뼈대만 잡아둔것이라 내일은 저 뼈대에 살을 좀 붙여서 제작 시스템을 만들려고한다.

'TIL' 카테고리의 다른 글

25.03.21 TIL  (0) 2025.03.24
25.03.20 TIL  (0) 2025.03.20
25.03.11 TIL  (0) 2025.03.11
25.03.10 TIL  (0) 2025.03.10
25.03.06 TIL  (0) 2025.03.06