using System.Collections; using System.Collections.Generic; using UnityEngine; public class DistanceMeasurement : MonoBehaviour { public bool isPathCanBePlanned = false;//是否可以规划路径 public LineRenderer lineRenderer; // 用于绘制路径的线段渲染器 public Transform[] markers; // 存储所有标记点的数组 public GameObject PosPrefab; public UnmannedAerialVehicleManage unmannedAerialVehicleManage; void Start() { lineRenderer.positionCount = 0; } void Update() { if (isPathCanBePlanned) { if (Input.GetMouseButtonDown(0) && !IsPointerOverUI()) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { AddMarker(hit.point); } } if (Input.GetMouseButtonDown(1) && !IsPointerOverUI()) { ClearMarkers(); } } } bool IsPointerOverUI() { // 检测当前鼠标位置是否在UI上 return UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(); } void AddMarker(Vector3 position) { // 创建一个新的游戏对象作为标记点 GameObject go = Instantiate(PosPrefab); go.transform.position = position; // 将新的标记点添加到数组中 if (markers == null) { markers = new Transform[] { go.transform }; } else { Transform[] newMarkers = new Transform[markers.Length + 1]; markers.CopyTo(newMarkers, 0); newMarkers[markers.Length] = go.transform; markers = newMarkers; if (!unmannedAerialVehicleManage.isGroup) unmannedAerialVehicleManage.positions.Enqueue(go.transform.position); else { FormationManager.Instance.SetUAVMGroupAirRoute(unmannedAerialVehicleManage.groupId, go.transform.position, this); } go.transform.SetParent(transform); } // 根据新的标记点数组重新绘制路径 DrawPath(); } void DrawPath() { if (markers.Length < 2) { return; // 如果标记点不足两个,则不绘制路径 } // 将所有路径点存储到列表中 List pathPoints = new List(); for (int i = 0; i < markers.Length; i++) { pathPoints.Add(markers[i].position); } // 绘制路径 lineRenderer.positionCount = pathPoints.Count; lineRenderer.SetPositions(pathPoints.ToArray()); } void ClearMarkers() { if (markers != null) { Transform[] newmarkers = new Transform[1]; newmarkers[0] = markers[0]; for (int i = 1; i < markers.Length; i++) { Destroy(markers[i].gameObject); } markers = newmarkers; lineRenderer.positionCount = 0; if (unmannedAerialVehicleManage.groupId == -1) unmannedAerialVehicleManage.positions.Clear(); else FormationManager.Instance.RemoveUAMGroupAirRoute(unmannedAerialVehicleManage.groupId); } } }