본문 바로가기
TIL

01.16 (TIL-Unity)

by 오랑이귀엽다 2024. 1. 16.

아이템 믹스 시스템:

  • 두 개의 아이템을 조합하여 새로운 아이템을 생성하는 ItemMix 스크립트의 구현.
  • 조합 로직 및 조합 가능 여부를 판단하는 방법.
  • 인벤토리 시스템과의 통합을 통해 사용자 인터페이스에서 아이템을 선택하고 조합하는 기능 추가

어제의 기능 구현에 이어서 아이템 믹스 시스템을 어느정도 구현했다. 

 

인벤토리에 사용한 코드

더보기

public void OnMixButton()
{
    // 'selectedItem'이 null이 아니며, 그 아이템의 타입이 'Normal'인 경우에만 조합 과정을 시작
    // 이는 조합이 가능한 아이템을 사용자가 선택했는지 확인하는 과정
    if (selectedItem != null && selectedItem.item.type == ItemType.Normal)
    {
        // 'mixingItem'이 null인 경우, 즉 아직 조합할 첫 번째 아이템이 선택되지 않았을 때
        if (mixingItem == null)
        {
            // 현재 선택된 아이템을 조합할 아이템으로 지정
            // 이 부분은 사용자가 조합을 위해 첫 번째 아이템을 선택했을 때의 동작을 나타냄
            mixingItem = selectedItem;
            Debug.Log("첫 번째 아이템 선택: " + mixingItem.item.displayName);
        }
        else
        {
            // 이미 하나의 아이템이 선택된 상태에서 다른 아이템을 선택한 경우,
            // 즉, 조합을 위해 두 번째 아이템을 선택한 경우의 동작을 나타냄
            Debug.Log("두 번째 아이템 선택 시도: " + selectedItem.item.displayName);

            // 선택된 아이템의 'dropPrefab'에서 'SW_ItemMix' 컴포넌트를 찾아 'mixScript' 변수에 할당
            // 'SW_ItemMix' 컴포넌트는 아이템의 조합 로직을 담당
            var mixScript = mixingItem.item.dropPrefab.GetComponent<SW_ItemMix>();

            // 'SW_ItemMix' 컴포넌트가 없다면, 즉, 조합 로직이 정의되어 있지 않다면 조합을 진행할 수 없다.
            if (mixScript == null)
            {
                Debug.Log("SW_ItemMix 컴포넌트를 찾을 수 없음");
                return;
            }

            // 조합이 가능한지 확인. 'CanMix' 메서드는 조합에 필요한 아이템이 모두 있는지 검사
            if (mixScript != null && mixScript.CanMix(new List<ItemSlot> { mixingItem, selectedItem }))
            {
                // 조합이 성공적으로 가능한 경우, 결과 아이템을 인벤토리에 추가
                AddItem(mixScript.resultItem);
                RemoveItem(mixingItem);
                RemoveSelectedItem();
                Debug.Log("아이템 조합 완료: " + mixScript.resultItem.displayName);
            }
            else
            {
                // 조합이 실패한 경우, 즉, 필요한 아이템이 없거나 다른 조건을 만족하지 못한 경우
                Debug.Log("조합 실패");
            }
            // 조합 시도 후, 다음 조합을 위해 'mixingItem'을 초기화.
            mixingItem = null;
        }
    }

 

기능을 사용한 목적

  1. 사용자 인터랙션 처리: OnMixButton 메서드는 사용자가 UI 상에서 조합 버튼을 클릭할 때 발생하는 인터랙션을 처리. 사용자의 입력에 반응하여 적절한 조치를 취하는 것은 게임 내에서 중요한 역할.
  2. 조합 로직 실행: 이 메서드는 사용자가 선택한 두 아이템의 조합 가능 여부를 검사하고, 가능한 경우 조합을 실행. 이는 게임 내 아이템 조합 시스템의 핵심 기능으로, 다양한 아이템의 조합을 통해 새로운 아이템을 얻는 데 사용.
  3. 게임 플레이 향상: 사용자가 게임 내에서 아이템을 조합하여 새로운 아이템을 얻거나, 특정 목표를 달성할 수 있게 함으로써 게임 플레이의 깊이와 재미를 증가.

 

아이템 믹스 스크립트 추가

더보기

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

public class SW_ItemMix : MonoBehaviour
{
    public List<SW_ItemData> requiredItems; // 조합에 필요한 아이템 목록을 저장. 조합을 위해 필요한 모든 아이템들이 포함
    public SW_ItemData resultItem; // 조합 결과로 얻게 될 유니크 아이템을 저장. 이 변수는 조합이 성공했을 때 플레이어가 받게 될 아이템을 나타냄

    // 조합 가능 여부를 판단하는 메서드
    public bool CanMix(List<ItemSlot> inventorySlots)
    {
        Debug.Log("CanMix 검사 시작"); // 조합 가능 여부 검사 시작을 알리는 로그
        foreach (var requiredItem in requiredItems) // 필요한 아이템 목록을 순회
        {
            bool found = false; // 현재 아이템이 인벤토리에 있는지 여부를 저장하는 플래그
            foreach (var slot in inventorySlots) // 인벤토리 슬롯을 순회
            {
                if (slot.item == requiredItem) // 인벤토리 슬롯에 필요한 아이템이 있는지 확인
                {
                    found = true; // 필요한 아이템을 찾았다면 found를 true로 설정
                    Debug.Log("필요한 아이템 발견: " + requiredItem.displayName); // 로그로 발견된 아이템을 알림
                    break; // 아이템을 찾았으므로 내부 루프를 종료
                }
            }
            if (!found) // 필요한 아이템을 찾지 못한 경우
            {
                Debug.Log("필요한 아이템 없음: " + requiredItem.displayName); // 로그로 필요한 아이템이 없음을 알림
                return false; // false를 반환하여 조합이 불가능하다고 알림
            }
        }
        Debug.Log("모든 필요 아이템이 인벤토리에 있음"); // 모든 필요 아이템이 있는 경우 로그를 통해 알림
        return true; // true를 반환하여 조합이 가능하다고 알림
    }
}

스크립트를 사용한 목적

  1. 조합 가능성 검사: CanMix 메서드는 주어진 아이템 목록이 특정 조합을 만족하는지 검사. 즉, 플레이어의 인벤토리에 조합에 필요한 모든 아이템이 있는지 확인하는 역할.
  2. 조합 규칙 정의: SW_ItemMix 스크립트는 게임 내에서 아이템 조합 규칙을 정의. 여기에는 어떤 아이템들이 조합되어야 하는지, 그리고 그 결과로 어떤 새로운 아이템이 생성되는지에 대한 정보가 포함.
  3. 게임 내 다양성과 복잡성 제공: 아이템 조합 시스템은 게임 내에서 다양성과 복잡성을 제공. 플레이어는 여러 아이템을 조합하여 새로운 아이템을 발견하고, 이를 통해 게임의 다른 측면을 탐험할 수 있다.

 

아이템 조합 기능을 사용한 이유와 향후 도움이 될 점

사용자 경험 향상: OnMixButtonSW_ItemMix를 사용함으로써 사용자가 게임 내에서 아이템을 조합하는 과정을 직접 경험하게 함으로써 게임 플레이에 더 많은 상호작용과 참여를 유도하며, 사용자에게 만족감을 줄 수 있다.

게임 디자인의 유연성: 스크립트를 사용함으로써 게임 디자이너와 개발자는 다양한 아이템 조합을 쉽게 구현하고 수정할 수 있다.

프로그래밍 기술 개발: 기능을 구현하면서 프로그래밍 기술, 특히 Unity와 C#에 대한 이해도를 높일 수 있다.

향후 프로젝트에 적용 가능: 아이템 조합 시스템은 다른 게임이나 애플리케이션에도 적용될 수 있다.

 

'TIL' 카테고리의 다른 글

01.18 (TIL-Unity)  (0) 2024.01.18
01.17 (TIL-Unity)  (0) 2024.01.17
01.15 (TIL-Unity)  (0) 2024.01.15
01.12 (TIL-Unity)  (0) 2024.01.12
01.11 (TIL-Unity)  (0) 2024.01.11