按住按键时动画循环问题:射击时需重复播放动画30次
解决射击动画循环播放30次(间隔0.15秒)的问题
核心逻辑:检测鼠标左键触发后,启动一个受控循环,按0.15秒间隔重复播放射击动画,直到完成30次(或弹匣耗尽),同时避免重复触发循环。
Unity C# 实现示例:
using UnityEngine; public class WeaponShoot : MonoBehaviour { [SerializeField] private Animator weaponAnimator; [SerializeField] private int magazineCapacity = 30; [SerializeField] private float shootInterval = 0.15f; private bool isShootingLoopActive; private int currentAmmo; void Start() { currentAmmo = magazineCapacity; } void Update() { // 左键按下时启动射击循环,需满足未在循环中、有弹药两个条件 if (Input.GetMouseButtonDown(0) && !isShootingLoopActive && currentAmmo > 0) { StartCoroutine(RunShootCycle()); } } IEnumerator RunShootCycle() { isShootingLoopActive = true; // 循环播放动画,直到打空弹匣或完成30次 for (int i = 0; i < magazineCapacity && currentAmmo > 0; i++) { weaponAnimator.SetTrigger("Shoot"); // 触发射击动画(替换为你实际的动画参数名) currentAmmo--; yield return new WaitForSeconds(shootInterval); } isShootingLoopActive = false; } }
关键细节说明:
isShootingLoopActive用来锁定循环,防止按住左键时重复触发多轮射击。- 用协程控制间隔比
InvokeRepeating更灵活,能随时根据弹药状态终止循环。 - 动画使用
SetTrigger而非SetBool,确保每次触发都能完整播放单段射击动画。
可选优化:
- 若需要按住左键持续射击,可将
Input.GetMouseButtonDown改为Input.GetMouseButton,但需额外加间隔判断避免触发过于频繁。 - 可添加换弹逻辑,在
currentAmmo为0时重置弹药并终止当前循环。
- 若需要按住左键持续射击,可将
内容的提问来源于stack exchange,提问作者DogWithDoodle
相关产品推荐
相关产品推荐

