Unity 如何设定 Animator分割播放
更新时间:2021年4月10日 20:00 点击:1843
项目有个需求,一整段非常长的Animator 动画, 分割成一份份的播放,我们点击相应的按钮就播放某个时间点的动画,废话不多说
新建一个空物体加上toggle group,
下面是一堆的toggle并在Group里加上父亲
private Animator myAnimator; public List<Toggle> myTogglesList; private float playTime; public void Awake() { myAnimator = GameObject.Find("XXX/xxx").GetComponent<Animator>(); myTogglesList.AddRange(transform.GetComponentsInChildren<Toggle>()); } public void Start() { base.Start(); for (int i = 0; i < myTogglesList.Count; i++) { Toggle go = myTogglesList[i]; myTogglesList[i].onValueChanged.AddListener((bool value) => OnClickBtn(go.gameObject, value)); } }
void Update() { //playTime 得到当前时间点 playTime = myAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime; Debug.Log(playTime); if (myTogglesList[0].isOn && playTime > 0.1f) { //Animator.Play("ANI1", 0, 0f) 第一参数 ANI1动画名 第二参数0,为0层, 第三参数 0f,为开始时间 myAnimator.Play("ANI1", 0, 0f); } if (myTogglesList[1].isOn && playTime > 0.3f) { myAnimator.Play("ANI1", 0, 0.1f); } if (myTogglesList[2].isOn && playTime > 0.5f) { myAnimator.Play("ANI1", 0, 0.3f); } if (myTogglesList[3].isOn && playTime > 0.8f) { myAnimator.Play("ANI1", 0, 0.5f); } ......................... } private void OnClickBtn(GameObject go, bool value) { switch (go.name) { case "btn01 (1)": myAnimator.Play("ANI1", 0, 0f); break; case "btn01 (2)": myAnimator.Play("ANI1", 0, 0.1f); break; case "btn01 (3)": myAnimator.Play("ANI1", 0, 0.3f); break; case "btn01 (3)": myAnimator.Play("ANI1", 0, 0.5f); break; ......................... } }
补充:Unity animator不剪辑动画实现 分段播放动画
我就废话不多说了,大家还是直接看代码吧~
public Animator anim; private AnimatorStateInfo animInfo; /// <summary> /// 控制动画暂停和播放 /// </summary> int playSpeed = 0; void Update() { animInfo = anim.GetCurrentAnimatorStateInfo(0); //判断正在播放Take 001动画 if (animInfo.normalizedTime < 0.99f && animInfo.IsName("Take 001")) { //第一段动画 if (animInfo.normalizedTime > 0.19 && animInfo.normalizedTime < 0.2) { //达到条件时暂停播放动画 print("暂停播放1"); anim.speed = playSpeed; } //第二段动画 else if (animInfo.normalizedTime > 0.39 && animInfo.normalizedTime < 0.4) { print("暂停播放2"); anim.speed = playSpeed; } else { //自动设置回停止播放条件 playSpeed = 0; } } } /// <summary> /// 开始播放动画 /// </summary> private void PlayAnim() { //设置播放动画条件 playSpeed = 1; }
animInfo.normalizedTime 动画状态标准化时间,一段动画值为从0~1。到1则动画播放完毕
animInfo.IsName("Take 001") 当前播放的动画,Take 001是动画名称
原理:首先要知道每段动画结束帧,然后该段动画结束帧除于总帧得到该结束帧在animInfo.normalizedTime 的值,最后作为条件暂停动画,继续播放动画可实现下一段动画的启停。
比如:有一个动画100帧,不剪辑,需要播放多段动画。
得知第一段的结束帧在20帧,那么20/100=0.2,0.2则为normalizedTime 值作为动画暂停条件(写条件的时候可以设个范围)。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞。如有错误或未考虑完全的地方,望不吝赐教。
相关文章
- 本文主要介绍了python使用pandas按照行数分割表格,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-13
- 这篇文章主要为大家详细介绍了Unity时间戳的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了如何使用JavaScript实现“无缝滚动 自动播放”轮播图效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-20
- 这篇文章主要介绍了详解Howler.js Web音频播放终极解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-24
- 这篇文章主要为大家详细介绍了vue+video.js实现视频播放列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-29
Unity中 ShaderGraph 实现旋涡传送门效果入门级教程(推荐)
通过Twirl 旋转节点对Gradient Noise 梯度噪声节点进行操作,就可得到一个旋转的旋涡效果。具体实现代码跟随小编一起通过本文学习下吧...2021-07-11- 本文主要介绍了4种延时执行的方法,主要包括Update计时器,Invoke,协程,DoTween,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-07
- 这篇文章主要为大家详细介绍了Unity shader实现遮罩效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了unity 判断鼠标是否在哪个UI上的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-10
- 这篇文章主要为大家详细介绍了Unity实现换装系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-11
- 这篇文章主要给大家介绍了关于利用unity代码C#封装为dll的相关资料,文中通过图文将实现的方法介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了unity 实现摄像机绕某点旋转一周,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了Vue+node实现音频录制播放,功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-25
- 这篇文章主要为大家详细介绍了Unity Shader实现径向模糊效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-09
- 这篇文章主要为大家详细介绍了Unity实现截图功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 今天小编就为大家分享一篇TensorFlow2.0:张量的合并与分割实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
Oracle 两个逗号分割的字符串,获取交集、差集(sql实现过程解析)
这篇文章主要介绍了Oracle 两个逗号分割的字符串,获取交集、差集的sql实现过程解析,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11- 这篇文章主要为大家详细介绍了Unity Shader实现2D水流效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了Unity 按钮添加OnClick事件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-10
- 这篇文章主要为大家详细介绍了Unity使用EzySlice实现模型多边形顺序切割,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-03