using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using System.Linq; using AdamSync; using static InterfaceManager; using AdamThinkDevicesData; using Newtonsoft.Json; /// /// 无人机 /// public class UnmannedAerialVehicle : MonoBehaviour { public WRJModel wrjModel = WRJModel.无人机; /// /// 所属无人机蜂群 /// public UnmannedAerialVehicleManage unmannedAerialVehicleManage; /// /// 序列编号 /// public string serialNumber = ""; #region 无人机数据 /// /// 续航时间 /// public string batteryLife; /// /// 抗风等级 /// public string classificationWindResistance; /// /// 最大飞行速度 /// public string maximumFlyingSpeed; /// /// RCS /// public string RCS; /// /// 卫星定位频点 /// public string satellitePositioningFrequency; /// /// 数据链通信频点 /// public string dataLinkCommunicationFrequency; /// /// 电子侦察能力 /// public string electronicReconnaissanceCapability; /// /// 光学侦察能力 /// public string opticalReconnaissanceCapability; #endregion /// /// 飞行速度 /// public float FireSpeed = 20.0f; /// /// 检测范围半径 /// public float detectionRadius = 50; // /// /// 爆炸预制体 /// public GameObject explodePrefab; public TextMesh tips; /// /// 攻击目标 /// public Transform attackTarget; /// /// 炮弹 /// public GameObject bulletPrefab; public Transform bulletPoint; private void OnTriggerEnter(Collider other) { if (unmannedAerialVehicleManage.equipmentCommon.isPlayer && other.tag == "AttackTarget") { AddBao(other.transform); // 销毁objectToDestroy对象 BeAssaulted("攻击到目标"); } } /// /// 被攻击 /// /// public void BeAssaulted(string type) { AddBao(true); } /// /// 销毁单体无人机 /// public void AddBao(bool isPassMessage) { if (isPassMessage) { string nowData = GetSyncDis(); MyNetMQClient.instance.Send(nowData); //Debug.Log(nowData); //_ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", nowData)); //DeviceManager.Instance.send2roomStr.Enqueue(nowData); //MQTTManager.instance.SendData(MQTTManager.instance.DroneWasDestroyed, nowData); string currentTime = System.DateTime.Now.ToString(); string _log = currentTime + " " + unmannedAerialVehicleManage.equipmentCommon.equipmentType + "(" + unmannedAerialVehicleManage.equipmentCommon.deviceID + ")" + "编号" + serialNumber + "子无人机" + "自杀式攻击自爆了"; UploadLog(_log); } if(explodePrefab&&transform) { GameObject Bao = Instantiate(explodePrefab, transform); Bao.transform.localPosition = Vector3.zero; Bao.transform.SetParent(null); Bao.SetActive(true); } //DroneViewDisplay.Instance.DistroyUI(unmannedAerialVehicleManage.equipmentCommon.deviceID); DeviceManager.Instance.RemoveDevice(gameObject); Destroy(gameObject); } /// /// 销毁蓝方设备 /// /// void AddBao(Transform _transform) { //设备 EquipmentCommon _equipmentCommon = _transform.GetComponent(); if (_equipmentCommon) { string nowData = string.Format("{0},{1}", "SetToBeDestroyed", _equipmentCommon.deviceID); MyNetMQClient.instance.Send(nowData); //Debug.Log(nowData); //_ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", nowData)); //DeviceManager.Instance.send2roomStr.Enqueue(nowData); //MQTTManager.instance.SendData(MQTTManager.instance.SetToBeDestroyed, nowData); string currentTime = System.DateTime.Now.ToString(); string _log = currentTime + " " + unmannedAerialVehicleManage.equipmentCommon.equipmentType + "(" + unmannedAerialVehicleManage.equipmentCommon.deviceID + ")" + "编号" + serialNumber + "子无人机" + "攻击摧毁了" + _equipmentCommon.equipmentType + "(" + _equipmentCommon.deviceID + ")"; UploadLog(_log); WWWForm headers = new WWWForm(); headers.AddField("id", _equipmentCommon.deviceID); StartCoroutine(PostString(Url_Deletepracticedevicedetail, headers, data => { //Debug.Log(data); })); } //重点打击目标 HighPriorityTarget highPriorityTarget = _transform.GetComponent(); if (highPriorityTarget) { highPriorityTarget.BeAssaulted(atkPos, true); } GameObject Bao = Instantiate(explodePrefab, _transform); Bao.transform.localPosition = Vector3.zero; Bao.transform.SetParent(null); Bao.SetActive(true); if (_equipmentCommon) { DeviceManager.Instance.RemoveDevice(_transform.gameObject); Destroy(_transform.gameObject); } } /// ///上传日志 /// /// public void UploadLog(string _log) { List uploadLogMains = new List(); UploadLogMain uploadLogMain = new UploadLogMain(); uploadLogMain.PracticeId = GlobalFlag.practiceSubjectID; uploadLogMain.ThinkId = GlobalFlag.currentThinkId; string log = uploadLogMain.log = _log; uploadLogMains.Add(uploadLogMain); string uploadLogMainJson = JsonConvert.SerializeObject(uploadLogMains); WWWForm wWWForm = new WWWForm(); wWWForm.AddField("data", uploadLogMainJson); //Debug.Log(uploadLogMainJson); StartCoroutine(PostString(Url_Addpracticelog, wWWForm, data => { Debug.Log(data); })); } public LayerMask layerMask = new LayerMask(); public void CheckSatellitePositioningFrequency( string interferenceMode) { if (interferenceMode == "驱离") { transform.DOKill(); transform.LookAt(new Vector3(-500, 160, 1600)); transform.DOMove(new Vector3(-500, 160, 1600), 60); } else if (interferenceMode == "迫降") { transform.DOKill(); RaycastHit hit; if (Physics.Raycast(transform.position, Vector3.down, out hit, Mathf.Infinity, layerMask)) { if (hit.distance > 1f) { hit.point = new Vector3(hit.point.x, hit.point.y + 3, hit.point.z); transform.DOMove(hit.point, 6); } } } } private void OnBecameInvisible() { Debug.Log("测试"); } void OnDestroy() { attackTarget = null; StopCoroutine(RangedAttack()); transform.DOKill(); } /// /// 发起攻击 /// public void AttAck(Transform target) { if (attackTarget == null) { transform.DOKill(); attackTarget = target; //Debug.Log("开始攻击目标..:" + attackTarget.name); Vector3 _v3 = attackTarget.position; transform.DOLookAt(_v3, 0.1f).OnComplete(() => { if (wrjModel == WRJModel.光学无人机) { Debug.Log("光学无人机攻击"); StopCoroutine(RangedAttack()); StartCoroutine(RangedAttack()); } else { string nowData = GetSyncData(attackTarget); Debug.Log(nowData); MyNetMQClient.instance.Send(nowData); //_ = SyncCreateRoom.SendMessageAsync(string.Format("send2room {0}", nowData)); //DeviceManager.Instance.send2roomStr.Enqueue(nowData); //MQTTManager.instance.SendData(MQTTManager.instance.SingleDronePosition, nowData); float distance = Vector3.Distance(transform.position, attackTarget.position); transform.DOMove(attackTarget.position, distance / FireSpeed).SetEase(Ease.Linear).OnComplete(() => { //if (!attackTarget) //{ // //BeAssaulted("没有攻击到目标"); //} }); } }); } } Vector3 atkPos = new Vector3(); /// /// 远程攻击 /// public IEnumerator RangedAttack() { while (attackTarget) { Vector3 v3 = attackTarget.position; yield return new WaitForSeconds(5f); GameObject obj = Instantiate(bulletPrefab, bulletPoint.position, bulletPoint.rotation); obj.SetActive(true); obj.transform.DOMove(v3, 2).SetEase(Ease.Linear).OnComplete(() => { Destroy(obj); }); ShellBoom sb = obj.AddComponent(); sb.isPlayer = unmannedAerialVehicleManage.equipmentCommon.isPlayer; sb.onShellAttack.AddListener(() => { atkPos = sb.transform.position; AddBao(attackTarget.transform); Destroy(sb); }); } } /// /// 发起攻击 /// public void AttAck(Vector3 target) { transform.DOLookAt(target, 0.1f).OnComplete(() => { float distance = Vector3.Distance(transform.position, target); transform.DOMove(target, distance / FireSpeed).SetEase(Ease.Linear).OnComplete(() => { }); }); } /// /// 单个无人机被销毁 /// /// protected string GetSyncDis() { return string.Format("{0},{1},{2}", "DroneWasDestroyed", unmannedAerialVehicleManage.equipmentCommon.deviceID, serialNumber); } /// /// 无人机攻击目标传递 /// /// protected string GetSyncData(Transform attackTarget) { return string.Format("{0},{1},{2},{3},{4}", "SingleDronePosition", unmannedAerialVehicleManage.equipmentCommon.deviceID, attackTarget.position.x, attackTarget.position.y, attackTarget.position.z); } }