230 lines
6.5 KiB
C#
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;
|
|
}
|
|
|
|
}
|