구현한 기능: 아이템 상호작용 및 사용
목적:
- 특정 아이템이 필요한 상황에서 플레이어의 인벤토리를 확인하여 해당 아이템이 있는지 검사하고, 있다면 그 아이템을 사용하거나 소모하는 기능을 구현하는 것
사용한 스크립트:
- 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 |