[TIL] Unity - Hover - day 96

뭉크의 개발·2023년 12월 3일
0

Unity - Camp

목록 보기
64/70
post-thumbnail

🐧 들어가기 앞서

오늘은 빌드를 진행했는데,

시간에 맞춰서 급하게 작업하다보니

사용자에게 굉장히 불친절한 게임이 탄생했다.

UI에서 하버 기능을 조금 수정했는데, 마우스를 올리면 색상이 변하고, 텍스트가 나오게 제작했다.


🐧 오늘 배운 것

  • Hex 컬러를 이용하는 기능
public static Color HexToColor(string hex)
{
    hex = hex.Replace("#", "");
    byte a = 255;

    byte r = byte.Parse(hex.Substring(0, 2), NumberStyles.HexNumber);
    byte g = byte.Parse(hex.Substring(2, 2), NumberStyles.HexNumber);
    byte b = byte.Parse(hex.Substring(4, 2), NumberStyles.HexNumber);

    if(hex.Length == 8)
    {
        a = byte.Parse(hex.Substring(6, 2), NumberStyles.HexNumber);
    }

    return new Color32(r, g, b, a);
}
  • 버튼에 정보를 딕셔너리로 관리.
private Dictionary<Button, TMP_Text> buttonToTextMapping = new Dictionary<Button, TMP_Text>();
private Dictionary<Button, Color> originalButtonColors = new Dictionary<Button, Color>();
  • 버튼 초기화
public void InitializeButtonHoverEffect(Button button, TMP_Text btnText, string hexColor)
{
    Color hoverColor = HexToColor(hexColor);
    if (!buttonToTextMapping.ContainsKey(button))
    {
        buttonToTextMapping.Add(button, btnText);
        originalButtonColors.Add(button, button.image.color);
    }

    EventTrigger trigger = button.gameObject.AddComponent<EventTrigger>();

    var pointerEnter = new EventTrigger.Entry { eventID = EventTriggerType.PointerEnter };
    pointerEnter.callback.AddListener((e) => OnHoverEnter(button, hoverColor));
    trigger.triggers.Add(pointerEnter);

    var pointerExit = new EventTrigger.Entry { eventID= EventTriggerType.PointerExit };
    pointerExit.callback.AddListener((e) => OnHoverExit(button));
    trigger.triggers.Add(pointerExit);
}
  • 마우스 감지
private void OnHoverEnter(Button button, Color hoverColor)
{
    button.image.color = hoverColor;
    if(buttonToTextMapping.TryGetValue(button, out TMP_Text text))
    {
        text.gameObject.SetActive(true);
    }
}
  • 마우스 감지 해제
private void OnHoverExit(Button button)
{
    if(originalButtonColors.TryGetValue(button, out Color originColor))
    {
        button.image.color = originColor;
    }
    
    if(buttonToTextMapping.TryGetValue(button, out TMP_Text text))
    {
        text.gameObject.SetActive(false);
    }
}

🐧 기억할 것 & 진행

  • 마우스 올리기 전

  • 마우스 올린 후

0개의 댓글