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
相关产品推荐
相关产品推荐

