NewN_UAVPlane/Assets/Zion/Scripts/ModelFunction/Radar/RadarManger.cs

230 lines
6.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 雷达控制
/// </summary>
public class RadarManger : MonoBehaviour
{
/// <summary>
/// 是否正在预演
/// </summary>
public bool isStartRehearsing = false;
/// <summary>
/// 测试用
/// </summary>
public string msg;
/// <summary>
/// 测试接受数据
/// </summary>
private Weaponitemone weaponitemones;
/// <summary>
/// 雷达UI预制体
/// </summary>
public GameObject RadarUiPrefab;
/// <summary>
/// 雷达UI
/// </summary>
public GameObject RadarUi;
/// <summary>
/// 雷达动画
/// </summary>
public Animator aniRandar;
/// <summary>
/// 雷达UI动画播放
/// </summary>
public Animator aniRandarUI;
#region
/// <summary>
/// 转台转速
/// </summary>
public string TurntableSpeed;
/// <summary>
/// 探测距离
/// </summary>
public string DetectionRange;
/// <summary>
/// 近盲区
/// </summary>
public string NearBlindArea;
/// <summary>
/// 批量标处理能力
/// </summary>
public string BatchStandardProcessingCapability;
/// <summary>
/// 探测成功率
/// </summary>
public string DetectionSuccessRate;
/// <summary>
/// 最小探测速度
/// </summary>
public string MinimumDetectionVelocity;
/// <summary>
/// 距离分辨率
/// </summary>
public string RangeResolution;
/// <summary>
/// 方位分辨率
/// </summary>
public string AzimuthResolution;
/// <summary>
/// 方位波束宽度
/// </summary>
public string AzimuthBeamwidth;
/// <summary>
/// 俯仰波束宽度
/// </summary>
public string PitchBeamwidth;
#endregion
public float detectionRadius = 5f; // 检测范围半径
// Start is called before the first frame update
void Start()
{
weaponitemones = Newtonsoft.Json.JsonConvert.DeserializeObject<Weaponitemone>(msg);
FillInTheData(weaponitemones);
aniRandar = GetComponent<Animator>();
if (RadarUi == null)
{
CreateRadarUI();
}
//InvokeRepeating("RetrievalUAV", 1, 5);//测试用
}
// Update is called once per frame
void Update()
{
if (isStartRehearsing)
{
}
}
/// <summary>
/// 生成雷达UI
/// </summary>
void CreateRadarUI()
{
Transform canvas = GameObject.Find("Canvas").transform;
if (canvas)
{
GameObject _object= Instantiate(RadarUiPrefab, canvas);
RadarUi = _object;
RadarUi.transform.localScale = Vector3.zero;
aniRandarUI = RadarUi.GetComponent<Animator>();
RadarRotationSpeed(TurntableSpeed);
}
}
/// <summary>
/// 数据写入
/// </summary>
/// <param name="weaponitemone"></param>
public void FillInTheData(Weaponitemone weaponitemone)
{
for (int i = 0; i < weaponitemone.data.Count; i++)
{
switch (weaponitemone.data[i].para_name)
{
case "转台转速:":
TurntableSpeed = weaponitemone.data[i].para_value;
RadarRotationSpeed(TurntableSpeed);
break;
case "探测距离:":
DetectionRange = weaponitemone.data[i].para_value;
break;
case "近盲区:":
NearBlindArea = weaponitemone.data[i].para_value;
break;
case "批量标处理能力:":
BatchStandardProcessingCapability = weaponitemone.data[i].para_value;
break;
case "探测成功率:":
DetectionSuccessRate = weaponitemone.data[i].para_value;
break;
case "最小探测速度:":
MinimumDetectionVelocity = weaponitemone.data[i].para_value;
break;
case "距离分辨率:":
RangeResolution = weaponitemone.data[i].para_value;
break;
case "方位分辨率:":
AzimuthResolution = weaponitemone.data[i].para_value;
break;
case "方位波束宽度:":
AzimuthBeamwidth = weaponitemone.data[i].para_value;
break;
case "俯仰波束宽度:":
PitchBeamwidth = weaponitemone.data[i].para_value;
break;
default:
break;
}
}
}
/// <summary>
/// 雷达转动速度
/// </summary>
public void RadarRotationSpeed(string speed)
{
float newSpeed = float.Parse(speed);
if (newSpeed <= 0) return;
if (aniRandar)
{
aniRandar.speed = (1 / newSpeed); // 改变动画的播放速度为新速度值
}
if (aniRandarUI)
{
aniRandarUI.speed = (1 / newSpeed); // 改变动画的播放速度为新速度值
}
}
/// <summary>
/// 检索
/// </summary>
public void RetrievalUAV()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, detectionRadius); // 检索范围内的所有碰撞体
foreach (Collider col in colliders)
{
if (col.transform.tag == "WRJ")
{
UnmannedAerialVehicle unmannedAerialVehicle = col.GetComponent<UnmannedAerialVehicle>();
if (unmannedAerialVehicle)
{
//Debug.Log("检测到无人机: " + col.name);
LaserFireControlPlatformManger laserFireControlPlatformManger = LaserFireControlPlatformManger.laserFireControlPlatformMangers.Find(x=>(x!=null&&x.isLasing==false));
if (laserFireControlPlatformManger&& !laserFireControlPlatformManger.isLasing)
{
laserFireControlPlatformManger.targetPoint = col.transform;
laserFireControlPlatformManger.Lasing();
}
}
}
}
}
private void OnMouseEnter()
{
Debug.Log("鼠标进入");
RadarUi.transform.localScale = Vector3.one;
}
private void OnMouseExit()
{
Debug.Log("鼠标离开");
RadarUi.transform.localScale = Vector3.zero;
}
}