Unity编辑器下如何控制播放Animator
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍Unity编辑器下如何控制播放Animator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Unity编辑器的Scene视图进行控制播放Animator,可以
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
40岁 软件开发 学历有用吗
格力软件开发岗
走小路网络技术
达梦数据库用户安全属性
软件开发平台无需代码
c++ ado访问数据库
.net 数据库配置
山西工业软件开发定制价格
南充软件开发公司有电话的
甘肃图书馆百度数据库
深圳云科互联网科技有限公司
中国最厉害软件开发者是谁
lol韩服数据库
剑网三和服务器
后台如何获取数据库
是网络安全第一资源
如何做数据库
通信网络安全标语
网络安全 一法一规
生物学数据库题目
大学校网络安全教育问卷
linux虚拟机下切换数据库
扫描服务器ip所有端口
贵州网络安全技术提升网络安全
软件开发在国际上的市场分析
广州商侣APP软件开发公司
软件开发 技术选型原则
电子支付与网络安全期末试卷
非关系型数据库持久
计算机软件开发负责人简介