查看: 384|回复: 14

[编程指南] 【动画节点技术指南 | Unreal Engine】

[复制链接]

1

主题

273

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
73034
发表于 2016-6-26 02:02:03 | 显示全部楼层 |阅读模式



animnodes_banner.png



本页面的内容:

      
动画节点剖析
节点层次结构

运行时节点
姿势输入
属性和数据输入

编辑器节点
标题
工具提示信息
关联菜单
     
动画节点用于在Vim 蓝图中执行 操作,比如混合姿势或直接操作骨骼。虽然仅提供了几个动画节点, 但是您可以创建自定义节点来满足任何游戏的需要。
动画节点剖析
动画节点由两部分组成:

一个运行时结构体,它执行真正的操作来生成输出姿势。

一个编辑器中使用的容器类,用于在图表中处理节点的显示效果和功能, 比如,节点标题和关联菜单。

要想添加一个新动画节点,就必须创建这两个部分内容。

节点层次结构
尽管可以创建节点的层次结构,但任何在编辑器中使用的非抽象类都应该正确地包含 一个运行时节点(当进行继承时不要添加任何额外的节点,除非父类是抽象类且没有包含任何节点)。请参照  UAnimGraphNode_BlendListBase</code> 获得示例。
运行时节点
运行时结构体继承于 FAnimNode_Base</code> ,负责初始化、更新及操作一个或多个 输入姿势来生成期望的输出姿势。它还声明了节点执行期望操作所需的 任何输入姿势连接和属性。

姿势输入
在运行时节点中,通过创建 FPoseLink</code> 或 FComponentSpacePoseLink</code> 类型的属性来暴露姿势输入 。当在本地空间中应用姿势时使用 FPoseLink</code>,比如 混合动画。当在组件空间中应用姿势时使用 FComponentSpacePoseLink</code> 。比如,应用骨架控制器。

一个节点可以具有一个单独的姿势输入:

本地空间
UPROPERTY(Category=Links)FPoseLink BasePose;
node_posepin.jpg



组件空间
UPROPERTY(Category=Links)FComponentSpacePoseLink ComponentPose;
node_posepin_component.jpg



组件空间姿势引脚是蓝色的。

或者,节点也可以具有多个输入,用于混合多个动画:
UPROPERTY(Category=Links)FPoseLink Base;UPROPERTY(Category=Links)FPoseLink Additive;
node_posepin_multiple.jpg



每个这样的属性都会导致显示一个姿势连接。这种类型的属性总是暴露为 输入引脚。这些引脚不能进行选择性地隐藏或仅用作 详细信息 面板中 的可编辑属性。

属性和数据输入
动画节点可以有多个属性(比如一个alpha 或 变换数据),用于执行节点的操作 。这些属性的声明方式和其他属性一样,使用  UPROPERTY()</code> 宏进行声明。
UPROPERTY(Category=Settings, meta(PinShownByDefault))mutable float Alpha;
node_propertypin.jpg



通过使用特殊的元数据关键字,可以将动画节点的属性暴露为数据输入,从而可以向该 节点传入值。这允许节点的属性使用在节点之外计算的值。以下是可用的元数据Feedback(反馈建议)927336504@qq.com




元数据
描述

NeverAsPin</code>该属性不会暴露为数据引脚,其仅可以在角色编辑器的详细信息面板中进行编辑。PinHiddenByDefault</code>该属性可以暴露为数据引脚,但默认情况下是隐藏的 (请参照下面的可选引脚部分)。PinShownByDefault</code>该属性可以暴露为数据引脚,且默认情况下是可见的 (请参照下面的可选引脚 部分)。AlwaysAsPin</code>该属性总是暴露为数据引脚。
可选引脚

对于使用 PinHiddenByDefault</code>  或 PinShownByDefault</code> 定义的属性,在详细面板中的属性的旁边将 会显示一个复选框,以供您选择显示或隐藏它。

node_property_details.jpg


编辑器节点
编辑器类继承于  UAnimGraphNode_Base</code> ,负责类似于显示节点标题或 添加关联菜单动作这样的事情。

在编辑器中使用的类应该包含一个您的运行时节点的实例,且该实例暴露为可编辑状态。
UPROPERTY(Category=Settings)FAnimNode_ApplyAdditive Node;
标题
node_title.jpg



在角色编辑器内的 动画蓝图 的图表中显示的动画节点的背景颜色和标题文本, 是通过重载  GetNodeTitle()</code> 和 GetNodeTitleColor()</code>  函数定义的。

比如, UAnimGraphNode_ApplyAdditive</code> 节点使用灰色背景,且显示 "Apply Additive":
FLinearColor UAnimGraphNode_ApplyAdditive::GetNodeTitleColor() const{    return FLinearColor(0.75f, 0.75f, 0.75f);}FString UAnimGraphNode_ApplyAdditive::GetNodeTitle(ENodeTitleType::Type TitleType) const{    return TEXT("Apply Additive");}
工具提示信息
node_tooltip.jpg



在角色编辑器中,当鼠标悬停到节点上时显示的工具提示信息,该信息是通过重载 GetTooltip()</code> 函数定义的。
FString UAnimGraphNode_ApplyAdditive::GetTooltip() const{    return TEXT("Apply additive animation to normal pose");}
关联菜单
每个动画节点可以添加节点相关的选项到关联菜单中,当您右击角色编辑器中的图表中的节点时会显示该 关联菜单。这些选项是通过  GetContextMenuActions()</code> 函数添加的,该函数 是所有蓝图节点的成员函数。

node_menu.jpg



比如, UAnimGraphNode_LayeredBoneBlend</code> 节点添加菜单项,用于添加新的输入或删除现有输入:
void UAnimGraphNode_LayeredBoneBlend::GetContextMenuActions(const FGraphNodeContextMenuBuilder Context) const{    if (!Context.bIsDebugging)    {
if (Context.Pin != NULL)
{
     // we only do this for normal BlendList/BlendList by enum, BlendList by Bool doesn't support add/remove pins
     if (Context.Pin-Direction == EGPD_Input)
     {

  //@TODO: Only offer this option on arrayed pins

  Context.MenuBuilder-BeginSection("AnimNodesLayeredBoneBlend", NSLOCTEXT("A3Nodes", "LayeredBoneBlend", "Layered Bone Blend").ToString());

  {

      Context.MenuBuilder-AddMenuEntry(FGraphEditorCommands::Get().RemoveBlendListPin);

  }

  Context.MenuBuilder-EndSection();
     }
}
else
{
     Context.MenuBuilder-BeginSection("AnimNodesLayeredBoneBlend", NSLOCTEXT("A3Nodes", "LayeredBoneBlend", "Layered Bone Blend").ToString());
     {

  Context.MenuBuilder-AddMenuEntry(FGraphEditorCommands::Get().AddBlendListPin);
     }
     Context.MenuBuilder-EndSection();
}    }}
回复

使用道具 举报

0

主题

866

帖子

2867

积分

vip会员

Rank: 1

积分
2867
发表于 2016-7-2 19:23:54 | 显示全部楼层
不错 可以下来研究研究
回复 支持 反对

使用道具 举报

0

主题

823

帖子

2733

积分

vip会员

Rank: 1

积分
2733
发表于 2016-7-3 23:13:21 | 显示全部楼层
谢谢支持。
回复 支持 反对

使用道具 举报

0

主题

1303

帖子

4127

积分

vip会员

Rank: 1

积分
4127
发表于 2016-7-4 08:10:38 来自手机 | 显示全部楼层
全就行啊,,支持 一下
回复 支持 反对

使用道具 举报

0

主题

830

帖子

2757

积分

vip会员

Rank: 1

积分
2757
发表于 2016-7-4 22:49:47 来自手机 | 显示全部楼层
我现在有的是钱,我要下了!
回复 支持 反对

使用道具 举报

0

主题

919

帖子

3032

积分

vip会员

Rank: 1

积分
3032
发表于 2016-7-6 05:33:42 来自手机 | 显示全部楼层
好东西这么多....
回复 支持 反对

使用道具 举报

0

主题

897

帖子

2918

积分

vip会员

Rank: 1

积分
2918
发表于 2016-7-6 16:42:24 | 显示全部楼层
快没金币了,看看需要多少?
回复 支持 反对

使用道具 举报

0

主题

940

帖子

3113

积分

vip会员

Rank: 1

积分
3113
发表于 2016-7-10 03:55:09 来自手机 | 显示全部楼层
恩,好资源~ 哈哈~
回复 支持 反对

使用道具 举报

0

主题

850

帖子

2784

积分

vip会员

Rank: 1

积分
2784
发表于 2016-7-15 21:17:30 | 显示全部楼层
什么鬼???看着很不错的样子啊!
回复 支持 反对

使用道具 举报

0

主题

837

帖子

2724

积分

vip会员

Rank: 1

积分
2724
发表于 2016-7-17 23:57:43 来自手机 | 显示全部楼层
多少钱,看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部