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

Unity动画设置问题:如何在Any State中同时创建指向两个动画状态的Make Transition

在Unity动画状态机的Any State中添加多个过渡并实现点击切换

嘿,我来帮你搞定这个Unity动画状态机的问题!其实Any State完全支持添加任意多个过渡,你之前只能创建一个大概率是操作细节没注意到,跟着下面的步骤来就行:

第一步:给Any State添加多个过渡

  1. 打开你的Animator窗口,找到那个灰色的Any State节点
  2. 右键点击Any State,选择Make Transition,然后把这条线拖到male_idle_pant状态上松开,第一个过渡就创建好了
  3. 重点来了:不要去碰已经创建好的那条过渡,再次右键点击Any State,重复Make Transition操作,把线拖到male_move_run_sprint状态上,这样第二个过渡就搞定啦!

第二步:设置点击触发的过渡条件

要实现点击切换动画,得给过渡加控制条件,步骤如下:

  1. 在Animator窗口的Parameters面板里,点击+号,创建两个布尔型参数(比如命名为IsPanting和IsRunning)——用触发型参数也可以,但布尔型更适合持续状态的切换
  2. 分别选中两条过渡,在Inspector面板里做设置:
    • 选中到male_idle_pant的过渡:添加条件IsPanting == true,同时把Has Exit Time的勾选去掉(不然要等当前动画播完才会切换,点击触发不及时)
    • 选中到male_move_run_sprint的过渡:添加条件IsRunning == true,同样关掉Has Exit Time
    • 额外提醒:可以给过渡设置Fixed Duration为0,让切换更丝滑

第三步:写点击触发的脚本逻辑

最后写个简单的C#脚本,挂在带有Animator组件的角色对象上,绑定UI按钮的点击事件:

using UnityEngine;
using UnityEngine.UI;

public class AnimationTrigger : MonoBehaviour
{
    private Animator _anim;
    // 在Inspector里把对应的UI按钮拖进来
    public Button pantButton;
    public Button runButton;

    void Start()
    {
        _anim = GetComponent<Animator>();
        // 绑定点击事件
        pantButton.onClick.AddListener(SwitchToPant);
        runButton.onClick.AddListener(SwitchToRun);
    }

    void SwitchToPant()
    {
        // 切换状态时要把另一个状态的参数设为false,避免冲突
        _anim.SetBool("IsPanting", true);
        _anim.SetBool("IsRunning", false);
    }

    void SwitchToRun()
    {
        _anim.SetBool("IsRunning", true);
        _anim.SetBool("IsPanting", false);
    }
}

一些避坑提醒

  • 不要试图在已有的过渡上修改目标状态,每个过渡都是独立的,必须重复右键Any State创建新的
  • 如果过渡没生效,先检查参数名称是否和脚本里的一致,再看Has Exit Time有没有关掉
  • 要是两个过渡条件可能同时满足,可以在Animator窗口里拖动过渡的顺序,Unity会按从上到下的优先级判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:29:04