static IEnumerator ShotAndReturnTransverselyLineBullets(GameObject bulletPrefab, Vector3 position, Quaternion rotation, int bulletsNumber, float angle, float spownTime) { List <GameObject> bullets = new List <GameObject>(); float length = Mathf.Tan(angle * Mathf.Deg2Rad / 2) * 2; //数字横行的长度 float eulerZ = rotation.eulerAngles.z; float startTime = Time.time; for (int i = 0; i < bulletsNumber; i++) { float currentX = length / (bulletsNumber - 1) * i - length / 2; Quaternion currentRotation = BarrageBase.GetAimRotation(Vector2.zero, new Vector2(currentX, 1)); currentRotation.eulerAngles = currentRotation.eulerAngles + new Vector3(0, 0, eulerZ); GameObject bullet = GetInactiveBullet(bulletPrefab, position, currentRotation); bullets.Add(bullet); BulletMoveUp move = bullet.GetComponent <BulletMoveUp>(); move.speed = move.speed * Mathf.Sqrt(1 + currentX * currentX); //因为到中心点的距离是1,那么所有点的速度比例就和距离相同,直接乘上就行 float expectedTime = spownTime / bulletsNumber * i; float elapsedTime = Time.time - startTime; if (expectedTime > elapsedTime) { yield return(new WaitForSeconds(expectedTime - elapsedTime)); } } yield return(bullets.ToArray()); }
private void Awake() { _bulletMove = GetComponent <BulletMoveUp>(); }