218 lines
8.0 KiB
C#
218 lines
8.0 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
/// <summary>
|
|
/// 无人机视角显示
|
|
/// </summary>
|
|
public class DroneViewDisplay : MonoSingleton<DroneViewDisplay>
|
|
{
|
|
public Transform uiParent;
|
|
#region UI
|
|
/// <summary>
|
|
/// WRJUI集合
|
|
/// </summary>
|
|
public static List<RadioAngleView> radioAngleViews = new List<RadioAngleView>();
|
|
|
|
/// <summary>
|
|
/// 所有无人机RenderTexture集合
|
|
/// </summary>
|
|
public static List<RenderTexture> renderTextures = new List<RenderTexture>();
|
|
/// <summary>
|
|
/// UIPrefab
|
|
/// </summary>
|
|
[Header("UIPrefab")]
|
|
public GameObject prefabRadioAngleView;
|
|
/// <summary>
|
|
/// 放大显示
|
|
/// </summary>
|
|
[Header("放大显示")]
|
|
public Transform radioAngleViewMax;
|
|
/// <summary>
|
|
/// 放大显示无人机名称
|
|
/// </summary>
|
|
[Header("放大显示无人机名称")]
|
|
public Text textNmme;
|
|
/// <summary>
|
|
/// 放大显示关闭按钮
|
|
/// </summary>
|
|
[Header("放大显示关闭按钮")]
|
|
public Button btnClose;
|
|
/// <summary>
|
|
/// 放大显示视角显示RawImage
|
|
/// </summary>
|
|
[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; });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 显示UI
|
|
/// </summary>
|
|
/// <param name="unmannedAerialVehicleManage">无人机脚本</param>
|
|
/// <param name="isShow">是否显示</param>
|
|
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<RadioAngleView>();
|
|
if (radioAngleViewMain)
|
|
{
|
|
radioAngleViewMain.deviceID = unmannedAerialVehicleManage.equipmentCommon.deviceID;
|
|
radioAngleViewMain.textNmme.text = unmannedAerialVehicleManage.transform.name;
|
|
radioAngleViewMain.typeWRJ = unmannedAerialVehicleManage.wrjModel;
|
|
Mask mask = wrj.transform.GetComponentInChildren<Mask>();
|
|
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);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 其他非无人机设备生成RenderTexture
|
|
/// </summary>
|
|
/// <param name="deviceID"></param>
|
|
/// <param name="camera"></param>
|
|
/// <param name="rawImage"></param>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除无人机UI
|
|
/// </summary>
|
|
/// <param name="deviceID"></param>
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据deviceID返回RenderTexture
|
|
/// </summary>
|
|
/// <param name="deviceID"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 打开放大UI
|
|
/// </summary>
|
|
/// <param name="_textNmme"></param>
|
|
/// <param name="rawShow"></param
|
|
public void RadioAngleViewMaxShow(string _textNmme, RawImage _rawShow, WRJModel wRJModel)
|
|
{
|
|
rawShow.texture = null;
|
|
radioAngleViewMax.localScale = Vector3.one;
|
|
textNmme.text = _textNmme;
|
|
rawShow.texture = _rawShow.texture;
|
|
Mask mask = radioAngleViewMax.transform.GetComponentInChildren<Mask>();
|
|
if (mask)
|
|
mask.enabled = wRJModel == WRJModel.电子侦察无人机 ? true : false;
|
|
|
|
}
|
|
|
|
|
|
void OnDestroy()
|
|
{
|
|
for (int i = 0; i < renderTextures.Count; i++)
|
|
{
|
|
Destroy((RenderTexture)renderTextures[i]);
|
|
}
|
|
}
|
|
}
|