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

按住按键时动画循环问题:射击时需重复播放动画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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:10:26