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

Unity轻弹射门游戏:基于鼠标事件实现动画暂停与续播

Unity轻弹射门游戏动画控制实现方案

需求梳理

  • 按下鼠标左键(Input.GetMouseButtonDown(0))时,暂停玩家角色动画
  • 动画等待玩家完成鼠标拖动操作
  • 释放鼠标左键时,恢复动画播放,触发击球动作

现有代码补充与修改

你已经实现了按下鼠标时暂停动画的逻辑,只需补充释放鼠标时恢复动画的逻辑,即可完成完整流程:

1. 完善PlayerController中的动画控制方法

在PlayerController脚本中添加恢复动画的方法:

public Animator animator; // 确保已在Inspector面板中赋值玩家角色的Animator组件

public void OnMouseDownAnimationStart()
{
    // 按下鼠标时暂停动画
    animator.speed = 0;
}

public void OnMouseUpAnimationResume()
{
    // 释放鼠标时恢复动画播放
    animator.speed = 1;
    // 可选:如果需要触发击球专属动画,可以添加参数触发,比如
    // animator.SetTrigger("Shoot");
}

2. 修改主逻辑中的鼠标事件处理

在你的主控制脚本中,补充鼠标释放时的动画恢复调用:

if(_isShooting) {       // 球未进门或未击中门将时,允许球以当前速度飞行
    if( _enableTouch && !_isInTutorial ) {
        if(Input.GetMouseButtonDown(0)) {           // 鼠标按下阶段
            mouseBegin(Input.mousePosition);
            _playerController.OnMouseDownAnimationStart();
        }
        else if( Input.GetMouseButton(0) ) {            // 鼠标拖动阶段
            mouseMove(Input.mousePosition);
        }
        else if(Input.GetMouseButtonUp(0)) {    // 鼠标释放阶段
            // 先恢复动画,再执行击球逻辑,保证动作同步
            _playerController.OnMouseUpAnimationResume();
            mouseEnd();
        }
    }
    if(_isShoot) {
        Vector3 speed = _ballParent.InverseTransformDirection(_ball.velocity);
        speed.z = _zVelocity;
        _ball.velocity = _ballParent.TransformDirection(speed);
    }
}

关键逻辑说明

  • 暂停动画:通过animator.speed = 0让动画直接停在当前帧,不会重置播放进度
  • 恢复动画:设置animator.speed = 1后,动画会从暂停位置继续播放,完美衔接击球动作
  • 流程顺序:释放鼠标时先恢复动画,再执行mouseEnd()中的击球力度计算与球速设置,确保动画和击球逻辑同步触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:32:13