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

명성님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

인벤토리 실습 #2

SetInfo를 이용한 아이템 이름 변경

작성

·

129

0

    public override void Init()
    {
        Bind<GameObject>(typeof(GameObjects));
        Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name;

        Get<GameObject>((int)GameObjects.ItemIcon).BindEvent((PointerEventData) => { Debug.Log($"아이템 클릭! {_name}"); });
    }    
public void SetInfo(string name)
    {
        _name = name;
    }

UI_Inven_Item에 있는 내용인데

UI_Inven에서

invenItem.SetInfo("집행검 어쩌구");

를 하면 UI_Inven_Item의 _name만 바꿔줬을 뿐인데
어떻게 Component의 값 까지 바뀌는거죠?

제가 생각할 떄는 SetInfo안에
Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name;

이 코드가 필요한거 같은데
어떻게 ItemNameText가 업데이트가 되는지 모르겠습니다.


 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
명성님의 질문에 대한 답변 드리겠습니다.

말씀하신 SetInfo 메소드는 _name 필드의 값을 바꿔주는 기능을 합니다. 그런데 UI에 있는 아이템의 이름은 어떻게 업데이트되는지 궁금해하시는 거군요. 일반적으로는 SetInfo를 호출한 후 UI 업데이트를 위해 추가적인 메소드를 호출해야 합니다.

예를 들어, 업데이트된 이름으로 UI 텍스트를 갱신하는 메소드를 만들어 볼 수 있겠죠. 아래와 같이 말이죠.

public void UpdateUI()
{
    Get<GameObject>((int)GameObjects.ItemNameText).GetComponent<Text>().text = _name;
}

이 메소드는 SetInfo가 호출된 이후에 명시적으로 호출되어야 하며, 이렇게 하면 UI에 있는 텍스트 컴포넌트가 새로운 이름으로 업데이트 됩니다.

하지만 코드 상에서는 UpdateUI 같은 메소드 호출이 보이지 않는다면, 다른 어딘가에서 이 작업을 수행하고 있는 것일 수 있습니다. 예를 들어, SetInfo 메소드가 호출될 때 이벤트를 트리거해서 해당 작업을 처리하는 리스너가 있을 수 있습니다. 또는 SetInfo 메소드 내부 또는 다른 어딘가에서 _name 필드가 할당될 때 이를 감지하고 자동으로 UI를 업데이트하는 구현이 숨겨져 있을 수도 있습니다.

제공해주신 코드만으로는 구체적인 실행 흐름을 알 수 없기 때문에, SetInfo 메소드 호출 후 어떻게 이름이 UI에 반영되는지 알기 위해서는 SetInfo가 호출되는 전체 컨텍스트 또는 UI 업데이트와 관련한 다른 코드 부분을 확인해야 할 것 같습니다.

명성님의 코드가 정상 작동하고 있다면 어딘가에서 위와 같은 UI 업데이트 작업이 이루어지고 있을 겁니다. 혹시 말씀주신 내용 이외에 관련 코드나 로직이 더 있다면 같이 살펴보는 것이 좋을 것 같습니다.

명성님의 프로필 이미지

작성한 질문수

질문하기