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

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

虚幻引擎API引用

虚幻引擎架构

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

虚幻引擎游戏的游戏性

资源处理参考指南

动画节点技术指南

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

动画节点剖析

动画节点由两部分组成:

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

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

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

节点层次结构

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

运行时节点

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

姿势输入

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

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

本地空间

  1. UPROPERTY(Category=Links)
  2. FPoseLink BasePose;

组件空间

  1. UPROPERTY(Category=Links)
  2. FComponentSpacePoseLink ComponentPose;


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

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

  1. UPROPERTY(Category=Links)
  2. FPoseLink Base;
  3. UPROPERTY(Category=Links)
  4. FPoseLink Additive;

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

属性和数据输入

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

UPROPERTY(Category=Settings, meta(PinShownByDefault))

mutable float Alpha;

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

编辑器节点

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

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

  1. UPROPERTY(Category=Settings)
  2. FAnimNode_ApplyAdditive Node;

标题

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

比如, UAnimGraphNode_ApplyAdditive 节点使用灰色背景,且显示 "Apply Additive":

  1. FLinearColor UAnimGraphNode_ApplyAdditive::GetNodeTitleColor() const
  2. {
  3. return FLinearColor(0.75f, 0.75f, 0.75f);
  4. }
  5.  
  6. FString UAnimGraphNode_ApplyAdditive::GetNodeTitle(ENodeTitleType::Type TitleType) const
  7. {
  8. return TEXT("Apply Additive");
  9. }

工具提示信息

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

  1. FString UAnimGraphNode_ApplyAdditive::GetTooltip() const
  2. {
  3. return TEXT("Apply additive animation to normal pose");
  4. }

关联菜单

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

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

  1. void UAnimGraphNode_LayeredBoneBlend::GetContextMenuActions(const FGraphNodeContextMenuBuilder& Context) const
  2. {
  3. if (!Context.bIsDebugging)
  4. {
  5. if (Context.Pin != NULL)
  6. {
  7. // we only do this for normal BlendList/BlendList by enum, BlendList by Bool doesn't support add/remove pins
  8. if (Context.Pin->Direction == EGPD_Input)
  9. {
  10. //@TODO: Only offer this option on arrayed pins
  11. Context.MenuBuilder->BeginSection("AnimNodesLayeredBoneBlend", NSLOCTEXT("A3Nodes", "LayeredBoneBlend", "Layered Bone Blend").ToString());
  12. {
  13. Context.MenuBuilder->AddMenuEntry(FGraphEditorCommands::Get().RemoveBlendListPin);
  14. }
  15. Context.MenuBuilder->EndSection();
  16. }
  17. }
  18. else
  19. {
  20. Context.MenuBuilder->BeginSection("AnimNodesLayeredBoneBlend", NSLOCTEXT("A3Nodes", "LayeredBoneBlend", "Layered Bone Blend").ToString());
  21. {
  22. Context.MenuBuilder->AddMenuEntry(FGraphEditorCommands::Get().AddBlendListPin);
  23. }
  24. Context.MenuBuilder->EndSection();
  25. }
  26. }
  27. }

 

  1.  
  1.  

UE4新手之编程指南的更多相关文章

  1. ue4 1官网编程指南总结

    https://docs.unrealengine.com/latest/CHN/index.html 中编程指南 快速入门 actor生命周期 FloatingActor.h #pragma onc ...

  2. 新手也能看懂的 SpringBoot 异步编程指南

    本文已经收录自 springboot-guide : https://github.com/Snailclimb/springboot-guide (Spring Boot 核心知识点整理. 基于 S ...

  3. 高质量C++/C编程指南(林锐)

    推荐-高质量C++/C编程指南(林锐) 版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐   2001-7-1至 2001-7-18 林锐起草 V 1.0 正式文件 林锐   20 ...

  4. 学习笔记之高质量C++/C编程指南

    高质量C++/C编程指南 http://man.lupaworld.com/content/develop/c&c++/c/c.htm 高质量C++/C编程指南(附录 C :C++/C 试题的 ...

  5. 高质量C++/C编程指南

    http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520634042 高质量C++/C编程指南 文件状态 [  ] 草稿文件 [√] 正式文 ...

  6. 闭包初体验 -《JavaScript面向对象编程指南》

    下面是我对闭包的理解:(把他们整理出来,整理的过程也是在梳理) 参考<JavaScript面向对象编程指南> 1.首先,在理解闭包之前: 我们首先应该清楚下作用域和作用域链 作用域:每个函 ...

  7. Archive for the ‘Erlang’ Category 《Erlang编程指南》读后感

    http://timyang.net/category/erlang/ 在云时代,我们需要有更好的能利用多核功能及分布式能力的编程语言,Erlang在这方面具有天生的优势,因此我们始终对它保持强烈关注 ...

  8. OpenGL编程指南(第七版)

    OpenGL编程指南(第七版) 转自:http://blog.csdn.net/w540982016044/article/details/21287645 在接触OpenGL中,配置显得相当麻烦,特 ...

  9. 编译opengl编程指南第八版示例代码通过

    最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...

随机推荐

  1. 日期格式代码出现两次的错误 ORA-01810

    错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...

  2. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  3. 开源:ASP.NET Aries 开发框架

    前言: 随着岁月的推进,不知不觉已在.NET这领域上战斗了十年了. 青春还没来得急好好感受,却已是步入健忘之秋的老人一枚了. 趁着还有点记忆,得赶紧把硬盘里那私藏的80G除外的东西,和大伙分享分享. ...

  4. 让 windows 下的命令行程序 cmd.exe 用起来更顺手

    在 Windows 下使用 Larave 框架做开发,从 Composer 到 artisan 总是避免不了和 cmd.exe 打交道,系统默认的命令行界面却是不怎么好看,且每行显示的字符数是做了限制 ...

  5. Python标准模块--Unicode

    1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...

  6. App你真的需要么

    随着智能手机.移动路联网的普及,APP火的一塌糊涂,APP应用可谓五花八门,街上经常看到各种推广:扫码安装送东西,送优惠券.仿佛一夜之间一个企业没有自己的APP就跟不上时代了. 有时我在想:APP,你 ...

  7. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform

    eclipse maven clean install 报错 1. 修改properties-->resource-->utf-8仍然报错 2.修改项目pom.xml文件,增加: < ...

  8. Velocity笔记--使用Velocity获取动态Web项目名的问题

    以前使用jsp开发的时候,可以通过request很轻松的获取到根项目名,现在换到使用velocity渲染视图,因为已经不依赖servlet,request等一些类的环境,而Web项目的根项目名又不是写 ...

  9. iOS之开发中一些相关的路径以及获取路径的方法

    模拟器的位置: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs ...

  10. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...