【ue4】【使用】动画融合_分层骨骼混合
基于每个骨骼的分层骨骼混合 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 开发
我们知道,只有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 分别来处理的
FPrimitiveSceneProxy
被放入场景时, 会调用其 DrawStaticElements
来收集 FStaticMeshElements
, 然后创建对应的 Draw Policy
放到 FScene
的 Draw List
里去。FPrimitiveSceneProxy
可见后即调用 DrawDynamicElements()
来收集 FMeshElements
【Tips】 Proxy 的意思为渲染模块在游戏模块中出现的代理, 实际存在于引擎模块中, 而非渲染模块中
材质在渲染时也需要连接游戏线程和渲染线程的接口
FMaterial -- 材质的接口, 提供属性的查询等 -- 纯虚类
FMaterialResoruce -- FMaterial 的一个具体实现, 对应 UMaterial
FMaterialRenderProxy -- 提供给渲染线程使用的代理
UE4 作为一个游戏引擎, 不仅完成了一个游戏引擎的本分, 还替游戏开发者着想,设计了一套用于游戏开发的框架,
这个游戏框架包含以 UObject
为基类的游戏性类
这些游戏性类构造了一个比较完整的游戏世界,只是留下了空白供使用者填充
由此也可以看出, UE4 的开发模式是基于__继承__而, 而非基于组件的 (u3d)
UE4 从源代码的组织上来看是由__模块 (Module) __组成的
从功能上讲, UE4 对 编辑器(Editor) 和 游戏性(Runtime) 都提供了支持
对于编辑器来说, UE4 提供了丰富的编辑界面,
角色编辑器 (Persona) 动画编辑器 (AnimationEditor) 特效编辑器 (Cascade和Niagara) 材质编辑器 脚本编辑器 (蓝图) 等等
同时还可以自定义插件, 以及使用开放的蓝图节点工具和UI工具 Slate
来定制自己的编辑器界面
对于游戏性来说, UE4提供了比较完整的游戏性类, 以实现对整个游戏生命周期的控制
这些游戏性类从宏观上看也是遵循 MVC 模式的