您的位置:

UE4动画蓝图:让游戏动起来

一、什么是UE4动画蓝图

UE4动画蓝图是一种基于视觉编程的工具,旨在使动画和交互设计师更轻松地创建、编辑和测试角色动画。UE4动画蓝图在UE4引擎中的位置和作用相当于C++代码所处的位置和作用。

二、如何创建一个简单的动画蓝图

首先,创建一个角色蓝图。然后,添加一个Skeleton Mesh组件,并将其设置为角色蓝图的默认场景根组件。接着,点击Skeleton Mesh,选择“Create Animation Blueprint”。之后,UE4会提示用户是否创建一个基于 AnimGraph 的动画蓝图或基于StateMachine的动画蓝图。选择“Anim Graph”,然后将其命名为“CharacterAnimBlueprint”

AnimGraph(Graph) {
    FinalPoseResult = LocalToComponentSpace(FinalBlendRecursive(Result));
    FinalPoseAdditive = LocalToComponentSpace(FinalBlendAdditive(Result));

    OutputPose = (BlendPose(FinalPoseResult, FinalPoseAdditive, Weight));
    DrawDebugPose(Graph, OutputPose);
    ReturnValue = OutputPose;
}

这是创建的简单动画蓝图的基础代码,其中“AnimGraph”是 UE4 动画蓝图的一部分。 这个代码的作用是将最终的角色动作传递到游戏引擎的组件中。

三、动画状态机

动画蓝图中最常用的工具之一就是“状态机”了。状态机是 UE4 动画系统的核心组件,负责管理游戏对象在不同状态下的动画行为。 可以通过添加不同的状态,然后以及将它们连接起来来创建一个自定义的状态机。以下是一个基本动画状态机的样例代码:

Anim State Machine(BasicStateMachine) {
    Entry State(Default) {
        bCanEverTick = True;
        bCanTransitionOutOf = True;
        bCanTransitionInto = True;
    }
    State(State1) {
        bCanEverTick = True;
        bCanTransitionOutOf = True;
        bCanTransitionInto = True;
    }
    State(State2) {
        bCanEverTick = True;
        bCanTransitionOutOf = True;
        bCanTransitionInto = True;
    }
    DefaultState = Default;
    DefaultTransitions = ((Default, State1), (State1, State2));
}

这个动画状态机包含了一个 Entry state 和两个状态 State1 和State2,这两个状态之间有一个默认的转换。 将动画状态机连同角色的骨架设定插件和适当的动画文件关联起来,就可以在 UE4 中启动一个简单的状态机了。

四、纯蓝图:从开始到结束的动画

在 UE4 中,通过动画蓝图,还可以创建不需要带入动画文件的完整动画序列。当然,这种做法需要通过修改帧(frame)数、插值掩码、本地空间坐标等手段让这种动画序列变得有意义。以下是创建一个纯蓝图动画的样例:

Function(Lerpize) {
    Delta = (GetCurrentTime() - StartTime) / (EndTime - StartTime);
    if (Delta >= 1.0) {
        return TargetValue;
    } else {
        return Lerp(StartValue, TargetValue, Delta);
    }
}

在该样例代码中,使用 Lerp 函数和“函数”节点分别创建了一个插值和过渡效果。这个函数将根据指定的开始和结束时间计算线性插值,并生成一个当前值,让动画能够实现平滑过渡。

五、UE4动画蓝图的其他用途

除了上述内容,UE4动画蓝图还可以用于“动画蒙太奇”、“重定向”、“事件触发”、“循环”、“跳转…”等一系列其他功能。在 UE4 引擎中,动画蓝图几乎是实现角色动画和游戏物理效果的终极工具。通过掌握其用法,游戏开发者可以创造出丰富多样、真实自然的游戏场景和动画效果。