80 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|