如何为Unity粒子子弹添加射击冷却机制?
Unity粒子子弹添加射击冷却的实现方法
要给这个粒子子弹添加射击冷却,核心就是通过时间差判断限制触发频率,具体修改步骤如下:
1. 添加冷却相关变量
在脚本中新增两个变量,分别控制冷却时长和记录上次射击的时间:
// 射击冷却时间(可在Inspector面板调整) public float fireCooldown = 0.5f; // 记录上次完成射击的时间 private float lastFireTime = 0f;
2. 修改输入触发逻辑
在Update方法里,给鼠标左键的触发条件加上冷却判断,只有当当前时间与上次射击时间的间隔大于等于冷却时长时,才允许触发射击:
private void Update() { if (Input.GetKeyDown(KeyCode.Mouse0) && Time.time - lastFireTime >= fireCooldown) { particleSystem.Play(); // 更新上次射击时间为当前时间 lastFireTime = Time.time; } }
修改后的完整脚本
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BulletParticle : MonoBehaviour { public float damage = 10f; public ParticleSystem particleSystem; public GameObject spark; // 新增:射击冷却时间 public float fireCooldown = 0.5f; // 新增:记录上次射击时间 private float lastFireTime = 0f; List<ParticleCollisionEvent> colEvents = new List<ParticleCollisionEvent>(); private void Update() { // 加入冷却判断逻辑 if (Input.GetKeyDown(KeyCode.Mouse0) && Time.time - lastFireTime >= fireCooldown) { particleSystem.Play(); lastFireTime = Time.time; } } private void OnParticleCollision(GameObject other) { int events = particleSystem.GetCollisionEvents(other, colEvents); for (int i = 0; i < events; i++) { Instantiate(spark, colEvents[i].intersection, Quaternion.LookRotation(colEvents[i].normal)); } if (other.TryGetComponent(out enemy en)) { en.TakeDamage(damage); } } }
逻辑说明
Time.time是游戏从启动到当前的总运行时间(秒),每次触发射击后,我们把lastFireTime更新为当前时间。- 下次触发时,通过
Time.time - lastFireTime >= fireCooldown判断是否已经过了冷却期,只有满足条件才允许再次射击。 - 你可以在Unity编辑器的Inspector面板中调整
fireCooldown的值,快速测试不同的冷却效果。
内容的提问来源于stack exchange,提问作者Iceigloopenguin Plays
相关产品推荐
相关产品推荐

