Exemple #1
0
    /// <summary>
    /// 导弹
    /// </summary>
    /// <param name="delayTime"></param>
    /// <returns></returns>
    private IEnumerator ShowMissile(bool bLeft, float delayTime)
    {
        Vector3 secondPos = AttackTrans_.position + (AttackTrans_.forward * 10);
        Vector3 thirdPos  = TargetTrans_.position + (TargetTrans_.forward * 20);
        Vector3 lastPos   = TargetTrans_.position;
        // 为了让导弹显示的差异化,各种随机坐标
        bool bIsPlayer = AttackTrans_.position.z < TargetTrans_.position.z;

        // 敌人
        if (!bIsPlayer)
        {
            if (AttackTrans_.position.x > TargetTrans_.position.x)
            {
                secondPos += (AttackTrans_.right * Random.Range(0, 10));
                thirdPos  += (TargetTrans_.right * Random.Range(5, 8));
                lastPos   += (TargetTrans_.right * Random.Range(0, 3));
            }
            else
            {
                secondPos += (-AttackTrans_.right * Random.Range(0, 10));
                thirdPos  += (-TargetTrans_.right * Random.Range(5, 8));
                lastPos   += (-TargetTrans_.right * Random.Range(0, 3));
            }
        }
        // 玩家
        else
        {
            if (AttackTrans_.position.x > TargetTrans_.position.x)
            {
                secondPos += (-AttackTrans_.right * Random.Range(0, 10));
                thirdPos  += (-TargetTrans_.right * Random.Range(5, 8));
                lastPos   += (-TargetTrans_.right * Random.Range(0, 3));
            }
            else
            {
                secondPos += (AttackTrans_.right * Random.Range(0, 10));
                thirdPos  += (TargetTrans_.right * Random.Range(5, 8));
                lastPos   += (TargetTrans_.right * Random.Range(0, 3));
            }
        }
        // 如果敌人有护盾,显示护盾,修正最终目标位置
        if (TargetShip_.IsKineticEnergyDmg())
        {
            lastPos   = TargetShip_.GetNewHurtPoint(AttackTrans_.position, lastPos);
            thirdPos += TargetTrans_.forward * TargetShip_.GetShieldRadius() * 5;
        }
        // 随机时间,产生表现差异化
        delayTime += Random.Range(-0.5f, 0.5f);

        Vector3[] v3 = new Vector3[] { AttackTrans_.position, thirdPos, secondPos, lastPos };
        LeanTween.move(gameObject, v3, delayTime).setEase(LeanTweenType.linear).setOrientToPath(true);
        yield return(new WaitForSeconds(delayTime));

        if (TargetShip_ != null)
        {
            if (TargetShip_.IsKineticEnergyDmg())
            {
                TargetShip_.ShowKineticArmor();
            }
        }
        Global.ShowHurtEffect(TargetTrans_, HurtEffect_, lastPos);
        StartCoroutine(WaitAndDestroy(false));
    }