如何控制从Blender导出、随mesh一同导入Unity的动画
问题结论
你当前的操作不存在任何问题,Blender完成骨骼绑定、动画制作后导出FBX导入Unity是游戏、3D内容开发领域通用的标准工作流,完全不需要重新制作模型和动画。你查阅到的搭配Character Controller、Unity内制作动画的教程仅覆盖了特定使用场景,和你当前的外部导入动画控制需求不冲突。
导入动画控制实现方案
基础准备
- 确认导入的FBX中的动画Clip已正常拆分:选中FBX资源,在Inspector面板的Animation选项卡中可以查看、拆分、调整导入的动画片段,确认你需要控制的动画Clip名称正确。
- 为你的模型对象添加
Animator组件:若导入时Unity未自动添加,可在对象的Inspector面板点击Add Component搜索Animator手动添加。 - 创建Animator Controller资源:在Project窗口右键依次选择
Create > Animator Controller,双击打开Animator编辑窗口,将你需要控制的动画Clip拖入编辑窗口设为默认状态。 - 将创建好的Animator Controller资源拖入模型对象Animator组件的
Controller字段完成绑定。
控制脚本编写
新建C#脚本挂载到模型对象上,参考代码如下:
using UnityEngine; public class ExternalAnimControl : MonoBehaviour { private Animator targetAnimator; [Tooltip("动画播放速度:1为正常播放,0为暂停,-1为倒放")] public float playSpeed = 1f; // 替换为你实际的动画Clip名称 public string animClipName = "你的动画名称"; void Start() { targetAnimator = GetComponent<Animator>(); // 启动时默认播放动画 targetAnimator.Play(animClipName); } void Update() { // 同步播放速度到Animator组件 targetAnimator.speed = playSpeed; // 按键控制示例,可根据需求修改触发逻辑 // 按P播放/继续 if (Input.GetKeyDown(KeyCode.P)) { playSpeed = 1f; } // 按S暂停 if (Input.GetKeyDown(KeyCode.S)) { playSpeed = 0f; } // 按R倒放 if (Input.GetKeyDown(KeyCode.R)) { playSpeed = -1f; } // 按空格重置动画到起始位置 if (Input.GetKeyDown(KeyCode.Space)) { targetAnimator.Play(animClipName, 0, 0f); } } }
常见调整需求
- 若要关闭动画循环:选中对应动画Clip,在Inspector面板取消勾选Loop Time选项即可。
- 若需要控制多个动画切换:将所有需要用到的动画Clip都拖入Animator Controller窗口,需要切换时调用
targetAnimator.Play("目标动画Clip名称")即可。
内容的提问来源于stack exchange,提问作者user15177920
相关产品推荐
相关产品推荐

