主要函数是bounds.IntersectRay
if (Input.GetMouseButtonDown(0) && (!GetComponent<Collider>() || !GetComponent<Collider>().enabled))
{
var ray = _camera.ScreenPointToRay(Input.mousePosition);
foreach (var meshRenderer in gameObject.GetComponentsInChildren<Renderer>(true))
{
if (meshRenderer.bounds.IntersectRay(ray))
{
_mouseButtonDownTime = Time.time;
onPointerDown?.Invoke(gameObject, new PointerEventData(EventSystem.current));
break;
}
}
}else if (Input.GetMouseButtonUp(0) && (!GetComponent<Collider>() || !GetComponent<Collider>().enabled))
{
var ray = _camera.ScreenPointToRay(Input.mousePosition);
foreach (var meshRenderer in gameObject.GetComponentsInChildren<Renderer>(true))
{
if (meshRenderer.bounds.IntersectRay(ray))
{
if (Time.time - _mouseButtonDownTime <= PointerClickTimeout)
{
onPointerClick?.Invoke(gameObject, new PointerEventData(EventSystem.current));
}
onPointerUp?.Invoke(gameObject, new PointerEventData(EventSystem.current));
break;
}
}
}