/// <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()); }