using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// /// 无人机视角显示 /// public class DroneViewDisplay : MonoSingleton { public Transform uiParent; #region UI /// /// WRJUI集合 /// public static List radioAngleViews = new List(); /// /// 所有无人机RenderTexture集合 /// public static List renderTextures = new List(); /// /// UIPrefab /// [Header("UIPrefab")] public GameObject prefabRadioAngleView; /// /// 放大显示 /// [Header("放大显示")] public Transform radioAngleViewMax; /// /// 放大显示无人机名称 /// [Header("放大显示无人机名称")] public Text textNmme; /// /// 放大显示关闭按钮 /// [Header("放大显示关闭按钮")] public Button btnClose; /// /// 放大显示视角显示RawImage /// [Header("无线电探测放大显示视角显示RawImage")] public RawImage rawShow; #endregion // Start is called before the first frame update void Start() { renderTextures.Clear(); radioAngleViews.Clear(); transform.localScale = GlobalFlag.blueOrRed == 0 ? Vector3.one : Vector3.zero; btnClose.onClick.AddListener(() => { radioAngleViewMax.localScale = Vector3.zero; }); } /// /// 显示UI /// /// 无人机脚本 /// 是否显示 public void CreateUI(UnmannedAerialVehicleManage unmannedAerialVehicleManage, bool isShow) { if (unmannedAerialVehicleManage.equipmentCommon.deviceID.Length < 10) return; RadioAngleView radioAngleView = radioAngleViews.Find(x => x.deviceID == unmannedAerialVehicleManage.equipmentCommon.deviceID); if (radioAngleView) { radioAngleView.transform.SetAsFirstSibling(); // 移到父物体的第一个位置 radioAngleView.transform.localScale = Vector3.one; textNmme.text = unmannedAerialVehicleManage.transform.name; rawShow.texture = unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 ? unmannedAerialVehicleManage.dzWRJCamera.targetTexture : unmannedAerialVehicleManage.gxWRJCamera.targetTexture; } else { if (unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 || unmannedAerialVehicleManage.wrjModel == WRJModel.光学无人机) { GameObject wrj = Instantiate(prefabRadioAngleView, uiParent); wrj.transform.localScale = Vector3.zero; wrj.name = unmannedAerialVehicleManage.transform.name; wrj.transform.SetAsLastSibling();// 移到父物体的最后一个位置 RadioAngleView radioAngleViewMain = wrj.GetComponent(); if (radioAngleViewMain) { radioAngleViewMain.deviceID = unmannedAerialVehicleManage.equipmentCommon.deviceID; radioAngleViewMain.textNmme.text = unmannedAerialVehicleManage.transform.name; radioAngleViewMain.typeWRJ = unmannedAerialVehicleManage.wrjModel; Mask mask = wrj.transform.GetComponentInChildren(); if (mask) mask.enabled = unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 ? true : false; // 创建 RenderTexture RenderTexture renderTexture = new RenderTexture(500, 500, 0); renderTexture.name = unmannedAerialVehicleManage.equipmentCommon.deviceID; unmannedAerialVehicleManage.dzWRJCamera.targetTexture = renderTexture; unmannedAerialVehicleManage.gxWRJCamera.targetTexture = renderTexture; if (unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机) { unmannedAerialVehicleManage.dzWRJCamera.gameObject.SetActive(true); } else { unmannedAerialVehicleManage.gxWRJCamera.gameObject.SetActive(true); } radioAngleViewMain.rawShow.texture = unmannedAerialVehicleManage.wrjModel == WRJModel.电子侦察无人机 ? unmannedAerialVehicleManage.dzWRJCamera.targetTexture : unmannedAerialVehicleManage.gxWRJCamera.targetTexture; renderTextures.Add(renderTexture); radioAngleViews.Add(radioAngleViewMain); } } } } /// /// 其他非无人机设备生成RenderTexture /// /// /// /// public void CreateUI(string deviceID, Camera camera, RawImage rawImage) { if (deviceID.Length < 10) return; var v = renderTextures.Find(x => (x!=null&&x.name == deviceID)); if (v != null) return; RenderTexture renderTexture = new RenderTexture(500, 500, 0); renderTexture.name = deviceID; camera.targetTexture = renderTexture; rawImage.texture = renderTexture; renderTextures.Add(renderTexture); } /// /// 删除无人机UI /// /// public void DistroyUI(string deviceID) { if (deviceID.Length < 10) return; RadioAngleView radioAngleView = radioAngleViews.Find(x => x != null && x.deviceID == deviceID); if (radioAngleView) { Destroy(radioAngleView.gameObject); for (int i = 0; i < radioAngleViews.Count; i++) { if (radioAngleViews[i] == null) { radioAngleViews.RemoveAt(i); } } } RenderTexture renderTexture = renderTextures.Find(x => x != null && x.name.Contains(deviceID)); if (renderTexture) { Debug.Log("删除了" + renderTexture.name); Destroy(renderTexture); for (int i = 0; i < renderTextures.Count; i++) { if (renderTextures[i] == null) { renderTextures.RemoveAt(i); } } } } /// /// 根据deviceID返回RenderTexture /// /// /// public RenderTexture renderTextureTo(string deviceID) { RenderTexture radioAngleView = null; if (renderTextures.Count == 0) return null; for (int i = 0; i < renderTextures.Count; i++) { if (renderTextures[i] != null && renderTextures[i].name == deviceID) { radioAngleView = renderTextures[i]; return radioAngleView; } } return radioAngleView; } /// /// 打开放大UI /// /// /// (); if (mask) mask.enabled = wRJModel == WRJModel.电子侦察无人机 ? true : false; } void OnDestroy() { for (int i = 0; i < renderTextures.Count; i++) { Destroy((RenderTexture)renderTextures[i]); } } }