动画像播电影。。。
⼀. 重新播放
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); }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务