コード例 #1
0
    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());
    }
コード例 #2
0
 private void Awake()
 {
     _bulletMove = GetComponent <BulletMoveUp>();
 }