using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; [Serializable] public class FormationInfo { public int groupIndex; 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.groupIndex; uavmTemp.SetGroupTips(formationInfo.groupIndex); formationInfo.uavms.Add(uavmTemp); } } Debug.Log("拾取"); } } } } } /// /// 设置组中得无人机所有航线 /// public void SetUAVMGroupAirRoute(int uavmGroupID, Vector3 pos, DistanceMeasurement _airRoute) { List uavms = GroupUAVM(uavmGroupID); 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 = GroupUAVM(uavmGroupID); for (int j = 0; j < uavms.Count; j++) { uavms[j].positions.Clear(); } } /// /// 设置组 航线设置 /// public void SetGroupAttackByGroupID(int uavmGroupID, bool isOpen) { List uavms = GroupUAVM(uavmGroupID); for (int j = 0; j < uavms.Count; j++) { int index = j; if (isOpen) { uavms[index].RouteSettings(); if (uavms[index].airRoute) uavms[index].airRoute.transform.localScale = Vector3.one; } else { uavms[index].TurnOffCourseSettings(); if (uavms[index].airRoute) uavms[index].airRoute.transform.localScale = Vector3.zero; } } } public void SetGroupUAVMState(int uavmGroupID,int patternCut) { List uavms = GroupUAVM(uavmGroupID); for (int j = 0; j < uavms.Count; j++) { uavms[j].modeSwitch(patternCut); } } private List GroupUAVM(int uavmGroupID) { List uavms = new List(); for (int i = 0; i < formationInfos.Count; i++) { int indexI = i; if (formationInfos[indexI].groupIndex == uavmGroupID) { uavms = formationInfos[indexI].uavms; } } return uavms; } public void OnStartFormation() { isStartFormation = true; formationInfo = new FormationInfo(); formationInfo.groupIndex = formationInfos.Count; CheckBtns(1); } public void OnSubmit() { isStartFormation = false; if (formationInfo.uavms.Count > 0) { if (!formationInfos.Contains(formationInfo)) formationInfos.Add(formationInfo); } formationInfo = null; CheckBtns(0); } public void OnCancel() { formationInfo = null; CheckBtns(0); } }