199 lines
6.7 KiB
C#
199 lines
6.7 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using DG.Tweening;
|
|
|
|
/// <summary>
|
|
/// 激光火控平台
|
|
/// </summary>
|
|
public class LaserFireControlPlatformManger : MonoBehaviour
|
|
{
|
|
/// <summary>
|
|
/// 所有激光火控平台
|
|
/// </summary>
|
|
public static List<LaserFireControlPlatformManger> laserFireControlPlatformMangers = new List<LaserFireControlPlatformManger>();
|
|
/// <summary>
|
|
/// 是否正在预演
|
|
/// </summary>
|
|
public bool isStartRehearsing = false;
|
|
|
|
/// <summary>
|
|
/// 测试用
|
|
/// </summary>
|
|
public string msg;
|
|
/// <summary>
|
|
/// 测试接受数据
|
|
/// </summary>
|
|
private Weaponitemone weaponitemones;
|
|
|
|
#region 激光火控平台数据
|
|
/// <summary>
|
|
/// 储能间隔时间
|
|
/// </summary>
|
|
public string StorageIntervalTime;
|
|
/// <summary>
|
|
/// 毁伤目标累积作用时间
|
|
/// </summary>
|
|
public string CumulativeActionTimeOfDamageTarget;
|
|
/// <summary>
|
|
/// 干扰距离
|
|
/// </summary>
|
|
public string InterferenceDistance;
|
|
/// <summary>
|
|
/// 干扰角度
|
|
/// </summary>
|
|
public string InterferenceAngle;
|
|
|
|
#endregion
|
|
|
|
#region 激光
|
|
public bool isLasing = false;
|
|
public GameObject LaserModer;
|
|
public GameObject LaserPoint;
|
|
public Transform targetPoint; // 锁定目标点的Transform组件
|
|
public GameObject InnerLaserlineRendererPrefab; // 用于绘制射线的LineRenderer组件
|
|
public GameObject OuterLaserlineRendererPrefab; // 用于绘制射线的LineRenderer组件
|
|
public LineRenderer InnerLaserlineRenderer; // 用于绘制射线的LineRenderer组件
|
|
public LineRenderer OuterLaserlineRenderer; // 用于绘制射线的LineRenderer组件
|
|
private Vector3 laserStartPoint = Vector3.zero;
|
|
private Vector3 laserEndPoint = Vector3.zero;
|
|
public float FireSpeed = 20.0f;//激光速度
|
|
#endregion
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
laserFireControlPlatformMangers.Add(this);
|
|
weaponitemones = Newtonsoft.Json.JsonConvert.DeserializeObject<Weaponitemone>(msg);
|
|
FillInTheData(weaponitemones);//测试写入
|
|
|
|
//生成激光
|
|
GameObject _InnerLaserlineRenderer = Instantiate(InnerLaserlineRendererPrefab);
|
|
_InnerLaserlineRenderer.transform.position = Vector3.zero;
|
|
_InnerLaserlineRenderer.transform.SetParent(transform);
|
|
InnerLaserlineRenderer = _InnerLaserlineRenderer.GetComponent<LineRenderer>();
|
|
|
|
GameObject _OuterLaserlineRenderer = Instantiate(OuterLaserlineRendererPrefab);
|
|
_OuterLaserlineRenderer.transform.position = Vector3.zero;
|
|
_OuterLaserlineRenderer.transform.SetParent(transform);
|
|
OuterLaserlineRenderer = _OuterLaserlineRenderer.GetComponent<LineRenderer>();
|
|
//发射激光
|
|
//lineRenderer = gameObject.AddComponent<LineRenderer>(); // 在当前GameObject上添加LineRenderer组件
|
|
InnerLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2
|
|
OuterLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
/// <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 "储能间隔时间:":
|
|
StorageIntervalTime = weaponitemone.data[i].para_value;
|
|
break;
|
|
case "毁伤目标累积作用时间:":
|
|
CumulativeActionTimeOfDamageTarget = weaponitemone.data[i].para_value;
|
|
break;
|
|
case "干扰距离:":
|
|
InterferenceDistance = weaponitemone.data[i].para_value;
|
|
break;
|
|
case "干扰角度:":
|
|
InterferenceAngle = weaponitemone.data[i].para_value;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发射激光
|
|
/// </summary>
|
|
public void Lasing()
|
|
{
|
|
if (targetPoint != null)
|
|
{
|
|
if (isLasing) return;
|
|
isLasing = true;
|
|
LaserModer.transform.DOLookAt(targetPoint.position, 0.3f).OnComplete(()=> {
|
|
|
|
laserStartPoint = LaserPoint.transform.position;
|
|
Debug.Log("目标点位..:"+targetPoint.position);
|
|
//laserEndPoint = Vector3.Lerp(laserStartPoint, targetPoint.position, FireSpeed * Time.deltaTime);
|
|
laserEndPoint = targetPoint.position;
|
|
CastRayAndRender();
|
|
});
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("没有目标");
|
|
}
|
|
}
|
|
|
|
public LayerMask layerMask; // 用于指定需要检测的层级
|
|
|
|
/// <summary>
|
|
/// 激光显示
|
|
/// </summary>
|
|
public void CastRayAndRender()
|
|
{
|
|
if (InnerLaserlineRenderer)
|
|
{
|
|
InnerLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
|
|
InnerLaserlineRenderer.SetPosition(1, laserEndPoint); // 设置线段终点为目标点
|
|
}
|
|
if (OuterLaserlineRenderer)
|
|
{
|
|
OuterLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
|
|
OuterLaserlineRenderer.SetPosition(1, laserEndPoint); // 设置线段终点为目标点
|
|
}
|
|
StrikeDrone(targetPoint.transform);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 打击无人机
|
|
/// </summary>
|
|
private void StrikeDrone(Transform hit)
|
|
{
|
|
if(hit.transform.tag== "WRJ")
|
|
{
|
|
UnmannedAerialVehicle unmannedAerialVehicle = hit.GetComponent<UnmannedAerialVehicle>();
|
|
if (unmannedAerialVehicle)
|
|
{
|
|
unmannedAerialVehicle.BeAssaulted("激光打击");
|
|
StartCoroutine(LaserExtinction());
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 隐藏激光
|
|
/// </summary>
|
|
public IEnumerator LaserExtinction()
|
|
{
|
|
yield return new WaitForSeconds(0.1f);
|
|
if (InnerLaserlineRenderer)
|
|
{
|
|
InnerLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
|
|
InnerLaserlineRenderer.SetPosition(1, laserStartPoint); // 设置线段终点为目标点
|
|
}
|
|
if (OuterLaserlineRenderer)
|
|
{
|
|
OuterLaserlineRenderer.SetPosition(0, laserStartPoint); // 设置线段起点为物体位置
|
|
OuterLaserlineRenderer.SetPosition(1, laserStartPoint); // 设置线段终点为目标点
|
|
}
|
|
isLasing = false;
|
|
}
|
|
}
|