public void DropInSpawnLeave(Vector2 posA, Vector2 posB, Vector2 moveDelta, Vector2 targetDeltaA, Vector2 targetDeltaB, BulletSpawnDefinition defA, BulletSpawnDefinition defB)
    {
        Vector2 AMovePos = posA + moveDelta;
        Vector2 BMovePos = posB + moveDelta;

        Vector2 ATargetPos = AMovePos + targetDeltaA;
        Vector2 BTargetPos = BMovePos + targetDeltaB;

        DropInOut.Create(dropInOutPrefab, posA, AMovePos, posA, 10f, defA, ATargetPos);
        DropInOut.Create(dropInOutPrefab, posB, BMovePos, posB, 10f, defB, BTargetPos);
    }
    private void DropInSpawn2FansLeave(Vector2 posA, Vector2 posB, Vector2 moveDelta, Vector2 targetDeltaA, Vector2 targetDeltaB)
    {
        BulletSpawnDefinition clockwiseFan        = new FanSpawn(new FanSpawn(new SingleSpawn(new BulletSpawnPos(Vector2.zero, 0f, 2f, 0f)), 3, 60, 0f, center: false), 3, 30, 0.2f, center: false);
        BulletSpawnDefinition counterClockwiseFan = new FanSpawn(new FanSpawn(new SingleSpawn(new BulletSpawnPos(Vector2.zero, 0f, 2f, 0f)), 3, -60, 0f, center: false), 3, -30, 0.2f, center: false);

        Vector2 AMovePos = posA + moveDelta;
        Vector2 BMovePos = posB + moveDelta;

        Vector2 ATargetPos = AMovePos + targetDeltaA;
        Vector2 BTargetPos = BMovePos + targetDeltaB;

        DropInOut.Create(dropInOutPrefab, posA, AMovePos, posA, 10f, clockwiseFan, ATargetPos);
        DropInOut.Create(dropInOutPrefab, posB, BMovePos, posB, 10f, counterClockwiseFan, BTargetPos);
    }
    // Start is called before the first frame update
    void Start()
    {
        var pattern = new RepeatSpawn(SpawnPattern.InterleavedFan(15, 7, 0.5f, SpawnPattern.Single(2f)), 5, 1f);

        DropInOut.Create(dropInOutPrefab, transform.position, transform.position + Vector3.down * 10f, transform.position, 10, pattern, transform.position + Vector3.down * 15f);
    }