인프런 커뮤니티 질문&답변

공부하자님의 프로필 이미지

작성한 질문수

유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

아이템 장착 Pt.3 (EquippedItemSlot, UserInventoryData, InventoryUI)

스크롤에 아이템을 선택했을때 강조하는 효과는 어떻게 구현하면 될까요?

해결된 질문

24.09.15 08:10 작성

·

30

·

수정됨

0

안녕하세요.

인벤토리 스크롤 영역에 선택한 아이템을 강조하는 효과는 어떤식으로 구현하면 될지 궁금합니다.

강의를 본 뒤 선택한걸 강조하는 내용이 있나 돌아봤는데 해당 내용은 없는것 같아서요.

아이템을 선택하면 선택된 아이템을 강조하는 효과의

이미지를 활성화 시키려고 했는데 오브젝트를 재활용하는거다 보니 엉뚱한 오브젝트에 이미지가 활성화 되는데

어떤식으로 해야 좋은 구조로 선택표시를 할 수 있을지 알려주실 수 있으실까요?

답변 2

0

BurningCarrot님의 프로필 이미지
BurningCarrot
지식공유자

2024. 09. 17. 09:31

안녕하세요! BurningCarrot입니다. 문의해 주신 내용에 답변 드립니다.

 

  1. 일단 OnClickInventoryItemSlot 함수에서 선택 강조 효과를 활성화 해주면서 선택한 아이템의 SerialNumber값을 InventoryUI에 m_SelectedSerialNumber와 같은 변수에 저장해 줍니다. 당연히 InventoryUI에 m_SelectedSerialNumber 변수 선언이 필요합니다.

  2. 그리고 UpdateData(InfiniteScrollData scrollData) 함수에서 InventoryUI의 m_SelectedSerialNumber 값이 m_InventoryItemSlotData.SerialNumber와 같으면 선택 강조 효과 활성화 그렇지 않으면 비활성화 해주시면 될 것 같습니다.

    이렇게 하면 InventoryItemSlot 오브젝트가 재활용될 때 선택 강조 효과 처리가 정상적으로 될 것입니다.

공부하자님의 프로필 이미지
공부하자
질문자

2024. 09. 17. 23:38

안녕하세요.

말씀 주신 방법으로는 스크롤을 진행해야 제대로 업데이트 처리가 가능해 현재 보여지고 있는 아이템들은 업데이트를 따로 해주어야 하는데요

그래서 sort강의를 참고해서 갱신하려고 했지만 해당 방법이 아닌것 같아 다른 방법을 사용했습니다.
사용 후 원하는 결과가 나오지만
TLS Allocator ALLOC_TEMP_TLS라는 오류 메시지가 계속 나와 적절치 않은 방법인가 했는데
이 오류는 다른 방법으로 해결이 되네요.

일단 이렇게 해결이 가능하니 질문은 종료하겠습니다.

답변 달아주셔서 감사합니다~

0

인프런 AI 인턴님의 프로필 이미지

2024. 09. 15. 08:16

안녕하세요, 인프런 AI 인턴입니다. 공부하자님.

인벤토리 스크롤 영역에서 선택한 아이템을 강조하는 효과를 구현하는 방법에 대해 설명드리겠습니다.

선택한 아이템을 강조하는 일반적인 방법은 선택된 아이템의 배경색이나 테두리 색상을 변경하거나, 추가적인 강조 이미지를 활성화하는 것입니다. 아래의 단계를 통해 구현할 수 있습니다.

단계별 구현 방법

  1. 선택 아이템의 상태 관리:
    • 선택 여부를 관리할 변수를 선언합니다. 예를 들어, selectedItem 변수를 사용하여 현재 선택된 아이템을 저장할 수 있습니다.
   private GameObject selectedItem = null;
  1. 아이템 선택 시 강조 처리:
    • 아이템이 선택되었을 때 이전에 선택된 아이템의 강조를 해제하고, 새로 선택된 아이템을 강조합니다. 이를 위해 클릭 이벤트를 처리하는 함수를 작성합니다.
   public void OnItemClick(GameObject item)
   {
       // 이전에 선택된 아이템의 강조 해제
       if (selectedItem != null)
       {
           DeselectItem(selectedItem);
       }

       // 새로 선택된 아이템 강조
       SelectItem(item);
       selectedItem = item;
   }

   private void SelectItem(GameObject item)
   {
       // 강조 효과 적용 (예: 배경색 변경, 테두리 추가 등)
       item.GetComponent<Image>().color = Color.yellow; // 예시로 배경색을 노란색으로 변경
   }

   private void DeselectItem(GameObject item)
   {
       // 강조 효과 해제
       item.GetComponent<Image>().color = Color.white; // 기본 배경색으로 변경
   }
  1. 재활용 오브젝트 처리:
    • 재활용 오브젝트를 사용하는 경우, 각 오브젝트에 강조 효과를 적용하거나 해제할 때 주의해야 합니다. 선택된 아이템의 정보를 캐싱하거나, 오브젝트가 재활용될 때 상태를 초기화하는 로직을 추가합니다.
   void OnEnable()
   {
       if (selectedItem == gameObject)
       {
           SelectItem(gameObject);
       }
       else
       {
           DeselectItem(gameObject);
       }
   }

관련된 기존 답변들도 참고해보시면 도움이 될 것 같습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

공부하자님의 프로필 이미지
공부하자
질문자

2024. 09. 15. 17:35

코드를 따라해본건 아니지만 AI답변은 원하는 결과가 나오지 않을듯 하네요.

스크롤 영역에 노출되고 있는 오브젝트에 대한 처리가 제대로 안될것 같아요.

내가 선택한 아이템이 있고 현재 보이는 스크롤 영역에 다른 아이템을 누르면 기존 아이템 선택 해제는 안될것 같아서요.