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

Unity俯视角2D游戏:如何让小球速度为0时停止动画?

解决方案

核心思路

要实现速度低于阈值时停止动画,需要实时检测小球的Rigidbody2D速度,并通过Animator参数控制状态切换,而非仅在碰撞时触发动画播放。

步骤1:配置Animator状态机

在Animator窗口中:

  • 添加布尔类型参数,命名为IsMoving
  • 设置idle到moving的过渡条件:IsMoving为true时触发
  • 设置moving到idle的过渡条件:IsMoving为false时触发
  • 关闭过渡的Has Exit Time,确保状态切换更灵敏

步骤2:修改BallMove脚本

替换原脚本为以下代码:

public class BallMove : MonoBehaviour
{
    public Rigidbody2D rb;
    public Animator animator;
    // 速度阈值,可根据游戏手感调整
    public float speedThreshold = 0.1f;

    void Update()
    {
        // 获取小球当前合速度的大小
        float currentSpeed = rb.velocity.magnitude;
        
        // 根据速度控制Animator状态切换
        animator.SetBool("IsMoving", currentSpeed > speedThreshold);
    }

    void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.CompareTag("Player") || other.gameObject.CompareTag("Collider"))
        {
            // 若需要碰撞时给小球加力,可在这里添加逻辑
            // 示例:rb.AddForce(other.contacts[0].normal * 5f, ForceMode2D.Impulse);
        }
    }
}

关键细节说明

  • rb.velocity.magnitude:直接获取2D刚体的合速度大小,无需单独检测x/y轴速度
  • 用Animator参数控制状态:相比直接调用animator.Play(),状态机过渡更灵活,可通过动画曲线或过渡混合时长实现减速效果
  • 阈值可调:speedThreshold设为0.1,可避免微小速度导致动画反复切换,提升游戏手感

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:40:25