Unity编辑器下如何控制播放Animator
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍Unity编辑器下如何控制播放Animator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Unity编辑器的Scene视图进行控制播放Animator,可以
千家信息网最后更新 2025年12月01日Unity编辑器下如何控制播放Animator
这篇文章主要介绍Unity编辑器下如何控制播放Animator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
在Unity编辑器的Scene视图进行控制播放Animator,可以借助方法StartPlayback、StopPlayback、StartRecording和StopRecording,具体可以参照以下例子:

创建一个带Controller的Animator对象,可以看到此时人物呈现T型姿势。附上新脚本EditAnimator,此为空脚本,如下:
using UnityEngine;public class EditAnimator : MonoBehaviour {}创建一个这个脚本的编辑器类EditAnimatorInspector,代码如下:
using UnityEditor;using UnityEngine;[CustomEditor(typeof(EditAnimator))]public class EditAnimatorInspector : Editor{ /// /// 滑动杆的当前时间 /// private float m_CurTime; /// /// 是否已经烘培过 /// private bool m_HasBake; /// /// 当前是否是预览播放状态 /// private bool m_Playing; /// /// 当前运行时间 /// private float m_RunningTime; /// /// 上一次系统时间 /// private double m_PreviousTime; /// /// 总的记录时间 /// private float m_RecorderStopTime; /// /// 滑动杆总长度 /// private const float kDuration = 30f; private Animator m_Animator; private EditAnimator editAnimator { get { return target as EditAnimator; } } private Animator animator { get { return m_Animator ?? (m_Animator = editAnimator.GetComponent()); } } void OnEnable() { m_PreviousTime = EditorApplication.timeSinceStartup; EditorApplication.update += inspectorUpdate; } void OnDisable() { EditorApplication.update -= inspectorUpdate; } public override void OnInspectorGUI() { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Bake")) { m_HasBake = false; bake(); } if (GUILayout.Button("Play")) { play(); } if (GUILayout.Button("Stop")) { stop(); } EditorGUILayout.EndHorizontal(); m_CurTime = EditorGUILayout.Slider("Time:", m_CurTime, 0f, kDuration); manualUpdate(); } /// /// 烘培记录动画数据 /// private void bake() { if (m_HasBake) { return; } if (Application.isPlaying || animator == null) { return; } const float frameRate = 30f; const int frameCount = (int)((kDuration * frameRate) + 2); animator.Rebind(); animator.StopPlayback(); animator.recorderStartTime = 0; // 开始记录指定的帧数 animator.StartRecording(frameCount); for (var i = 0; i < frameCount - 1; i++) { // 这里可以在指定的时间触发新的动画状态 if (i == 200) { animator.SetTrigger("Dance"); } // 记录每一帧 animator.Update(1.0f / frameRate); } // 完成记录 animator.StopRecording(); // 开启回放模式 animator.StartPlayback(); m_HasBake = true; m_RecorderStopTime = animator.recorderStopTime; } /// /// 进行预览播放 /// private void play() { if (Application.isPlaying || animator == null) { return; } bake(); m_RunningTime = 0f; m_Playing = true; } /// /// 停止预览播放 /// private void stop() { if (Application.isPlaying || animator == null) { return; } m_Playing = false; m_CurTime = 0f; } /// /// 预览播放状态下的更新 /// private void update() { if (Application.isPlaying || animator == null) { return; } if (m_RunningTime > m_RecorderStopTime) { m_Playing = false; return; } // 设置回放的时间位置 animator.playbackTime = m_RunningTime; animator.Update(0); m_CurTime = m_RunningTime; } /// /// 非预览播放状态下,通过滑杆来播放当前动画帧 /// private void manualUpdate() { if (animator && !m_Playing && m_HasBake && m_CurTime < m_RecorderStopTime) { animator.playbackTime = m_CurTime; animator.Update(0); } } private void inspectorUpdate() { var delta = EditorApplication.timeSinceStartup - m_PreviousTime; m_PreviousTime = EditorApplication.timeSinceStartup; if (!Application.isPlaying && m_Playing) { m_RunningTime = Mathf.Clamp(m_RunningTime + (float)delta, 0f, kDuration); update(); } }} 检视器效果如下:

点击"Bake",可以看到此时人物姿势变成了动画状态的第一帧,如下所示:
拖动滑杆,即可播放当前时间的那一帧,如下所示:
点击"Play",即可以自动播放整个动画,如下所示:
最后,u3dnotes.com温馨提示:通过Unity3d的Wwindow->Animation窗口,可方便地在编辑器线下非运行时预览乃至编辑动画。xD
以上是"Unity编辑器下如何控制播放Animator"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
时间
动画
编辑器
状态
控制
脚本
人物
内容
姿势
滑杆
篇文章
滑动杆
运行
温馨
代码
价值
位置
例子
兴趣
对象
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我的世界服务器菜鸡
软件开发周期的组成
机关网络安全工作计划
专科计算机网络技术考研
网络安全协会张健
数据库新建表关键字
哪里的服务器带宽大
从学生的角度看网络安全
教资数据库技术应用及其特点
国防科技大学互联网大会
达梦7数据库dmdba默认密码
2016数据库系统工程师下午题
通信中客服端和服务器有什么区别
服务器 u数
Word页眉如何提取数据库
校园网络安全专题研讨
数据库的安全需求主要指
安装数据库能干嘛
一个单位的服务器数量
wow那个服务器人多
我的世界手机版服务器插件
无法安全地连接到服务器
软件开发组织管理文件
服务器每年付费给谁
数据库光标作用
定西移动公司网络技术岗位
封装数据库操作
服务器两个电源一起开吗
网络安全时事件
数据库收银系统概况