ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 제작 관련 기능을 만들기 1
    TIL 2024. 6. 3. 21:52

    다시 돌아온 팀 프로젝트 기간

    3D 서바이벌 생존 디펜스 게임을 만들게 되었다.

     

    기존에 강의에서 따라했던 내용을 바탕으로 제작하게 되어서 기존에 있던 코드에 기능만 추가하기로 했다.

     

    일단 내가 맡은 부분은 제작

    생존게임하면 당연히 들어있을것 같은 기능이지만 만들어 본적 없어서 생각을 많이했다.

     

    먼저 UI를 대략적으로 구성해봤다.

     

    제작대와 상호작용하거나 또는 제작 화면을 활성화 시키는 키를 눌렀을 때 뜬다고 가정하고

    만들어 봤다.

     

    이렇게 대충 틀을 만든 후에 무엇을 고려해 봐야 할지 적어봤다.

     

    1. 제작법 리스트중 클릭하면 필요한 정보가 떠야한다.

    2. 제작법에 필요한 정보에는 필요한 재료와 현재 플레이어가 가지고있는 재료가 떠야한다.

    3. 만약 제작하기를 눌렀을 때 제작 할 아이템이 충분하지 않는다면 제작되지 않아야한다.

    4. 제작 후에는 인벤토리안에 아이템이 들어가고, 사용한 재료가 차감되어야한다.

    5. 제작에 필요한 아이템 개수와 정보는 누가 들고 있어야 할까?

    6. 인벤토리에 가지고 있는 재료가 있는지 확인 여부를 어떻게 할것인가. 

     

    등등...

     

    우선 1번은 기존에 만들어놨던 Inventory와 itemSlot을 참고하여 초안을 작성하였다.

     

    UICraft.cs

    using TMPro;
    using UnityEngine;
    
    public class UICraft : MonoBehaviour
    {
        [Header("SelectRecipe")]
        public TextMeshProUGUI selectedRecipeName;
        public TextMeshProUGUI selectedRecipeDescription;
        public TextMeshProUGUI selectedRecipeCount;
        public GameObject craftButton;
        ItemData selectedRecipe;
        
        public void SelectRecipe(ItemData data)
        {
            selectedRecipe = data;
            selectedRecipeDescription.text = selectedRecipe.displayName;
            selectedRecipeDescription.text = selectedRecipe.description;
            craftButton.SetActive(true);
        }
    }

     

    Recipe.cs

    using UnityEngine;
    using UnityEngine.UI;
    
    
    public class RecipeSlot : MonoBehaviour
    {
        public ItemData item;
        public Image icon;
        private Outline outline;
        public UICraft craft;
        
    
        private void Awake() 
        {
            outline = GetComponent<Outline>();
            icon.sprite= item.icon;
        }
    
        public void OnClickButton()
        {
            craft.SelectRecipe(item);
        }
    }

     

     

    기존에 사용하고있는 ItemData는 만들 때 필요한 아이템 정보와 개수를 포함하고 있지 않았다.

    그렇다고 ItemData에서 정보를 가지지 않고 다른 스크립트에서 정보를 추가하려니 별로 좋아보이지는 않아서

    ItemData를 상속받는 RecipeData를 만들기로 했다.

     

    문제는 원래 RecipeData를 Dicitonary<string, int >로 선언하고 Inspector 상에서 정보를 세팅해줄 생각이였는데....

    딕셔너리는 기본적으로 유니티 인스펙터 창에 안 뜬다. 

    뭔가 추가 기능을 임포트하면 되기는 하지만 함부로 사용하기는 조금 그래서 더 좋은 생각 없나 고민해보려고 한다.

     

     

    지금까지 만들어둔 스크립트를 정리하자면 대략 이런 구조 인것 같다.

    잘 만들어지면 좋겠다..

    'TIL' 카테고리의 다른 글

    [TIL] C# Generic  (0) 2024.06.05
    [TIL] 제작 관련 기능을 만들기 2  (1) 2024.06.04
    [TIL] 게임에서 데이터 저장하기(직렬화, 역직렬화)  (0) 2024.05.31
    [TIL] 3D 프로젝트 정리  (1) 2024.05.30
    [TIL] UGUI  (0) 2024.05.29
Designed by Tistory.