unity中动画与触发事件的分解
2017-10-12 19:28
351 查看
unity中,模型的行为通常是与动画同时发生的,但是在处理过程中,我们又需要把播放动画与行为触发分开实现,来达到代码的简介与功能的划分,这时候就要用到事件与委托。在这里我们用一个AnimationEventBehaviour工具类将其实现。
类的思想是创建一个事件,之后由策划人员来绑定播放动画到什么时间触发事件。而程序端(用player脚本模拟)只需要控制动画的播放时机以及进行事件触发行为的绑定,这样就很好的达到了划分功能,单一职责的要求。
具体操作由一些图片进行解释
在模型上绑上脚本AnimationEventBehaviour后,如此进行事件的绑定:
![](https://img-blog.csdn.net/20171012194845769?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFja2VyOTQwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
组件结构如图
![](https://img-blog.csdn.net/20171012195138064?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFja2VyOTQwMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
AnimationEventBehaviour脚本与其绑定在player上的测试函数如下:
public class AnimationEventBehaviour : MonoBehaviour
{
/*
程序职责:
在某个脚本播放动画,定义攻击的具体逻辑,绑定到事件。
策划:
将当前脚本附加给模型,在Unity编译器中设置动画片段的事件(攻击,取消动画)
*/
//在脚本中注册事件
public event Action attackHandler;
private Animator anim;
private void Start()
{
anim = GetComponentInChildren<Animator>();
}
//策划在Unity编译器中指向当前方法
public void OnAttack()
{
if (attackHandler != null)
attackHandler();
}
//策划在Unity编译器中指向当前方法
public void OnCancelAnim(string animPara)
{
anim.SetBool(animPara, false);
}
}
private new void Awake()
{
GetComponentInChildren<AnimationEventBehaviour>().attackHandler += OnAttacking;
}
类的思想是创建一个事件,之后由策划人员来绑定播放动画到什么时间触发事件。而程序端(用player脚本模拟)只需要控制动画的播放时机以及进行事件触发行为的绑定,这样就很好的达到了划分功能,单一职责的要求。
具体操作由一些图片进行解释
在模型上绑上脚本AnimationEventBehaviour后,如此进行事件的绑定:
组件结构如图
AnimationEventBehaviour脚本与其绑定在player上的测试函数如下:
public class AnimationEventBehaviour : MonoBehaviour
{
/*
程序职责:
在某个脚本播放动画,定义攻击的具体逻辑,绑定到事件。
策划:
将当前脚本附加给模型,在Unity编译器中设置动画片段的事件(攻击,取消动画)
*/
//在脚本中注册事件
public event Action attackHandler;
private Animator anim;
private void Start()
{
anim = GetComponentInChildren<Animator>();
}
//策划在Unity编译器中指向当前方法
public void OnAttack()
{
if (attackHandler != null)
attackHandler();
}
//策划在Unity编译器中指向当前方法
public void OnCancelAnim(string animPara)
{
anim.SetBool(animPara, false);
}
}
private new void Awake()
{
GetComponentInChildren<AnimationEventBehaviour>().attackHandler += OnAttacking;
}
//攻击时仅调用次方法,进行动画的播放 public void Attack() { //播放攻击动画 GetComponentInChildren<Animator>().SetBool("attack1", true); } public void OnAttacking() { Debug.Log("攻击"); }
相关文章推荐
- unity-动画中加入触发事件
- Unity_DOTween动画的学习(十一)_DOTweenPath路径编辑器的使用补充_结合按钮触发不同点击事件控制播放状态_Waypoints
- Unity动画事件
- 按钮在执行frame动画的时候怎么响应触发事件?
- jquery hover事件只触发一次动画
- Unity中碰撞时触发事件
- Unity (二) Animator:Events - 动画事件案例(呐喊出现字幕)
- Unity (二) Animator:Events - 动画事件案例(呐喊出现字幕)
- Unity之一天一个技术点(十五)---给unity3d的老版动画中,添加事件的方法
- 按钮在执行frame动画的时候怎么响应触发事件?
- unity一些键盘鼠标特殊触发事件总结
- [Unity小技巧] 避免手机触屏连续多次触发触摸touch事件
- 【Unity】 旧版动画 在某一帧增添事件
- unity中处理animator动画事件
- Unity动画事件
- Unity动画播放结束事件
- 【Unity】Unity事件管理,可有效管理动画事件
- Unity关于MeshCollider碰撞体无法触发碰撞事件
- IE下gif动画onload事件会重复触发
- Unity用程序给Animator控制的某一个动画(AnimationClip)加一个动画事件(AnimationEvent)