Unity3D Animator 动态添加事件回调和替换动画
2015-12-23 19:27
501 查看
主要的层次结构式是, Animator 包含一个 AnimatorStateController 控制器, Controller 含有多个层,每个层含有多个状态, 每个状态可以绑定一个AnimationClip。执行动画的是AnimationClip , 可以挂在回调事件的也是AnimationClip。所以,动态挂在事件回调,我们需要获取AnimationClip。
以上是动态创建一个事件回调,然后挂在到AnimationClip上的方法。AnimationEvent的 time就是动画的时间,这里赋值clip的length表示,动画执行完成后回调。那么回调函数式一个字符串,是通过消息机制回调,当前clip所在GameObject上的一个函数名来调用。
有两个办法,从Animator里面拿到AnimationClip。
第一, Controller 里面包含多个 AnimationClip 可以通过 Controller的数组animationClips 拿到所有的clip。
第二, 把挂载在Controller上的clip直接挂载到GameObject上当属性获得。
值得注意的是,经过测试,挂载clip事件的函数,一定要放到Animator的play或是设置相关属性之前。Animator才能播放。Play方法,有多个重载,其中有一个可以传入StateName通过名字,来直接播放特定的状态动画。而不是走默认状态切换流程。这样,我们可以再配置Controller的时候,就设置一个默认的状态,其他的状态都悬空,用代码来手动调用,而不是通过状态条件来自动处理。
既然,controller里面的clip是挂载的,那么运行时也是有方法可以修改的。
clipName 就是原来AnimationClip的name, 这样可以动态的替换掉播放的动画。
AnimationEvent aEvent1 = new AnimationEvent(); aEvent1.time = clip.length; aEvent1.functionName = "OnOpenComplete"; clip.AddEvent(aEvent1);
以上是动态创建一个事件回调,然后挂在到AnimationClip上的方法。AnimationEvent的 time就是动画的时间,这里赋值clip的length表示,动画执行完成后回调。那么回调函数式一个字符串,是通过消息机制回调,当前clip所在GameObject上的一个函数名来调用。
有两个办法,从Animator里面拿到AnimationClip。
第一, Controller 里面包含多个 AnimationClip 可以通过 Controller的数组animationClips 拿到所有的clip。
第二, 把挂载在Controller上的clip直接挂载到GameObject上当属性获得。
值得注意的是,经过测试,挂载clip事件的函数,一定要放到Animator的play或是设置相关属性之前。Animator才能播放。Play方法,有多个重载,其中有一个可以传入StateName通过名字,来直接播放特定的状态动画。而不是走默认状态切换流程。这样,我们可以再配置Controller的时候,就设置一个默认的状态,其他的状态都悬空,用代码来手动调用,而不是通过状态条件来自动处理。
既然,controller里面的clip是挂载的,那么运行时也是有方法可以修改的。
AnimatorOverrideController overrideController = new AnimatorOverrideController(); overrideController.runtimeAnimatorController = anim.runtimeAnimatorController; overrideController["clipName"] = newClip; anim.runtimeAnimatorController = overrideController;
clipName 就是原来AnimationClip的name, 这样可以动态的替换掉播放的动画。
相关文章推荐
- Unity3D组件手册-Box Collider
- Unity学习过程(一)——认识Unity游戏引擎
- Unity3D批量修改Texture属性
- unity3d简单聊天程序
- `UnityEditor' could not be found Are you missing a using directive or an assembly reference?
- Unity3d使用PlayerPrefs类实现数据存档
- unity3d中awake和start函数的理解。
- unity, 动态创建节点时一定要先指定父节点再设置transform
- unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色
- Unity3d地图制作之模型高光
- [Unity] 从SurvivalShooter的角色移动,看FixedUpdate与Update
- 【Unity Tips】备忘录(扫盲篇)
- Unity3D圆滑旋转物体
- unity3d-准备工作 - VS2013
- Unity3d打包发布Android程序
- Unity3D游戏开发之小地图的实现
- [Unity3D]Unity3D游戏开发之角色控制漫谈
- (转)unity中基于alpha通道的shadow volume实现
- Unity3D NGUI自适应屏幕分辨率
- Unity3D 控制物体移动、旋转、缩放