using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; [Serializable] public class FormationInfo { public int groupName; public List uavms = new List(); } /// /// 编队控制脚本 /// public class FormationManager : MonoSingleton { public Button startFormationBtn; public Button submitFormationBtn; public Button cancelFormationBtn; public bool isStartFormation; public List formationInfos = new List(); public FormationInfo formationInfo; // Start is called before the first frame update void Start() { startFormationBtn.onClick.AddListener(OnStartFormation); submitFormationBtn.onClick.AddListener(OnSubmit); cancelFormationBtn.onClick.AddListener(OnCancel); CheckBtns(0); } private void CheckBtns(int index) { startFormationBtn.gameObject.SetActive(index == 0); submitFormationBtn.gameObject.SetActive(index == 1); cancelFormationBtn.gameObject.SetActive(index == 1); } // Update is called once per frame void Update() { if (isStartFormation) { if (Input.GetKey(KeyCode.LeftControl) && Input.GetMouseButtonDown(0)) { if (EventSystem.current.IsPointerOverGameObject()) return; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo, 1000)) { if (hitInfo.collider.gameObject.tag == "WRJ") { UnmannedAerialVehicleManage uavmTemp = hitInfo.collider.gameObject.GetComponent(); if (uavmTemp != null && !uavmTemp.isGroup) { if (!formationInfo.uavms.Contains(uavmTemp)) { uavmTemp.isGroup = true; uavmTemp.groupId = formationInfo.groupName; formationInfo.uavms.Add(uavmTemp); } } Debug.Log("拾取"); } } } } } /// /// 设置组中得无人机所有航线 /// public void SetUAVMGroupAirRoute(int uavmGroupID, Vector3 pos, DistanceMeasurement _airRoute) { List uavms = new List(); for (int i = 0; i < formationInfos.Count; i++) { int indexI = i; if (formationInfos[indexI].groupName == uavmGroupID) { uavms = formationInfos[indexI].uavms; } } for (int j = 0; j < uavms.Count; j++) { if (!uavms[j].airRoute) { uavms[j].airRoute = _airRoute.gameObject; uavms[j].SetStartPos(_airRoute.PosPrefab); } uavms[j].positions.Enqueue(pos); } } /// /// 清除组内所有无人机得航线 /// /// public void RemoveUAMGroupAirRoute(int uavmGroupID) { List uavms = new List(); for (int i = 0; i < formationInfos.Count; i++) { int indexI = i; if (formationInfos[indexI].groupName == uavmGroupID) { uavms = formationInfos[indexI].uavms; } } for (int j = 0; j < uavms.Count; j++) { uavms[j].positions.Clear(); } } //public void SetAirRouteObj(int uavmGroupID, GameObject _airRoute) //{ // List uavms = new List(); // for (int i = 0; i < formationInfos.Count; i++) // { // int indexI = i; // if (formationInfos[indexI].groupName == uavmGroupID) // { // uavms = formationInfos[indexI].uavms; // } // } // for (int j = 0; j < uavms.Count; j++) // { // if (!uavms[j].airRoute) // { // uavms[j].airRoute = _airRoute; // } // } //} public void OnStartFormation() { isStartFormation = true; formationInfo = new FormationInfo(); formationInfo.groupName = formationInfos.Count; CheckBtns(1); } public void OnSubmit() { isStartFormation = false; if (formationInfo.uavms.Count > 0) { if (!formationInfos.Contains(formationInfo)) formationInfos.Add(formationInfo); } CheckBtns(0); } public void OnCancel() { formationInfo = null; CheckBtns(0); } }