using JTSystems; using UnityEngine; using UnityEngine.EventSystems; public class DetectFoldings : MonoBehaviour, IPointerUpHandler, IPointerClickHandler, IPointerDownHandler { [Header(" Settings ")] [SerializeField] private LayerMask detectLayers; [SerializeField] private bool playTesting; [SerializeField] private bool _includeInactiveInSearch = true; Camera mainCamera; private void Awake() { mainCamera = Camera.main; } public void OnPointerClick(PointerEventData eventData) { } public void OnPointerDown(PointerEventData eventData) { } /// /// 这里需要加判断 如果结束之类的需要返回 /// /// public void OnPointerUp(PointerEventData eventData) { if (true ) DetectClosestFolding(); } private void DetectClosestFolding() { Ray tapRay = mainCamera.ScreenPointToRay(Input.mousePosition); Physics.Raycast(tapRay, out RaycastHit hit, 50, detectLayers); if (hit.collider == null) return; Folding[] detectedFoldings = FindObjectsOfType(_includeInactiveInSearch); int closestFoldingIndex = -1; float minDistance = 5000; for (int i = 0; i < detectedFoldings.Length; i++) { Folding currentFolding = detectedFoldings[i]; float t = Vector3.Distance(hit.point, currentFolding.GetFoldingPosition()); if(t < minDistance) { minDistance = t; closestFoldingIndex = i; } } if (closestFoldingIndex >= 0) { Folding colsestFolding = detectedFoldings[closestFoldingIndex]; if (!colsestFolding.gameObject.activeInHierarchy) return; Paper currentPaper = colsestFolding.GetComponentInParent(); currentPaper.TryFold(colsestFolding); } } }