using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; /// /// 激光火控平台 /// public class LaserFireControlPlatformManger : MonoBehaviour { /// /// 所有激光火控平台 /// public static List laserFireControlPlatformMangers = new List(); /// /// 是否正在预演 /// public bool isStartRehearsing = false; /// /// 测试用 /// public string msg; /// /// 测试接受数据 /// private Weaponitemone weaponitemones; #region 激光火控平台数据 /// /// 储能间隔时间 /// public string StorageIntervalTime; /// /// 毁伤目标累积作用时间 /// public string CumulativeActionTimeOfDamageTarget; /// /// 干扰距离 /// public string InterferenceDistance; /// /// 干扰角度 /// 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(msg); FillInTheData(weaponitemones);//测试写入 //生成激光 GameObject _InnerLaserlineRenderer = Instantiate(InnerLaserlineRendererPrefab); _InnerLaserlineRenderer.transform.position = Vector3.zero; _InnerLaserlineRenderer.transform.SetParent(transform); InnerLaserlineRenderer = _InnerLaserlineRenderer.GetComponent(); GameObject _OuterLaserlineRenderer = Instantiate(OuterLaserlineRendererPrefab); _OuterLaserlineRenderer.transform.position = Vector3.zero; _OuterLaserlineRenderer.transform.SetParent(transform); OuterLaserlineRenderer = _OuterLaserlineRenderer.GetComponent(); //发射激光 //lineRenderer = gameObject.AddComponent(); // 在当前GameObject上添加LineRenderer组件 InnerLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2 OuterLaserlineRenderer.positionCount = 2; // 设置线段的端点数量为2 } // Update is called once per frame void Update() { } /// /// 数据写入 /// /// 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; } } } /// /// 发射激光 /// 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; // 用于指定需要检测的层级 /// /// 激光显示 /// 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); } /// /// 打击无人机 /// private void StrikeDrone(Transform hit) { if(hit.transform.tag== "WRJ") { UnmannedAerialVehicle unmannedAerialVehicle = hit.GetComponent(); if (unmannedAerialVehicle) { unmannedAerialVehicle.BeAssaulted("激光打击"); StartCoroutine(LaserExtinction()); } } } /// /// 隐藏激光 /// 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; } }