본문 바로가기

공부/유니티

[Unity] 툴팁 만들기 - part2. 런타임 중에 툴팁에 데이터 넣기

Part1. 에서는 배치된 툴팁에 있던 데이터만 툴팁에 적용시킬 수 있었다.

이 경우, 런타임 중에 값이 변하는 데이터는 툴팁에 적용하기 힘들었다. 

Part2. 에서는 런타임 중에 값이 바뀌는 데이터도 툴팁에 적용할 수 있도록 구현할 것이다.


우선, 툴팁의 데이터를 동적으로 바꾸는 것이기 때문에, TooltipData 클래스에 데이터를 수정할 수 있는 메서드를 만들어 주었다.

[System.Serializable]
public class TooltipData
{
    #region 데이터 수정
    internal void SetString(string key, string value)
    {
        _stringData[key] = value;
    }

    internal void SetSprite(string key, Sprite value)
    {
        _spriteData[key] = value;
    }
    #endregion
}

 

툴팁 트리거에 TooltipData가 직렬화되어 있고, 컴포넌트로 부착되어 있어 외부 클래스가 접근하기 편하기 때문에 TooltipTrigger 클래스에 각 타입의 데이터를 수정할 수 있는 메서드를 추가해주었다.

public class TooltipTrigger : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    [HideInInspector] public TooltipData tooltipData;
    
    public void SetText(string parameterName, string text)
    {
        if (tooltipData == null)
        {
#if UNITY_EDITOR
            Debug.LogError("TooltipData가 초기화되지 않았습니다.");
#endif
            return;
        }

        tooltipData.SetString(parameterName, text);
        TooltipManager.Instance.ReShow(this);
    }
}

 

위 코드에서 툴팁을 보여주는 것을 TolltipManager의 Show메서드가 아닌 ReShow메서드로 구현하였는데,

현재 보이고 있는 툴팁만 데이터를 수정할 수 있도록 강제하고 싶었기 때문이다.

public class TooltipManager : Singleton<TooltipManager>
{
    internal void ReShow(TooltipTrigger trigger)
    {
        if (_showTrigger != null && _showTrigger == trigger)
        {
            Show(trigger);
        }
    }
}

 

이제 툴팁의 내용을 수정하고 싶은 클래스에서 트리거의 SetText 메서드를 호출해주면 툴팁의 내용을 변경할 수 있다.

private void ApplyTooltip()
{
    _tooltip.SetText("BaseStat", GetBaseValue());
    _tooltip.SetText("DetailStat", GetTooltip());
}

결과