Exemple #1
0
    /// <summary>
    /// 激光
    /// </summary>
    /// <returns></returns>
    private IEnumerator ShowLaser(float delayTime)
    {
        LineRenderer[] renderer = gameObject.GetComponentsInChildren <LineRenderer>();
        float          allTime  = Time.time + delayTime;
        float          range    = 1.5f;
        float          time     = 0;
        bool           bX       = Random.Range(0, 100) > 50;
        bool           bY       = Random.Range(0, 100) > 50;

        // 如果是能量护盾,显示护盾
        if (TargetTrans_ != null)
        {
            if (TargetShip_.IsEnergyArmor())
            {
                TargetShip_.ShowEnergyArmor(delayTime);
            }
        }

        Vector3 attackPos = Vector3.zero;

        //if( AttackTrans_ != null )
        attackPos = AttackTrans_.position;

        // 这样处理是为了处理 施放船和目标船都在移动时,需要同时更新攻击点和受击点
        while (Time.time <= allTime)
        {
            for (int i = 0; i < renderer.Length; i++)
            {
                if (AttackTrans_ != null)
                {
                    attackPos = AttackTrans_.position;
                    renderer[i].SetPosition(0, attackPos);
                }
                // 激光扫射效果
                if (TargetTrans_ != null)
                {
                    if (TargetShip_.IsEnergyArmor())
                    {
                        // 有护盾时没有被攻击特效
                        Vector3 targetPos = TargetTrans_.position + new Vector3(bX ? (range * time) : 0, bY ? (range * time) : 0);
                        targetPos = TargetShip_.GetNewHurtPoint(attackPos, targetPos);
                        renderer[i].SetPosition(1, targetPos);
                    }
                    else
                    {
                        Vector3 targetPos = TargetTrans_.position + new Vector3(bX ? (range * time) : 0, bY ? (range * time) : 0);
                        renderer[i].SetPosition(1, targetPos);
                        if (time % Random.Range(0.1f, 0.3f) == 0)
                        {
                            Global.ShowHurtEffect(TargetTrans_, HurtEffect_, targetPos);
                        }
                    }
                }
            }
            time += Time.deltaTime;
            yield return(null);
        }
        StartCoroutine(WaitAndDestroy());
    }