基于每个骨骼的分层骨骼混合 Layered Blend Per Bone

这种混合方式可以只对某些骨骼进行混合,其他骨骼保持原姿势。

对哪些骨骼进行混合,以及混合的权重,都可以由我们自己决定。

比较典型的用法是在奔跑的时候切换武器,就可以将上半身用 站立时切换武器的动画 进行混合, 而下半身保持原奔跑姿势不变。

阅读全文 »

动画

动画资源

Animation Sequence -- 动画序列

Animation Composite -- 拼接多个动画序列 -- 没什么卵用

Blend Space -- 混合空间 -- 可由参数控制动作在不同的维度融合,

Aim Offset -- 偏移目标 -- 常用于人物瞄准时的各个角度

Montage -- 动画蒙太奇 -- 支持动画的连接、分段、循环等等

其中蒙太奇动画可设置 Slot 以供在动画状态机里留下的 Slot Pose 调用, 但是其调用通常由 Montage 相关的 API 主动调用, 适用于释放主动技能等。

【Tips】 BlendSpace 和 AimOffset 和 Montage 都可有一至多个动画序列制作而成

阅读全文 »

插件

UE4 支持插件的独立编译和自由移植 -- 即插即用

一个插件可以渗透 Editor 的地方

菜单栏

工具栏

右链菜单项

模式里的预放置体

Detail 面板

可自定义自己的编辑器

插件也是由 模块 (Module) 组成的

插件的项目文件并非 .uproject 而是 .uplugin

插件也分为 引擎插件 (附在引擎源文件中) 和 游戏插件 (附在游戏源文件中)

插件可以同时拥有 Eidtor 类型的 Module 和 Runtime 类型的 Module

插件可以引用任何模块 (引擎的和游戏的), 但是引擎插件或者编辑器插件最好不要引用游戏的模块 (无法移植)

一个插件也可以引用另一个插件, 但是最好不要这么做 (也不好移植)

开发 Editor 使用的插件可以使用 Slate 作为 UI 开发

阅读全文 »

Cascade 使用

我们知道,只有Actor才能显示在游戏场景中。

那么当我们拖动一个作为资源存在的 ParticleSystem 粒子系统时,发生了什么?

是谁,放任一个本本分分的资源溜进了游戏场景中去?

(敬请收看今日走进UE之谁偷了我的粒子-.-)

阅读全文 »

前言

UE4 专用DS服务器(Standalone Dedicated Server)提供了客户端/服务器模型的网络连接。

这里使用 UE4 自带的 Actor复制(Replicated)RPC 实现一个可以在局域网环境下进行联机的功能。

并同步显示一些信息,如__当前在线的玩家数__,__玩家名称列表__等。

实现流程大纲如下

创建登录界面 -- 可以输入用户名, IP, 端口号等登录信息

创建游戏主场景 -- 也是服务器的默认场景

使用 ClientTravel 建立连接

编译DS服务器,并进行连接测试

同步显示当前在线人数 和 玩家名称列表

阅读全文 »

渲染系统

UE4 的渲染器是在其自身的渲染线程中执行的

这个渲染线程通常落后于游戏线程1到2帧

所以有一些类会将游戏线程上的状态信息连接到渲染线程中来 (通常以F开头)

FScene -- 表示游戏场景, 是 UWorld 的渲染器版本

FPrimitiveSceneProxy -- UPrimitiveComponent 的渲染器版本, 为渲染线程映射 UPrimitiveComponent 状态

FPrimitiveSceneInfo -- FPrimitiveSceneProxy 的状态, 只存在于渲染器

FViewInfo -- 当前屏幕视图的渲染器 对应游戏模块中的 FSceneView

FSceneViewState -- FViewInfo 的状态, 与游戏中 UPlayer 一一对应

FLightSceneProxy 与 FLightSceneInfo -- 跟 Primitive差不多

FPrimitiveSceneProxy 存在于引擎模块中, 有两个 API 比较重要

DrawDynamicElements -- 在与之相关的任何 Pass 中绘制该拥有动态相关性的代理物体

DrawStaticElements -- 在与游戏线程相连时绘制该拥有静态相关性的代理物体

这也说明 UE4 对几何体的渲染是分了 Static 和 Dynamic 分别来处理的

  • Static Render
    • FPrimitiveSceneProxy 被放入场景时, 会调用其 DrawStaticElements 来收集 FStaticMeshElements, 然后创建对应的 Draw Policy 放到 FSceneDraw List 里去。
  • Dynamic Render
    • 在判定 FPrimitiveSceneProxy 可见后即调用 DrawDynamicElements() 来收集 FMeshElements

【Tips】 Proxy 的意思为渲染模块在游戏模块中出现的代理, 实际存在于引擎模块中, 而非渲染模块中

材质在渲染时也需要连接游戏线程和渲染线程的接口

FMaterial -- 材质的接口, 提供属性的查询等 -- 纯虚类

FMaterialResoruce -- FMaterial 的一个具体实现, 对应 UMaterial

FMaterialRenderProxy -- 提供给渲染线程使用的代理

阅读全文 »

对象系统

UE4 的对象系统是实现反射系统的基础

而反射系统又支撑着 GC 蓝图编辑器 网络通信 等各个模块

阅读全文 »

游戏框架

UE4 作为一个游戏引擎, 不仅完成了一个游戏引擎的本分, 还替游戏开发者着想,设计了一套用于游戏开发的框架,

这个游戏框架包含以 UObject 为基类的游戏性类

这些游戏性类构造了一个比较完整的游戏世界,只是留下了空白供使用者填充

由此也可以看出, UE4 的开发模式是基于__继承__而, 而非基于组件的 (u3d)

阅读全文 »

前言

UE4 从源代码的组织上来看是由__模块 (Module) __组成的

从功能上讲, UE4 对 编辑器(Editor) 和 游戏性(Runtime) 都提供了支持

对于编辑器来说, UE4 提供了丰富的编辑界面,

角色编辑器 (Persona) 动画编辑器 (AnimationEditor) 特效编辑器 (Cascade和Niagara) 材质编辑器 脚本编辑器 (蓝图) 等等

同时还可以自定义插件, 以及使用开放的蓝图节点工具和UI工具 Slate 来定制自己的编辑器界面

对于游戏性来说, UE4提供了比较完整的游戏性类, 以实现对整个游戏生命周期的控制

这些游戏性类从宏观上看也是遵循 MVC 模式的

阅读全文 »

前言

上回书说到,我们可以使用蓝图的流程控制结构来实现一些比较复杂的逻辑,甚至是算法过程

但是这只是作为学习熟悉的一个环节,而非用药于实际开发中

当我们理清一个蓝图内部的一些控制之后,我们难免会想再进一步研究一下怎么搓和两个蓝图的人生大事,

再长远一点地看,我们以后难免还要操心解蓝图和CPP之间的关系

这就像人到了中年,操办完了儿子的婚事,还要再操心着女儿的婚事一样

我们这里就顺着这个思路去学习蓝图

本篇主要整理一下蓝图之间的通信方法,关于CPP的部分以后再说。

蓝图通信官链

阅读全文 »