74 lines
2.3 KiB
C#
Raw Normal View History

2025-09-08 14:51:28 +08:00
using UnityEngine;
using UnityEngine.EventSystems;
using ZXKFramework;
public class MouseDragObj : MonoBehaviour
{
private Vector3 screenPoint;
private Vector3 offset;
private Camera mCamera;
[HideInInspector]
public bool isDrag;
public float distance = 1f;
public bool lookat;
private void OnMouseDown()
{
if (EventSystem.current && EventSystem.current.IsPointerOverGameObject()) return;
isDrag = true;
if (!mCamera)
{
mCamera = Camera.main;
}
screenPoint = mCamera.WorldToScreenPoint(transform.position);
offset = transform.position - mCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
//λ<>ø<EFBFBD>ԭ
private void OnMouseUp()
{
isDrag = false;
if(TryGetComponent(out ResetPosRot reset))
{
reset.ResetGameObject();
}
}
private void OnMouseDrag()
{
if (isDrag && Input.GetMouseButton(0))
{
Ray ray = mCamera.ScreenPointToRay(Input.mousePosition); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
transform.position = ray.GetPoint(distance) + offset;
if(lookat) { transform.LookAt(mCamera.transform); }
if (TryGetComponent(out PC_DragEvent dragEvent))
{
dragEvent.stay?.Invoke(gameObject);
}
RaycastHit[] hits = Physics.RaycastAll(ray); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><E2B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
foreach (var hit in hits) // <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
{
if (hit.transform.TryGetComponent(out PC_TriggerEvent triggerEvent))
{
if (triggerEvent.trigger != null)
{
triggerEvent.trigger.Invoke(gameObject);
}
else
{
if (TryGetComponent(out PC_TriggerEvent triggerEvent_))
{
triggerEvent_.trigger?.Invoke(hit.transform.gameObject);
}
}
}
}
}
}
private void OnDisable()
{
isDrag = false;
if (TryGetComponent(out ResetPosRot reset))
{
reset.ResetGameObject();
}
}
}