본문 바로가기
TIL

01.19(TIL-Unity)

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

 

구현한 기능: 아이템 상호작용 및 사용

목적:

  • 특정 아이템이 필요한 상황에서 플레이어의 인벤토리를 확인하여 해당 아이템이 있는지 검사하고, 있다면 그 아이템을 사용하거나 소모하는 기능을 구현하는 것

사용한 스크립트:

  • SW_ItemInteract

구현 코드:

더보기

public class SW_ItemInteract : MonoBehaviour, IInteractable_HT
{
    public SW_ItemData requiredItemData; // 필요한 아이템 데이터
    public GameObject actionUI; // 표시할 UI 오브젝트
    public string newTag; // 상호작용 후 변경할 태그

    public void OnInteract()
    {
        Interact();
    }

    private void Interact()
    {
        SW_Inventory inventory = SW_Inventory.instance;
        ItemSlot foundItem = inventory.FindItemSlotByDisplayName(requiredItemData.displayName);

        if (foundItem != null)
        {
            inventory.RemoveItem(foundItem);
            PerformRequiredAction();
            // 추가된 UI 표시 및 태그 변경 로직
        }
        else
        {
            // 실패 UI 표시
        }
    }

    private void PerformRequiredAction()
    {
        // 필요한 동작 구현
    }
}

사용 이유:

  • 게임 내에서 아이템을 사용하여 특정 작업을 수행하는 일반적인 상호작용 기능을 구현하여 게임의 인터랙티브 요소를 향상시키기 위함

 

트러블슈팅: 태그 동적 변경 문제 해결

  • 왜(Why): 오브젝트의 태그를 동적으로 변경하는 기능은 게임 내에서 오브젝트의 상태를 표시하고, 해당 상태에 따른 다양한 인터랙션을 가능하게 하는 중요한 기능입니다. 이 기능이 제대로 동작하지 않으면, 게임의 로직에 혼란을 초래할 수 있으며, 사용자 경험에도 부정적인 영향을 미칩니다.
  • 어떻게(How): 문제의 근본 원인을 파악하기 위해, 열거형 변수를 이용한 태그 변경 로직을 분석하였습니다. 이 과정에서, 열거형 변수를 인스펙터에서 수정하는 것이 실제 오브젝트의 태그에 반영되지 않는 문제를 발견하였습니다. 이를 해결하기 위해, 실제 오브젝트의 태그를 프로그래밍적으로 변경할 수 있는 방법을 모색하였습니다.
  • 무엇(What): public string newTag; 변수를 스크립트에 추가하여, 인터랙션이 성공적으로 수행된 후 적용될 새로운 태그를 저장할 수 있게 하였습니다. 그리고 PerformRequiredAction(); 메서드 내에서 gameObject.tag = newTag;를 사용하여 실제 오브젝트의 태그를 동적으로 변경하도록 구현하였습니다. 이 방법을 통해, 인스펙터에서 설정한 태그 변경이 실제 게임 오브젝트에도 반영되도록 수정할 수 있었습니다.

'TIL' 카테고리의 다른 글

01.23 (TIL-Unity)  (0) 2024.01.23
01.22 (TIL-Unity)  (0) 2024.01.22
01.18 (TIL-Unity)  (0) 2024.01.18
01.17 (TIL-Unity)  (0) 2024.01.17
01.16 (TIL-Unity)  (1) 2024.01.16