You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D中如何一次性实例化多个预制体而非单个?

How to Instantiate Multiple Bullet Prefabs at Once When Pressing a Key in Unity

Currently, the code below only instantiates a single bullet prefab when pressing the E key. I need to modify it to instantiate multiple prefabs at once. How should I adjust the code?

Original code:

private void Update() { 
    if (Input.GetKey(KeyCode.E)) { 
        Shoot(); 
    } 
}
void Shoot() { 
    Instantiate(bullet, shootingpoint.position, transform.rotation); 
}

Solution 1: Instantiate a Fixed Number of Bullets

The simplest approach is to add a loop inside your Shoot() method to spawn multiple bullets in one go. I’ve added a public variable so you can tweak the bullet count directly in the Unity Inspector without editing code every time:

// Public variable to control bullet count easily in the Inspector
public int numberOfBullets = 3;

private void Update() { 
    // Use Input.GetKeyDown instead of GetKey for one burst per key press
    // GetKey will spawn bullets nonstop as long as E is held down
    if (Input.GetKeyDown(KeyCode.E)) { 
        Shoot(); 
    } 
}

void Shoot() { 
    // Loop to spawn the specified number of bullets
    for (int i = 0; i < numberOfBullets; i++) {
        Instantiate(bullet, shootingpoint.position, transform.rotation);
    }
}

Quick note: Swapping Input.GetKey to Input.GetKeyDown prevents spamming bullets every frame the key is held. If you want continuous spamming while holding E, stick with GetKey but consider adding a cooldown (see Solution 3) to avoid overwhelming the game.

Solution 2: Spawn Bullets in a Spread (Fan Shape)

For a more dynamic effect (like a shotgun blast), calculate slight rotation offsets to spread bullets out instead of spawning them all in the same direction:

public int numberOfBullets = 5;
public float spreadAngle = 30f; // Total width of the spread (e.g., 30° left to right)

private void Update() { 
    if (Input.GetKeyDown(KeyCode.E)) { 
        Shoot(); 
    } 
}

void Shoot() { 
    // Calculate angle gap between each bullet
    float angleStep = spreadAngle / (numberOfBullets - 1);
    // Start from the leftmost edge of the spread
    float currentAngle = -spreadAngle / 2f;

    for (int i = 0; i < numberOfBullets; i++) {
        // Adjust the bullet's rotation for the current spread angle
        Quaternion bulletRotation = transform.rotation * Quaternion.Euler(0, currentAngle, 0);
        // Spawn the bullet with the adjusted rotation
        Instantiate(bullet, shootingpoint.position, bulletRotation);
        // Move to the next angle in the spread
        currentAngle += angleStep;
    }
}

Solution 3: Continuous Burst Fire with Cooldown

If you want to keep spawning bursts of bullets while holding E but control how often each burst happens, add a cooldown timer:

public int numberOfBulletsPerBurst = 3;
public float burstCooldown = 0.5f; // Time (in seconds) between each burst
private float cooldownTimer = 0f;

private void Update() { 
    // Count down the cooldown timer every frame
    cooldownTimer -= Time.deltaTime;

    // Trigger a burst only if E is held and the cooldown is over
    if (Input.GetKey(KeyCode.E) && cooldownTimer <= 0f) { 
        Shoot();
        // Reset the cooldown timer
        cooldownTimer = burstCooldown;
    } 
}

void Shoot() { 
    for (int i = 0; i < numberOfBulletsPerBurst; i++) {
        Instantiate(bullet, shootingpoint.position, transform.rotation);
    }
}

内容的提问来源于stack exchange,提问作者inzmam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:27:37