首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UE4新手之编程指南

UE4新手之编程指南

作者头像
用户1198337
发布2018-01-19 11:12:51
2K0
发布2018-01-19 11:12:51
举报
文章被收录于专栏:我有一个梦想我有一个梦想

  虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程。 新的游戏类、Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 XCode之一编译后可以在虚幻编辑器中反映出全部变更内容。 蓝图可视化脚本系统是一个强劲的工具,可以让类通过连接函数区块和属性引用来在编辑器中进行创建。

  C++类可以作为蓝图类的基类使用,并且这样的话,程序员就可以设置基础的游戏类,随后,它们由关卡设计师来进行子类和迭代处理。

虚幻引擎API引用

虚幻引擎架构

无论您使用C++、蓝图还是同时使用两者来编程,底层的虚幻架构是相同的。

虚幻引擎游戏的游戏性

系统指南

资源处理参考指南

动画节点技术指南

动画节点用于在Vim 蓝图 中执行 操作,比如混合姿势或直接操作骨骼。虽然仅提供了几个动画节点, 但是您可以创建自定义节点来满足任何游戏的需要。

动画节点剖析

动画节点由两部分组成:

  • 一个运行时结构体,它执行真正的操作来生成输出姿势。
  • 一个编辑器中使用的容器类,用于在图表中处理节点的显示效果和功能, 比如,节点标题和关联菜单。

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

节点层次结构

尽管可以创建节点的层次结构,但任何在编辑器中使用的非抽象类都应该正确地包含 一个运行时节点(当进行继承时不要添加任何额外的节点,除非父类是抽象类且没有包含任何节点)。 请参照 UAnimGraphNode_BlendListBase 获得示例。

运行时节点

运行时结构体继承于 FAnimNode_Base ,负责初始化、更新及操作一个或多个 输入姿势来生成期望的输出姿势。它还声明了节点执行期望操作所需的 任何输入姿势连接和属性。

姿势输入

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

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

本地空间

UPROPERTY(Category=Links)
FPoseLink BasePose;

组件空间

UPROPERTY(Category=Links)
FComponentSpacePoseLink ComponentPose;

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

或者,节点也可以具有多个输入,用于混合多个动画:

UPROPERTY(Category=Links)
FPoseLink Base;

UPROPERTY(Category=Links)
FPoseLink Additive;

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

属性和数据输入

动画节点可以有多个属性(比如一个alpha 或 变换数据),用于执行节点的操作 。这些属性的声明方式和其他属性一样,使用 UPROPERTY() 宏进行声明。

UPROPERTY(Category=Settings, meta(PinShownByDefault))

mutable float Alpha;

通过使用特殊的元数据关键字,可以将动画节点的属性暴露为数据输入,从而可以向该 节点传入值。这允许节点的属性使用在节点之外计算的值。 以下是可用的元数据关键字:

编辑器节点

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

在编辑器中使用的类应该包含一个您的运行时节点的实例,且该实例暴露为可编辑状态。

UPROPERTY(Category=Settings)
FAnimNode_ApplyAdditive Node;

标题

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

比如, UAnimGraphNode_ApplyAdditive 节点使用灰色背景,且显示 "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");
}

工具提示信息

在角色编辑器中,当鼠标悬停到节点上时显示的工具提示信息,该信息是通过重载 GetTooltip() 函数定义的。

FString UAnimGraphNode_ApplyAdditive::GetTooltip() const
{
    return TEXT("Apply additive animation to normal pose");
}

关联菜单

每个动画节点可以添加节点相关的选项到关联菜单中,当您右击角色编辑器中的图表中的节点时会显示该 关联菜单。这些选项是通过 GetContextMenuActions() 函数添加的,该函数 是所有蓝图节点的成员函数。

比如, UAnimGraphNode_LayeredBoneBlend 节点添加菜单项,用于添加新的输入或删除现有输入:

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();
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动画节点技术指南
    • 动画节点剖析
      • 节点层次结构
    • 运行时节点
      • 姿势输入
      • 属性和数据输入
    • 编辑器节点
      • 标题
  • 工具提示信息
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档