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

Unity(C#)游戏射击系统如何实现射击间隔延迟?

Unity射击系统添加射击延迟的实现方法

这里提供两种实用的实现方式,都能轻松给射击系统加上间隔延迟:

方法一:基于Update的计时器跟踪

通过记录上次射击的时间点,每次在Update里检查当前时间与上次射击时间的差值,只有当差值超过设定延迟时,才允许触发下一次射击。

修改后的代码如下:

public GameObject bullet;
public Transform shotPoint;
// 可在Inspector面板调整的射击延迟(单位:秒)
public float fireDelay = 0.5f;
// 记录上次射击的时间点
private float lastShotTime;

void Update()
{
    // 检查鼠标左键按下,且当前时间与上次射击时间差大于设定延迟
    if (Input.GetMouseButton(0) && Time.time - lastShotTime >= fireDelay)
    {
        Instantiate(bullet, shotPoint.position, transform.rotation);
        // 更新上次射击时间为当前时间
        lastShotTime = Time.time;
    }
}

核心逻辑:Time.time是游戏运行的总时长,每次射击后更新lastShotTime,后续只有当时间差超过fireDelay时,才会触发下一次射击。

方法二:使用InvokeRepeating实现持续射击间隔

如果需要按住鼠标时自动持续射击且保持固定间隔,这种方法更简洁——用Unity的InvokeRepeating定时调用射击方法,松开鼠标时取消调用即可。

修改后的代码如下:

public GameObject bullet;
public Transform shotPoint;
public float fireDelay = 0.5f;

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        // 按下鼠标时立即射击一次,之后每隔fireDelay秒调用一次Shoot方法
        Shoot();
        InvokeRepeating("Shoot", fireDelay, fireDelay);
    }
    if (Input.GetMouseButtonUp(0))
    {
        // 松开鼠标时停止定时调用
        CancelInvoke("Shoot");
    }
}

void Shoot()
{
    Instantiate(bullet, shotPoint.position, transform.rotation);
}

核心逻辑:InvokeRepeating("Shoot", fireDelay, fireDelay)的三个参数分别是:要调用的方法名、第一次延迟调用的时间、后续每次调用的间隔时间。CancelInvoke用于停止定时调用,避免松开鼠标后继续射击。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:03:13