Ue4 制作高端小地图的方法(非Capture2D)

Ue4 制作高端小地图的方法(非Capture2D)

一,背景

在一些RPG 游戏中, 一般都需要增加的一个功能就是小地图。 角色在运动过程中,可以通过小地图看到当前的 全局地图以及 当前角色的相对位置。

二,种类
根据目前流出的教程, 基本上有两套教程可以参考。

方法一: 利用Capture2D
这是目前最快捷的一种方式,主要针对的是场景不复杂的情况。主要利用一个顶视图的效果来实现。基本原理可以等同于反射镜的制作流程。

1,创建一个 Capture2d 的蓝图。 BP_SceneCapture ; 我们将里面的Capture2d
2,创建一个 RenderTarget , 命名为RT_MiniMap . 这个 RT 上面 Capture2d 的对应的Textture.
3, 将这个 Capture2d 的蓝图 放入场景中, 直接作为 bus 的附属结构, 调整capture2d 蓝图的位置 到车辆的顶部。

4,将 RT_MiniMap 创建为一个材质。 将这个材质 直接在UMG 中赋值给 Image . 既可以显示基本的小地图。

说一下以上的缺点:
(1)小地图的目的是 从高处全局俯瞰相对位置。 所以就要求 我们的视角已经在一个比较高的位置。
(2)如果一个被监控的场景本身高低起伏比较大。 我们从高处向下观看的时候, 就会发现整个小地图 有比较明显的倾斜的3D 物体, 整体的效果比较差。
(3)基于以上原因 我们结合 官方的例子进行修改。魔改了一版2d 效果可以 跟踪位置以及旋转角度的小地图。

方法二: 2D 小地图模式

(1)准备工作: 我们需要我们当前地图的顶视图对应的 二维图(长宽的分辨率要求一样,比如 1024*1024)。 在美工画这一张二维图形的时候, 一定要保证 比例和 和 顶视图 top 模式下看到的比例是一样的。 同时有两个坐标点 一定要标记清楚
 二维图形中心点 对应的 三维场景中的点(我们自己在场景中 放置一个模型 BP_CenterMesh)
二维图形的边界出 对应的 三维场景中的点 (我们在场景中方式一个模型 Right_Mesh), 为了方便后面计算边界长度。 我们要保证xy 平面上,有一个坐标是一致的。
在这里插入图片描述
(2)在场景中, 通过关卡蓝图 计算 中心点 和边界点 之间的 水平距离。以下这个距离是边界长度的一半。

在这里插入图片描述

(3)核心的思路讲解: 我们在UMG 中 创建一个boarder ,创建一个材质M_CircleMiniMap 填充里面的brush 。
(4)M_CircleMiniMap 这个材质 里面
我们主要设置 变量 x,y 控制材质偏移,保证bus 所在的位置永远在地图的中间位置。
设置 Rotation 旋转材质,保证车头的朝向永远朝向前方。
设置Zoom 控制整体的缩放。

(5)UMG 中的核心算法:
M_CircleMiniMap 将此材质设置为 动态材质 , 默认的zoom 设置为1

在这里插入图片描述
将此动态材质 直接赋值给 当前 UMG 的 Brush 的材质。
获取场景的bus , 创建Bus 变量; 获取场景中对应2d 地图中心位置的mesh ,创建center 变量。

在这里插入图片描述
 实时获取车头的Roation 中的 Roll 赋值给 Rotation ; 此处一定要注意: 我们首先要保证 车头的 X 轴的朝向 和 世界坐标系的朝向是一致的。 这样获得的是 Rotation 材质最正常的一个 rotation 。如果bus 自身默认的 X 轴朝向和 世界坐标系的不一样, 我们就从它的组件中 找一个 和 世界坐标系 X 轴朝向一致的 。 此案例中 我们取得是 springArm 的 Rotation 。

在这里插入图片描述

Bus 相对于中心位置的偏移量和材质中 X , Y 的偏移量的映射。

用 bus 和 center 之间的方向向量 除以 边界的长度 。获取 bus 和中心点 之间的距离 在 X , y 方向 偏移的百分比。

下面这个是从 bus 朝向center的 变量。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
上图中 B 代表的是 我们假定 bus 的位置。 从B 指向A ; 注意 世界坐标系 XY 的朝向。 上图的顶视图 要和 我们的 二维图像的基本方向是保持一致的,尤其是 XY 坐标系的朝向。
材质贴图的 x 正方向向右。 Y 正方向向下。 正好和上图场景中的对应,
这样 标量(数值大小) X 和 Y 可以正好和 材质中的 相对应。

向量BA->代表 =(deltA, deltB)
deltA <0 ; deltB>0
在这里插入图片描述
对应的材质贴图中 ,我们希望贴图的中心位置 在B 位置。
贴图移动准则:VIP !!!
左减右加(X 方向)
上减下加(Y方向)
所以,我们将材质移动到B 位置 需要 向右(x 取正) ; 向上(Y 取—)
材质变量 X(+数) = (deltA <0) * (-1)
材质变量 Y(-数) = (deltB >0) * (-1)
全部都反向。
在这里插入图片描述

材质节点 中 一段关键的逻辑。
第一层; 不管怎样缩放。 在材质的中心区域 永远都有一个张完整图的中心位置。
第二层,保证 bus 所在位置,永远在在 当前材质的中心位置,前提是 对材质坐标系进行了 X , Y 偏移。

最后UMG 中显示的效果如下所示:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值