Unity的动画重新播放/暂停/继续播放(Animation/Animator)解决动画像播电影一样上一步下一步的播放问题
一. 重新播放
Animator.Play(state, layer, normalizedTime)
normalizedTime值得范围是0-1,当normalizedTime
为0时就可以做到重播的效果
通过设置normalizedTime的值可以做到让动画从某一个位置播放(解决动画上一步下一步的播放问题)
layer
是从0开始的
比如有一个叫“hit”的动画,在layer 0
层中
则
animator.Play("hit", 0, 0f);
二. 暂停和继续播放
1. Animotor
// 播放 animator.Play("ani_name");
//animator.SetBool(isPlay,true)//切换动画状态机,的方式播放动画 // 暂停 animator.speed = 0; // 继续播放 animator.speed = 1;
2. Animation
// 播放 animition.Play("ani_name"); // 暂停 animition["ani_name"].speed = 0; // 继续播放 animition["ani_name"].speed = 1;
三、从动画某一帧开始播放
//当前动画机播放时长
currentTime = anim.GetCurrentAnimatorStateInfo(0).normalizedTime;
//动画片段长度
float length = anim.GetCurrentAnimatorClipInfo(0)[0].clip.length;
//获取动画片段帧频
float frameRate = anim.GetCurrentAnimatorClipInfo(0)[0].clip.frameRate;
//计算动画片段总帧数
float totalFrame = length / (1 / frameRate);
//计算当前播放的动画片段运行至哪一帧
int currentFrame = (int)(Mathf.Floor(totalFrame * clipTime) % totalFrame);(
clipTime改为currentTime
) Debug.Log(" Frame: " + currentFrame + “/” + totalFrame);
///从某一帧开始播放动画 public void OnPlayAnimatorFromFrame(string stateName,float frame) { anim.Play(stateName,0,frame); playSpeed=1; } void OnClick() { if(!animInfo.IsName("idel")) { var frame=frameTemp/TotleFrame;//frameTemp为当前位置的帧值,在配置表中获取;TotleFrame为当前动画总帧数 if(frame>=0&&frame<1) { OnPlayAnimatorFromFrame(anim.GetCurrentAnimatorClipInfo(0)[0].clip.name,frame); } } }
四、进度条控制动画 播放
public Slider AnimatorSlider; void Start() { AnimatorSlider.onValueChanged.AddListener(OnSliderController); } void OnSliderController(float value) { if(anim!=null&&!animInfo.IsName("idel"))
{
OnAnimatorPlay(anim.GetCurrentAnimatorClipInfo(0)[0].clip.name,value);
}
}
public void OnAnimatorPlay(string stateName,float frame)
{
anim.Play(stateName,0,frame);
}
标签:
动画
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!