Mars-Week4-数字孪生

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

https://docs.unrealengine.com/5.2/zh-CN/how-to-set-up-android-sdk-and-ndk-for-your-unreal-engine-development-environment/

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值