游戏中的小地图
来源:互联网 发布: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.
- 游戏中的小地图
- Unity3d-游戏中的小地图制作
- cegui游戏小地图
- Unity游戏小地图生成
- Unity 控制游戏对象,显示小地图
- 小地图的制作,游戏中的导航仪,minimap制作(继续我们的仙剑demo)
- [OpenGL] 二维游戏中的卷动地图
- 《阴阳师》游戏中的小窍门
- Unity3D游戏开发之小地图的实现
- Unity3D游戏开发之小地图的实现
- Unity3D游戏开发之小地图的实现
- 简单2步学会Unity3D 游戏圆形小地图!
- Unity3D游戏开发之小地图的实现
- 游戏实例——简单小地图制作
- Untiy3D制作简单的矩形游戏小地图(NGUI)
- 关于不规则多块的游戏小地图逻辑
- 游戏地图
- Unity摄像机的使用一:双游戏地图或设置小地图
- ArrayList源码分析
- 基于OpenSSL颁发数字证书的一个完整实例
- rosen老师 的gitconfig配置
- python3爬虫伪装代理IP
- 老僧长谈设计模式-7-代理模式2
- 游戏中的小地图
- spring boot实战(第三篇)事件监听源码分析
- 华为打开日志方法
- LinkedList源码分析
- Hadoop之Hive
- 每天回顾linux命令(date)
- 树的遍历
- 操作系统安装
- listview的单选