반응형
유니티 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);
}
반응형