유니티 C# 마우스로 UI 정보 가져오는 방법 간단 예시

반응형

유니티 C# 마우스로 UI 정보 가져오는 방법 간단 예시

MouseOverInfo.cs 작성

using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

[System.Serializable]
public class Item
{
    public string itemName;
    public Sprite itemIcon;
}

public class MouseOverInfo : MonoBehaviour
{
    public static MouseOverInfo instance;

    public GameObject infoPanel; // 정보 패널 (UI 요소)
    public Image icon;
    public TMP_Text infoText; // 정보 텍스트 (UI 요소)

    public int position = 100;

    private void Awake()
    {
        instance = this;
    }

    private void Start()
    {
        // 초기에는 정보 패널을 비활성화합니다.
        infoPanel.SetActive(false);
    }

    public void SetInfo(Item item)
    {
        infoPanel.SetActive(true);
        infoText.text = item.itemName;
        icon.sprite = item.itemIcon;
    }

    private void Update()
    {
        if(infoPanel.activeInHierarchy)
        {
            // 마우스 위치에 따라 정보 패널 위치를 조정합니다.
            Vector3 mousePosition = Input.mousePosition;
            infoPanel.transform.position = new Vector3(mousePosition.x + position, mousePosition.y - position, 0);
        }
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("asd");

        if(eventData.pointerEnter.GetComponent<InventorySlot>() != null)
        {
            // 정보 패널을 활성화하고, 정보를 설정합니다.
            infoPanel.SetActive(true);
            infoText.text = eventData.pointerEnter.GetComponent<InventorySlot>().item.itemName;
            icon.sprite = eventData.pointerEnter.GetComponent<InventorySlot>().item.itemIcon;

            // 마우스 위치에 따라 정보 패널 위치를 조정합니다.
            Vector3 mousePosition = Input.mousePosition;
            infoPanel.transform.position = new Vector3(mousePosition.x + 10, mousePosition.y - 10, 0);
        }
        else if (eventData.pointerEnter.GetComponent<ShopContent>() != null)
        {
            // 정보 패널을 활성화하고, 정보를 설정합니다.
            infoPanel.SetActive(true);
            infoText.text = eventData.pointerEnter.GetComponent<ShopContent>().item.itemName;
            icon.sprite = eventData.pointerEnter.GetComponent<ShopContent>().item.itemIcon;

            // 마우스 위치에 따라 정보 패널 위치를 조정합니다.
            Vector3 mousePosition = Input.mousePosition;
            infoPanel.transform.position = new Vector3(mousePosition.x + 10, mousePosition.y - 10, 0);
        }
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        // 정보 패널을 비활성화합니다.
        infoPanel.SetActive(false);
    }
}

 

UI 등록하기

    public void OnPointerEnter(PointerEventData eventData)
    {
        if (item.itemName.Length > 0)
        {
            MouseOverInfo.instance.SetInfo(item);
        }
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        MouseOverInfo.instance.infoPanel.SetActive(false);
    }

 

 

반응형