Files
XRLib/Assets/Scripts/UVC/input/MouseInputHandler.cs
2025-06-24 14:38:58 +09:00

80 lines
2.6 KiB
C#

using UnityEngine;
using UnityEngine.InputSystem;
namespace UVC.input
{
public class MouseInputHandler : MonoBehaviour
{
private MouseControls mouseControls;
private Camera mainCamera;
private GameObject lastHoveredObject = null;
private void Awake()
{
mainCamera = Camera.main;
mouseControls = new MouseControls();
}
private void OnEnable()
{
mouseControls.Player.Enable();
mouseControls.Player.Click.performed += OnClick;
}
private void OnDisable()
{
mouseControls.Player.Disable();
mouseControls.Player.Click.performed -= OnClick;
}
void Update()
{
// 마우스 위치로 Ray 발사
Ray ray = mainCamera.ScreenPointToRay(mouseControls.Player.Point.ReadValue<Vector2>());
RaycastHit hit;
GameObject currentHoveredObject = null;
if (Physics.Raycast(ray, out hit))
{
// Ray에 맞은 객체가 있을 경우
currentHoveredObject = hit.collider.gameObject;
}
// 마우스 오버/아웃 상태 변경 감지
if (currentHoveredObject != lastHoveredObject)
{
// 이전에 가리키던 객체가 있었다면 Mouse Out 이벤트 호출
if (lastHoveredObject != null)
{
// 여기에 Mouse Out 로직을 추가하세요.
Debug.Log("Mouse Out: " + lastHoveredObject.name);
// 예: lastHoveredObject.GetComponent<Renderer>().material.color = Color.white;
}
// 현재 가리키는 객체가 있다면 Mouse Over 이벤트 호출
if (currentHoveredObject != null)
{
// 여기에 Mouse Over 로직을 추가하세요.
Debug.Log("Mouse Over: " + currentHoveredObject.name);
// 예: currentHoveredObject.GetComponent<Renderer>().material.color = Color.red;
}
lastHoveredObject = currentHoveredObject;
}
}
private void OnClick(InputAction.CallbackContext context)
{
Debug.Log("Clicked");
// 현재 마우스가 가리키고 있는 객체가 있을 때만 클릭 이벤트 처리
if (lastHoveredObject != null)
{
// 여기에 Mouse Click 로직을 추가하세요.
Debug.Log("Clicked on: " + lastHoveredObject.name);
}
}
}
}