58 lines
2.3 KiB
C#
58 lines
2.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace UVC.input
|
|
{
|
|
public class InputHandler : MonoBehaviour
|
|
{
|
|
public Transform clickedObject;
|
|
|
|
// 프레임당 한 번씩 업데이트가 호출됩니다
|
|
void Update()
|
|
{
|
|
// 터치 입력 확인
|
|
if (UnityEngine.Input.touchCount > 0)
|
|
{
|
|
if (UnityEngine.Input.GetTouch(0).phase == TouchPhase.Began)
|
|
{
|
|
handleClick(UnityEngine.Input.GetTouch(0).position);
|
|
}
|
|
}
|
|
// 왼쪽 마우스 버튼 클릭 확인
|
|
if (UnityEngine.Input.GetMouseButtonDown(0))
|
|
{
|
|
handleClick(UnityEngine.Input.mousePosition);
|
|
}
|
|
}
|
|
|
|
void handleClick(Vector3 screenClickPosition)
|
|
{
|
|
// 클릭한 위치에서 카메라에 수직인 Ray를 그립니다
|
|
// Ray가 교차하는 첫 번째 객체를 캡처하기 위해 RayHit를 생성합니다
|
|
Ray ray = Camera.main.ScreenPointToRay(screenClickPosition);
|
|
RaycastHit rayHit;
|
|
if (Physics.Raycast(ray.origin, ray.direction, out rayHit))
|
|
{
|
|
Debug.Log($"Ray Origin: {ray.origin}, Direction: {ray.direction}");
|
|
if (rayHit.transform.tag == "Clickable")
|
|
{
|
|
// 클릭한 객체에 어떤 작업을 합니다.
|
|
clickedObject = rayHit.transform;
|
|
// 다음 클릭을 위해 ray와 rayHit을 재설정합니다.
|
|
ray = new Ray();
|
|
rayHit = new RaycastHit();
|
|
}
|
|
else if (clickedObject != null)
|
|
{
|
|
// 클릭한 객체의 y 위치에서 xz 축에 평면을 그립니다.
|
|
Plane xzPlane = new Plane(Vector3.up, clickedObject.position);
|
|
float distance; // 클릭과 평면이 교차 하는 지점을 찾습니다.
|
|
// 그리고 클릭한 객체를 새로운 위치로 이동합니다.
|
|
if (xzPlane.Raycast(ray, out distance))
|
|
{
|
|
clickedObject.position = ray.GetPoint(distance);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |