DetectFoldings.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using UnityEngine;
  2. using UnityEngine.EventSystems;
  3. public class DetectFoldings : MonoBehaviour, IPointerUpHandler, IPointerClickHandler, IPointerDownHandler
  4. {
  5. [Header(" Settings ")]
  6. [SerializeField] private LayerMask detectLayers;
  7. [SerializeField] private bool playTesting;
  8. [SerializeField] private bool _includeInactiveInSearch = true;
  9. Camera mainCamera;
  10. private void Awake()
  11. {
  12. mainCamera = Camera.main;
  13. }
  14. public void OnPointerClick(PointerEventData eventData)
  15. {
  16. }
  17. public void OnPointerDown(PointerEventData eventData)
  18. {
  19. }
  20. /// <summary>
  21. /// 这里需要加判断 如果结束之类的需要返回
  22. /// </summary>
  23. /// <param name="eventData"></param>
  24. public void OnPointerUp(PointerEventData eventData)
  25. {
  26. if (true )
  27. DetectClosestFolding();
  28. }
  29. private void DetectClosestFolding()
  30. {
  31. Ray tapRay = mainCamera.ScreenPointToRay(Input.mousePosition);
  32. Physics.Raycast(tapRay, out RaycastHit hit, 50, detectLayers);
  33. if (hit.collider == null)
  34. return;
  35. Folding[] detectedFoldings = FindObjectsOfType<Folding>(_includeInactiveInSearch);
  36. int closestFoldingIndex = -1;
  37. float minDistance = 5000;
  38. for (int i = 0; i < detectedFoldings.Length; i++)
  39. {
  40. Folding currentFolding = detectedFoldings[i];
  41. float t = Vector3.Distance(hit.point, currentFolding.GetFoldingPosition());
  42. if(t < minDistance)
  43. {
  44. minDistance = t;
  45. closestFoldingIndex = i;
  46. }
  47. }
  48. if (closestFoldingIndex >= 0)
  49. {
  50. Folding colsestFolding = detectedFoldings[closestFoldingIndex];
  51. if (!colsestFolding.gameObject.activeInHierarchy)
  52. return;
  53. Paper currentPaper = colsestFolding.GetComponentInParent<Paper>();
  54. currentPaper.TryFold(colsestFolding);
  55. }
  56. }
  57. }