Ejemplo n.º 1
0
    // 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;
        }
        }
    }
Ejemplo n.º 2
0
    // 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;
        }
        }
    }
Ejemplo n.º 3
0
    /// <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();
        }
    }
Ejemplo n.º 4
0
    /// <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();
        }
    }
Ejemplo n.º 5
0
    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();
    }