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());
}
결과
'공부 > 유니티' 카테고리의 다른 글
[Unity] 툴팁 만들기 - part3. link 태그로 텍스트에 툴팁 넣기 (0) | 2025.05.22 |
---|---|
[Unity] 툴팁 만들기 - part1. 배치된 툴팁 (0) | 2025.05.21 |
[Unity] 백터의 내적과 외적 활용 - 적 탐색편 (0) | 2025.05.08 |
[Unity] Custom Editor - ReorderableList (0) | 2024.06.11 |
[Unity] 유니티 어트리뷰트 만들기 (0) | 2024.02.24 |