游戏中的小地图

来源:互联网 发布:vb里头mid函数查找 编辑:程序博客网 时间:2024/06/06 03:32

一. 制作小地图资源

1. 制作小地图图片(顶视图抓图)。

打开现有工程或者创建新工程,在透视图上按G键,隐藏不在关卡中显示的内容,选取顶视角,抓图(1024*1024或者其他长宽相同的图片)。

创建文件夹Texture,将图片命名为LittleMap放到文件夹内。双击打开LittleMap,选择【Texture Group】= UI。


2. 制作小地图边框和角色标记

下载或制作小地图边框T_MiniMappFrameInk01,粘贴到文件夹Texture中,双击打开,在视图中打开Red、Green、Blue和Alpha通道,【Texture Group】=UI

下载或制作小地图角色标记T_MIniMapArrow02,粘贴到文件夹Texture中,双击打开,在视图中打开Red、Green、Blue和Alpha通道,【Texture Group】=UI

二. 小地图绘制原理

1. 以大地图左上角为原点设定坐标系


MiniMap World Origin 假设为大地图的原点

worldsizeX,大地图的X轴长度

worldsizeY,大地图的Y轴长度

MiniMap World LeftTop Pos 小地图左上角位置

MiniMapViewSize 小地图尺寸

MiniMap World Pawn Pos 大地图角色位置

MiniMapActor 地图参数对象

2. MiniMap World Origin(大地图原点)和WorldSizeX/WorldSizeY的确定

拖动一个物体点到地图左上角,以物体的Location作为大地图原点的向量值,删除或还原物体。例如案例中原点为(x=-2000,y=-2000)。

3. MiniMapViewSize的确定

一般会把小地图设置成长宽相等的按实际比例的正方形,假设比例为(1:10),若大地图长宽为4000,则小地图长宽为400

4. MiniMap World Pown Pos (角色坐标)的确定

可在蓝图中通过,Get Player Pawn 节点 -> Get Actor Location 获取角色坐标向量。

5. MiniMap World LeftTop Pos (小地图左上角坐标)的确定

设角色坐标X为Px,坐标Y为Py,则小地图左上角坐标MMX=X-小地图宽/2,MMY=Y-小地图高/2。

三. MiniMapActor(定义地图的相关参数,例如小地图材质、显示尺寸等)

1. 创建蓝图类BP_MiniMapActor,继承Actor。

2. 添加根组件Billboard(广告牌),并在根组件中添加盒体碰撞体Box,设置【Box Extent】X=大地图宽/2,【Box Extent】Y=大地图高/2。

3. 拖动BP_MiniMapActor对象到大地图中,命名为MiniMapActor,将其置于大地图中心点,使得Box与大地图重合(因为大地图未必在世界地图原点,因此可以用Box的边框来作为大地图的参照)。

4. 在BP_MiniMapActor中设置公有参数变量

添加公有Vector 2D变量MiniMapWorldSize作为大地图的长和宽,设置默认值均为4000。

添加公有Vector 2D变量MiniMapViewSize作为小地图的长和宽,设置默认值均为400。

添加公有Vector 2D变量MiniMapUISize作为绘制小地图的长和宽,设置默认值均为256。

添加公有Vector 2D变量MiniMapUIPaddingScreen作为绘制小地图区域距离屏幕右下角的间距,设置默认值X、Y均为50。小地图左上角显示位置X=屏幕宽度-MiniMapUIPaddingScreen[X](50)-MiniMapUISize[X](X=256);Y=屏幕高度-MiniMapUIPaddingScreen[Y](50)-MiniMapUISize[Y](256)。

四. 创建自定义HUD绘制纹理(4.13.2不能运行自定义HUD,4.18.1可以)

1. 创建蓝图类BP_MiniMapHUD,继承HUD,用于绘制渲染小地图。

2. 打开关卡中的世界设置(World Setting),【Game Mode Override】选择ThirdPersonGameMode,【HUD class】选择BP_MiniMapHUD。

3. 创建与BP_MiniMapActor类对应变量


4. 从HUD中绘制纹理


5. 绘制材质

使用材质绘制小地图,比纹理绘制要合适,因为可以增加小地图遮罩或者比例缩放等功能。

文件夹中创建材质类M_MiniMap,双击打开。在内容浏览器中选中LittleMap文件,在M_MiniMap中按住T键点击鼠标左键,生成Texture Simple。将白色输出连接到Emissive Color(自发光颜色,不能连接基本颜色,因为会由于没有光线导致材质呈现黑色)上,点击保存。


把Draw Texture节点替换成 Draw Meterial 节点


6. 为材质添加遮罩

材质类的细节中【Blend Mode】设置成 Translucent(可透明遮罩,Masked代表完全不透明遮罩)。

添加RadialGradientExponential节点(放射性渐变系数),并连接材质的Opacity(不透明性),添加一个常量10,连接Density节点(设置放射硬度)。


7. 移动和缩放遮罩

在M_MiniMap材质类中添加TextureCoordinate(UV坐标,二维向量,快捷键U)设为A,添加Constant2Vector(二维向量常量,默认值X=0..125,Y=1,快捷键2)设为B,让A、B两个二维向量相加得到二维向量C,添加Constant(一维Float常量,默认值设为2,快捷键1)设为D,让C与D相乘获得二维向量E,将E连接到放射性渐变系数节点的UVs上,来控制遮罩的位置和大小。


8. 将小地图材质设计成材质父类

关键点是将小地图的控制常量参数转换成变量参数

a. 把Texture Simple 转换成参数(Convert to Parameter,或者直接添加TextureSimpleParameter2D节点并设置为LittleMap材质),命名为MapTexture;

b. 把遮罩偏移转换成参数(或者直接添加VecterParameter节点来替换),命名为MaskOffset,因为VecterParameter是四位向量,因此需要ComponentMask节点来通过阻断来获取二维向量(在ComponentMask节点中勾选R和G即可),连接Add节点的B;

c. 把遮罩洗漱转换成参数(或者直接添加ScalarParameter节点来替换),命名为MaskTile,连接Multiply节点的B。

d. 保存


9. 创建小地图材质实例

在内容浏览器中右键点击M_MiniMap,选择创建材质实例,命名为MI_LittleMap。

五. HUD与小地图的交互

1. 在BP_MiniMapHUD中定义变量与函数用于获取地图的原始参数(BP_MiniMap的实例)

创建Vecter2D变量MiniMapWorldOrigin,用于存储小地图左上角二维坐标。

创建Vecter2D变量MiniMapWorldPawnPos,用于存储小地图中玩家的二维坐标。

创建Vecter2D变量MiniMapViewOrigin,用于存储小地图显示区域左上角二维坐标。

创建Vecter2D变量MiniMapViewSize,用于存储小地图显示的尺寸。

创建GetMiniMapActor函数用于获取地图参数默认设置(BP_MiniMap在世界中的实例),返回BP_MiniMapActor的引用,注意将该函数设置为纯虚函数!



2. 开放地图材质作为参数变量(将BP_MiniMapActor增加Material Instance实例的属性)

打开BP_MiniMapActor,增加Material Instance实例的属性,命名为MiniMapMI。

在世界地图中找到BP_MiniMapActor的实例,将【MiniMapMI】属性设置为MI_LittleMap(表示该地图使用MI_LittleMap作为小地图)。

3. 将MiniMapActor的材质MiniMapMI变成动态材质(动态材质允许修改材质中各项参数)。

在BP_MiniMapHUD中创建Material Instance Dynamic类型的属性MiniMapDMI,用于保存动态的材质实例。

在HUD运行时,MiniMapActor找到材质,并保存为动态材质实例MiniMapDMI。

需要注意GetMiniMapActor必须是纯虚函数才可以如下图方式使用。


4.