Unity动画设置问题:如何在Any State中同时创建指向两个动画状态的Make Transition
在Unity动画状态机的Any State中添加多个过渡并实现点击切换
嘿,我来帮你搞定这个Unity动画状态机的问题!其实Any State完全支持添加任意多个过渡,你之前只能创建一个大概率是操作细节没注意到,跟着下面的步骤来就行:
第一步:给Any State添加多个过渡
- 打开你的
Animator窗口,找到那个灰色的Any State节点 - 右键点击Any State,选择
Make Transition,然后把这条线拖到male_idle_pant状态上松开,第一个过渡就创建好了 - 重点来了:不要去碰已经创建好的那条过渡,再次右键点击Any State,重复
Make Transition操作,把线拖到male_move_run_sprint状态上,这样第二个过渡就搞定啦!
第二步:设置点击触发的过渡条件
要实现点击切换动画,得给过渡加控制条件,步骤如下:
- 在Animator窗口的Parameters面板里,点击
+号,创建两个布尔型参数(比如命名为IsPanting和IsRunning)——用触发型参数也可以,但布尔型更适合持续状态的切换 - 分别选中两条过渡,在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
相关产品推荐
相关产品推荐

