D1
D1 - 1 移动端环境配置 - Android Studio
-
下载 Android Studio
使用历史版本
我同意这些条款
下载4.0版本
D1 - 2 移动端项目设置
-
创建游戏框架 , GameModeBase , HUD , PlayerController 都不要动 , 我们创建 Pawn 类型的 Character , 因为我们不需要让人物移动,旋转.
D1 - 2 - 1 第三人称必备组件 - SpringArm 弹簧臂
-
限制相机范围的手段 , 让相机离开蓝图中心(贴脸) , 可以让相机绕着蓝图旋转.
D1 - 3 移动端操作(dog
-
创建轴映射
- BP_Pawn
Add Actor World Offset , 这种移动方式不受刚体限制 , 因此可以穿墙
D1 - 4 移动端项目打包流程
-
设置SDK
- 勾上 - Apply
- ok
- Accept
- 关闭虚幻,在这个目录下,,执行批处理文件(失败了)
- Project Setting
- APL Packaging
- Google Play Services
D1 - 5 移动端操作α
-
删除原来的轴映射 , 为了模拟手机触屏 , 我们用鼠标来操控 , 人物移动.
- 利用向量的加法 , 来实现一步完成 , 就可以斜着移动.
D1 - 5 - 1 弹簧臂
-
添加弹簧臂的动态拉伸效果(类似于惯性) , 添加滞后后,会有一定的延迟效果 , 让整体画面移动的不是很僵硬.
D1 - 6 触控操作 - InputTouch
这里描述一下 , touch123456789的逻辑 : 当第一根手指触碰为 touch1 , 理所当然 , 第二跟手指为 touch2 但是当第二根手指松开的时候他的索引还是 touch2 , 不会因为 第一根手指松开而变成1
-
用 InputTouch上面的功能
D1 - 6 - 1 Pressed
- 记录 第一次 Pressed 的位置 , 并让其保持在 第一根 手指 触碰的键位.这里加入了 Branch的判断主要是为了防止干扰.
D1 - 6 - 2 Moved
-
相当于 Update() , 当手指移动的时候每帧执行
D1 - 6 - 3 Vector3 => Vector2
-
将这两个变量变为 Vector2 类型
D1 - 7 向量 Vector
D1 - 7 - 1 欧拉角
D1 -7 - 2 四元数
D1 - 7 - 3 矩阵
D2
D2 - 1 触碰操作α
- Append 节点 : 字符串添加
- 计算距离 , 当 Add Actor World Offset (移动) 之后 , 需要Set(记录) Finger1 Pressed Location , 否则移动的距离越来越大.
- 移动端方式预览(不建议)
D2 - 2 角色旋转
- 移动端输入设置
D2 - 2 - 1 鼠标旋转
- 添加轴映射
- 添加弹簧臂滞后效果
- 因为欧拉角的问题所以我们先旋转z轴来做yaw旋转 ,
- 至于 pitch 移动 我们通过弹簧臂来实现视角上下移动,因为弹簧臂是利用的蓝图的相对坐标系.
- 利用世界坐标系 调整 一个轴 , 再利用相对坐标系调整另一个轴 , 不会产生欧拉角那样的错乱.
D2 - 3 角色旋转α
- Add Relative Rotation 会让角色倒立 , 所以利用 clamp 节点限制旋转角度.
- 弹簧臂配置 : 当遇到有碰撞的物体时 , 会自动伸缩弹簧臂,防止视角穿透.
- touch Rorate
D2 - 4 角色远近逻辑
- 弹簧臂弹簧长度
通过控制弹簧臂的 Target Arm Length 改变视角远近.
D2 - 4 - 1 通过鼠标滚轮调整视角远近
- 制作出弹簧臂的滞后效果
需要让 参数 的默认值 与 SpringArm 的 Target Arm Length 相等 , 防止开始运行时就开始出现滞后效果.
- 关于 FInterp 节点参数的解释 : DeltaMove移动距离,根据DeltaTime和InterpSpeed的乘积来计算,但是区间在0-1.
- 配合上Tick函数,当前值在做一个持续性变化,以达到平滑效果。
- 即使 参数和 当前 SpringTargetArmLength相等 , 那么程序也会一直set 参数
所以要增加一个逻辑判断来,让参数 和 SpringTargetArmLength 相等的时候不进行set 参数操作,但是浮点数永远不会相等 , 所以添加 Nearly Eq 节点.
- 总结一下大体的思路:假设 Wheel 停止的时候 Set Target Arm Length Paramter = 500 =>
Set 真正的 Spring Arm Target Length 为 500 .
D2 - 5 二指缩放逻辑
- 添加 flag 逻辑
- 二指逻辑 => 先这样 , 下面来解释一下.
Pressed & Released
当按下的时候先判断是否是touch1 , 如果是touch1 , 则 set touch1 location => set flag isFinger1 true =>接下来的 touch1 与 touch2 的逻辑关系类似 , 就不做太多解释了。
Moved : 在移动的时候也要判断是那个 finger 按下.
D2 - 5 - 1 选择判定
- 只要有一个 touch , 那么他就可以执行旋转逻辑 , 无论是 touch1 或者 touch2 ,但是如果 touch1 和 touch2 都在则进行缩放操作。总结就是
touch1 || touch2 == 旋转逻辑 , 但是两者都等于false的情况下 , 则什么都不做
touch1 && touch2 == 缩放逻辑
(touch1,touch2)逻辑顺序 : 当(1,1)直接走缩放逻辑 ,其他为(0,0),(0,1),(1,0) , 只有为 (1,0),(0,1)的情况下才会走旋转逻辑.
D2 - 6 二指缩放逻辑α
- 保证不管是(1,0) 还是(0,1) 都可以进行旋转操作减法操作.
D2 - 6 - 1 二指缩放
- 如果大于成立则为缩小,反之则为放大逻辑.
因为 相减之后存在长度的正负关系,因此根本不需要判断大小.
D2 - 6 - 2 二指缩放 - 滞后效果
- 这里直接设置参数 , 因为在上面的pc端逻辑中 , 在 Event Tick 逻辑中存在逻辑 : 当 获取的SpringTargetArmLength 值 与 参数中的不同的时候 , 会设置将参数 赋值 给 SpringTargetArmLength 中 , 所以在这里不需要做 , 这里可以证明 PC 端 和 移动端逻辑可以共存的.
PC段缩放操作
二指控制缩放
D3
D3 - 1 二指缩放逻辑X
- 获取两帧的间隔时间
Get World Delta Seconds 节点 : 获取两帧的间隔时间
D3 - 2 二指缩放逻辑Ω
D3 - 2- 1 缩放跳过第一帧
- 跳过第一帧 , 虚幻5的原因 , 第一帧 touch 检测位置为(0,0)屏幕左上角.
- 这样我们第一帧只要有一个为(0,0) , 则我们直接将第二帧的 MovePosition,传给 Pressed Postion, 那么在第二帧的时候就不会出现(0,0) , 玩家很少出触碰到(0,0)
D3 - 2 - 2 旋转跳过第一帧
D3 - 3 移动端模型规范
- 3dsmax 变换工具框 , 用于调整轴向 与 模型的 对其.
D3 - 4 移动端材质
- 蓝图创建空物体(Sence , 类似于 Unity 的 EmptyProject)
- 开始运行时直接赋值 SpringTargetArmLenght
- 限制弹簧臂长度
- touch 控制也加上 clamp
D3 - 5 UI控制项目退出
- 移动端UI最好大于100像素 , 128
- 退出游戏节点 : Quit Game
D3 - 6 项目角色属性重置
- 游戏窗口设置
- Pawn Reset Transfrom 逻辑 , 添加自定义事件
- Button调用自定义方法
D3 - 7 UI菜单逻辑
- 水平框自动填充 : 放在水平框下的元素的进行填充(Fill)占满.
- 裁切:超出边界隐藏
D4
D4 - 1 机械部件运动
- 如果是比较简单的同意运动可以利用数组来让部件实现运动效果.
D4 - 2 机械部件运动α
D4 - 2 - 1 判断数组下标越界
D4 - 2 - 2 零件向右侧移动
- 索引自增
D4 - 3 机械部件运动x
D4 - 3 - 1 反向播放
- UI_Button
- 定义反向收缩逻辑
- 利用 Timeline 的 direction 属性来判断 是正向扩张还是反向收缩
D4 - 4 机械部件运动Ω
D4 - 4 - 1 内部零件整体移出
- 定义两个自定义事件
- 修改按钮调用的自定义方法
D4 - 5 批量处理动态材质
- 让外壳边透明
D5
D5 - 1 媒体规范
- 创建 媒体播放器 和 材质.
- UI布局
D5 - 3 材质切割效果
- Material_Mask
Mask节点 : 让模型的不同部分出现不同的效果
- 当Camera Position 换成 世界坐标后 就可以 在固定位置进行遮罩了.
- 将Engine Shell 的材质的 Blend Mode 改为 Masked
D5 - 4 材质切割效果α
- 利用点积来判断左右两侧的透明状态.
D5 - 4 - 1 材质函数
- 创建材质函数
- 整体替换
6 - Extra
6.1 设置Android SDK 和 NDK
7 - ClassContent
7.1 模拟触控移动
7.1.1 Add Actor World Offset
7.1.2 旋转
7.2 关于类似按钮与主UI利用事件分发器交互
- BP_ButtonUI
- UI_MainUI
只有在UI部分可以省去绑定步骤(其实还是绑定),直接利用按钮调用事件分发器(因为子UI已经作为主UI的一部分)
7.3 利用材质函数制作亮边效果
- 材质函数
- 利用材质函数制作出亮边效果
7.4 利用材质参数集动态调整切割位置
7.4.1 创建材质参数集
- MaterialParameterCollection_SlideObject
- 在材质函数中调用材质参数集
- BP_Engine 赋值
7.4.1 滑条控制切割位置
- UI_MainUI
- BP_Engine