unity 等待...动画_Unity 5.0中的闪亮新动画功能

Unity 5.0引入了丰富的动画功能,包括状态机行为、状态机转换、资产创建API和直接混合树等。状态机行为允许添加StateMachineBehaviour脚本,接收状态播放时的回调。状态机转换提供了更高层次的抽象。资产创建API可以通过脚本创建动画资源。直接混合树使映射动画师参数到 BlendTree 子项权重变得更简单。此外,还有根动画创作功能和更多便利的改进。
摘要由CSDN通过智能技术生成

unity 等待...动画

The animation team has been working hard to pull together an impressive feature set for Unity 5.0. Here’s a quick overview of the new animation features you can look forward to!

动画团队一直在努力为Unity 5.0整合令人印象深刻的功能集。 这是您可以期待的新动画功能的快速概述!

状态机行为 (State Machine Behaviours)

In Unity 5, you’ll be able to add StateMachineBehaviour scripts to your states, and receive the following callbacks when the states are played:

在Unity 5中,您将能够将StateMachineBehaviour脚本添加到您的状态,并在播放状态时接收以下回调:

  • OnStateEnter

    OnStateEnter

  • OnStateUpdate

    OnStateUpdate

  • OnStateExit

    OnStateExit

  • OnStateMove

    OnStateMove

  • OnStateIK

    OnStateIK

You can have as many StateMachineBehaviours in your State as you like. So to add IK on State, or to do some custom logic, simply drag the StateMachineBehaviour script on to it.

您可以根据需要在自己的州中拥有任意数量的StateMachineBehaviours。 因此,要在State上添加IK或执行一些自定义逻辑,只需将StateMachineBehaviour脚本拖到其上即可。

Basically, anything that requires some kind of StateMachine logic in your game – with or without animation – can use this.

基本上,任何需要在游戏中使用某种StateMachine逻辑(带有或不带有动画)的东西都可以使用此功能。

mecUnity5-1

1

2
if(animator.GetCurrentAnimatorStateInfo(0).isName("Idle") )
    DoStuff()

1

2
if ( animator . GetCurrentAnimatorStateInfo ( 0 ) . isName ( "Idle" ) )
     DoStuff ( )

(which I’m sure you have plenty of in your code),

(我确定您的代码中有很多),

you can just use StateMachineBehaviours instead!

您可以改用StateMachineBehaviours!

状态机转换 (State Machine Transitions)

State Machines are growing more and more complex, so we introduced the concept of State Machine Transitions to provide a higher level of abstraction over the StateMachine logic.

状态机变得越来越复杂,因此我们引入了状态机转换的概念,以提供对StateMachine逻辑的更高级别的抽象。

In Unity 5, we’ve added Entry and Exit nodes to StateMachines. There are used during State Machine Transitions.

在Unity 5中,我们已将Entry和Exit节点添加到StateMachines。 在状态机转换期间使用。

Entry:  When you transition to a StateMachine, the animation system will evaluate the Entry node and branch to the destination that its conditions meet.

Entry:过渡到StateMachine时,动画系统将评估Entry节点并跳转到其条件满足的目标。

Exit: When going to the Exit node, the animation system will look at the outgoing StateMachine transitions and branch to the proper destination.

退出:转到“退出”节点时,动画系统将查看传出的StateMachine过渡并分支到正确的目标。

Note that you can mix transitions: State->State, State->StateMachine, StateMachine->StateMachine…

请注意,您可以混合转换:State-> State,State-> StateMachine,StateMachine-> StateMachine…

mecUnity5-2

What’s more, we also revamped the UI for our tool so you can now re-order your parameters and layers.

更重要的是,我们还改进了工具的用户界面,以便您现在可以重新排序参数和图层。

资产创建API (Asset Creation API)

In Unity 5 you can create animation assets; StateMachines, States, Controllers, Layers, Blentrees, etc., using scripts in the Editor!

在Unity 5中,您可以创建动画资源。 在编辑器中使用脚本来编辑StateMachines,状态,控制器,层,Blentree等!

There are two APIs, a high-level one, where the assets are managed by Unity and a low level one where you manage assets manually, and can perform external referencing.

有两种API,一种是高级API,用于由Unity管理资产;另一种是低级API,用于手动管理资产,并且可以执行外部引用。

Both APIs are documented, and I’ve put a small example of API usage at the end of this post.

这两个API都有文档记录,并且在本文的结尾处我举了一个API使用情况的小例子。

直接混合树 (Direct Blend Trees)

We’ve added a new type of BlendTree that allows you to map an animator parameter to the weight of a BlendTree child directly.

我们添加了一种新的BlendTree类型,它允许您将动画师参数直接映射到BlendTree子项的权重。

mecUnity5-3

This can come in really handy if you’re working with BlendShape animations, or additive animations.

如果您正在使用BlendShape动画或附加动画,这会非常方便。

Root Motion Authoring (in generic mode) Unity 5 also allows you to animate objects and convert their animator to root motion (ie Delta Animation). Simply create an animation – translation/rotation – on the topmost transform of an object then click Generate Root Motion Curve in the AnimationClip inspector!

根动画创作(在常规模式下) Unity 5还允许您为对象设置动画并将其动画制作者转换为根动画(即Delta动画)。 只需在对象的最上层变换上创建动画-平移/旋转-然后在AnimationClip检查器中单击“生成根运动曲线”!

More stuff that will make your life easier:

更多可以使您的生活更轻松的事物:

    Let us know what you think of these changes!

    让我们知道您对这些变化的看法!

    The Animation Team.

    动画团队。

    More about Unity 5.

    有关Unity 5的更多信息。

    Asset Creation API sample Code 

    资产创建API示例代码

    1

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    // Creates the controller
    var controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath ("Assets/Mecanim/StateMachineTransitions.controller");
    // Add parameters
    controller.AddParameter(“TransitionNow”, UnityEditor.Animations.AnimatorControllerParameterType.Trigger);
    controller.AddParameter(“Reset”, UnityEditor.Animations.AnimatorControllerParameterType.Trigger);
    controller.AddParameter(“GotoB1″, UnityEditor.Animations.AnimatorControllerParameterType.Trigger);
    controller.AddParameter(“GotoC”, UnityEditor.Animations.AnimatorControllerParameterType.Trigger);
    // Add StateMachines
    var rootStateMachine = controller.layers[0].stateMachine;
    var stateMachineA = rootStateMachine.AddStateMachine(“smA”);
    var stateMachineB = rootStateMachine.AddStateMachine(“smB”);
    var stateMachineC = stateMachineB.AddStateMachine(“smC”);
    // Add States
    var stateA1 = stateMachineA.AddState(“stateA1″);
    var stateB1 = stateMachineB.AddState(“stateB1″);
    var stateB2 = stateMachineB.AddState(“stateB2″);
    stateMachineC.AddState(“stateC1″);
    var stateC2 = stateMachineC.AddState(“stateC2″); // don’t add an entry transition, should entry to state by default
    // Add Transitions
    var exitTransition = stateA1.AddExitTransition();
    exitTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, “TransitionNow”);
    exitTransition.duration = 0;
    var resetTransition = stateMachineA.AddAnyStateTransition(stateA1);
    resetTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, “Reset”);
    resetTransition.duration = 0;
    var transitionB1 = stateMachineB.AddEntryTransition(stateB1);
    transitionB1.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, “GotoB1″);
    stateMachineB.AddEntryTransition(stateB2);
    stateMachineC.defaultState = stateC2;
    var exitTransitionC2 = stateC2.AddExitTransition();
    exitTransitionC2.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, “TransitionNow”);
    exitTransitionC2.duration = 0;
    var stateMachineTransition = rootStateMachine.AddStateMachineTransition(stateMachineA, stateMachineC);
    stateMachineTransition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, “GotoC”);
    rootStateMachine.AddStateMachineTransition(stateMachineA, stateMachineB);

    1

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    // Creates the controller
    var controller = UnityEditor . Animations . AnimatorController . CreateAnimatorControllerAtPath ( "Assets/Mecanim/StateMachineTransitions.controller" ) ;
    // Add parameters
    controller . AddParameter ( “ TransitionNow ” , UnityEditor . Animations . AnimatorControllerParameterType . Trigger ) ;
    controller . AddParameter ( “ Reset ” , UnityEditor . Animations . AnimatorControllerParameterType . Trigger ) ;
    controller . AddParameter ( “ GotoB1 ″ , UnityEditor . Animations . AnimatorControllerParameterType . Trigger ) ;
    controller . AddParameter ( “ GotoC ” , UnityEditor . Animations . AnimatorControllerParameterType . Trigger ) ;
    // Add StateMachines
    var rootStateMachine = controller . layers [ 0 ] . stateMachine ;
    var stateMachineA = rootStateMachine . AddStateMachine ( “ smA ” ) ;
    var stateMachineB = rootStateMachine . AddStateMachine ( “ smB ” ) ;
    var stateMachineC = stateMachineB . AddStateMachine ( “ smC ” ) ;
    // Add States
    var stateA1 = stateMachineA . AddState ( “ stateA1 ″ ) ;
    var stateB1 = stateMachineB . AddState ( “ stateB1 ″ ) ;
    var stateB2 = stateMachineB . AddState ( “ stateB2 ″ ) ;
    stateMachineC . AddState ( “ stateC1 ″ ) ;
    var stateC2 = stateMachineC . AddState ( “ stateC2 ″ ) ; // don’t add an entry transition, should entry to state by default
    // Add Transitions
    var exitTransition = stateA1 . AddExitTransition ( ) ;
    exitTransition . AddCondition ( UnityEditor . Animations . AnimatorConditionMode . If , 0 , “ TransitionNow ” ) ;
    exitTransition . duration = 0 ;
    var resetTransition = stateMachineA . AddAnyStateTransition ( stateA1 ) ;
    resetTransition . AddCondition ( UnityEditor . Animations . AnimatorConditionMode . If , 0 , “ Reset ” ) ;
    resetTransition . duration = 0 ;
    var transitionB1 = stateMachineB . AddEntryTransition ( stateB1 ) ;
    transitionB1 . AddCondition ( UnityEditor . Animations . AnimatorConditionMode . If , 0 , “ GotoB1 ″ ) ;
    stateMachineB . AddEntryTransition ( stateB2 ) ;
    stateMachineC . defaultState = stateC2 ;
    var exitTransitionC2 = stateC2 . AddExitTransition ( ) ;
    exitTransitionC2 . AddCondition ( UnityEditor . Animations . AnimatorConditionMode . If , 0 , “ TransitionNow ” ) ;
    exitTransitionC2 . duration = 0 ;
    var stateMachineTransition = rootStateMachine . AddStateMachineTransition ( stateMachineA , stateMachineC ) ;
    stateMachineTransition . AddCondition ( UnityEditor . Animations . AnimatorConditionMode . If , 0 , “ GotoC ” ) ;
    rootStateMachine . AddStateMachineTransition ( stateMachineA , stateMachineB ) ;

    翻译自: https://blogs.unity3d.com/2014/06/26/shiny-new-animation-features-in-unity-5-0/

    unity 等待...动画

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值