// Update is called once per frame void Update() { switch (AmmoState) { case AmmoType.GenZongDan: { float mvDis = AmmoSpeed * Time.deltaTime; if (Vector3.Distance(GenZongTr.position, transform.position) <= mvDis) { //子弹击中目标. NpcController npcCom = GenZongTr.GetComponent <NpcController>(); if (npcCom != null) { npcCom.OnDaoDanHit(transform.position); } OnDestroyThis(); return; } Vector3 vecForward = Vector3.Normalize(GenZongTr.position - transform.position); transform.position += vecForward * mvDis; transform.forward = Vector3.Lerp(transform.forward, vecForward, 15f * Time.deltaTime); break; } case AmmoType.YuLei: { CheckAmmoOverlapSphereHit(AmmoCoreTr); break; } } }
// Update is called once per frame void Update() { if (!IsNetControlPort) { return; } switch (AmmoState) { case AmmoType.GenZongDan: { float mvDis = AmmoSpeed * Time.deltaTime; if (Vector3.Distance(GenZongTr.position, transform.position) <= mvDis) { //子弹击中目标. NpcController npcCom = GenZongTr.GetComponent <NpcController>(); if (npcCom != null) { npcCom.OnDaoDanHit(transform.position); } PlayerController playerCom = GenZongTr.GetComponent <PlayerController>(); if (playerCom != null && IsNetControlPort) { playerCom.OnAmmoHitPlayer(); } OnDestroyThis(); return; } Vector3 vecForward = Vector3.Normalize(GenZongTr.position - transform.position); transform.position += vecForward * mvDis; transform.forward = Vector3.Lerp(transform.forward, vecForward, 15f * Time.deltaTime); break; } case AmmoType.YuLei: { CheckAmmoOverlapSphereHit(AmmoCoreTr); break; } case AmmoType.DiLei: { if (Network.peerType == NetworkPeerType.Client || Network.peerType == NetworkPeerType.Server) { if (AmmoCoreTr != null) { mNetViewCom.RPC("RpcNetSynAmmoCorePosition", RPCMode.Others, AmmoCoreTr.position); } } break; } } }
/// <summary> /// 检测子弹的范围碰撞. /// </summary> void CheckAmmoOverlapSphereHit(Transform posTr = null) { bool isDestroyAmmo = false; Vector3 pos = posTr == null ? transform.position : posTr.position; Collider[] hits = Physics.OverlapSphere(pos, ShaShangDis, AmmoHitLayer); for (int i = 0; i < hits.Length; i++) { // Don't collide with triggers if (hits[i].isTrigger) { continue; } DaoJuCtrl daoJuCom = hits[i].GetComponent <DaoJuCtrl>(); if (daoJuCom != null && daoJuCom.DaoJuState == DaoJuCtrl.DaoJuType.ZhangAiWu) { daoJuCom.OnDestroyThis(); isDestroyAmmo = true; } NpcController npcCom = hits[i].GetComponent <NpcController>(); if (npcCom != null) { npcCom.OnDaoDanHit(transform.position); isDestroyAmmo = true; } npcScript npcSp = hits[i].GetComponent <npcScript>(); if (npcSp != null) { npcSp.OnDestroyThis(); isDestroyAmmo = true; } } if (isDestroyAmmo) { OnDestroyThis(); } }
/// <summary> /// 检测子弹的范围碰撞. /// </summary> void CheckAmmoOverlapSphereHit(Transform posTr = null) { bool isDestroyAmmo = false; Vector3 pos = posTr == null ? transform.position : posTr.position; Collider[] hits = Physics.OverlapSphere(pos, ShaShangDis, AmmoHitLayer); for (int i = 0; i < hits.Length; i++) { // Don't collide with triggers if (hits[i].isTrigger) { continue; } DaoJuCtrl daoJuCom = hits[i].GetComponent <DaoJuCtrl>(); if (daoJuCom != null && daoJuCom.DaoJuState == DaoJuCtrl.DaoJuType.ZhangAiWu) { if (PlayerController.GetInstance() != null) { PlayerController.GetInstance().NetSendAmmoHitZhangAiWuInfo(daoJuCom); } daoJuCom.OnDestroyThis(); isDestroyAmmo = true; } NpcController npcCom = hits[i].GetComponent <NpcController>(); if (npcCom != null) { npcCom.OnDaoDanHit(transform.position); isDestroyAmmo = true; } npcScript npcSp = hits[i].GetComponent <npcScript>(); if (npcSp != null) { npcSp.OnDestroyThis(); isDestroyAmmo = true; break; } PlayerController playerScript = hits[i].GetComponent <PlayerController>(); if (playerScript != null && IsNetControlPort) { playerScript.OnAmmoHitPlayer(); } } if (AmmoState == AmmoType.DiLei || AmmoState == AmmoType.TankPaoDan) { //地雷和坦克炮弹强制删除. isDestroyAmmo = true; } if (!IsNetControlPort) { //非主控制端时,由主控制端来删除网络子弹. isDestroyAmmo = false; } if (isDestroyAmmo) { OnDestroyThis(); } }
void MoveAmmoOnCompelteITween() { switch (AmmoState) { case AmmoType.PuTong: { if (mAmmoInfo.AimTr != null) { DaoJuCtrl daoJuCom = mAmmoInfo.AimTr.GetComponent <DaoJuCtrl>(); if (daoJuCom != null && daoJuCom.DaoJuState == DaoJuCtrl.DaoJuType.ZhangAiWu) { //障碍物爆炸. if (PlayerController.GetInstance() != null) { PlayerController.GetInstance().NetSendAmmoHitZhangAiWuInfo(daoJuCom); } daoJuCom.OnDestroyThis(); } } break; } case AmmoType.TankPaoDan: { CheckAmmoOverlapSphereHit(); break; } case AmmoType.DiLei: { if (mAmmoInfo.AimTr != null) { DaoJuCtrl daoJuCom = mAmmoInfo.AimTr.GetComponent <DaoJuCtrl>(); if (daoJuCom != null && daoJuCom.DaoJuState == DaoJuCtrl.DaoJuType.ZhangAiWu) { //障碍物爆炸. if (PlayerController.GetInstance() != null) { PlayerController.GetInstance().NetSendAmmoHitZhangAiWuInfo(daoJuCom); } daoJuCom.OnDestroyThis(); } NpcController npcCom = mAmmoInfo.AimTr.GetComponent <NpcController>(); if (npcCom != null) { npcCom.OnDaoDanHit(transform.position); } PlayerController playerCom = mAmmoInfo.AimTr.GetComponent <PlayerController>(); if (playerCom != null && IsNetControlPort) { playerCom.OnAmmoHitPlayer(); } } else { CheckAmmoOverlapSphereHit(); } break; } } OnDestroyThis(); }