UE4 二维地图的缩放与拖拽操作
纯蓝图实现
拖拽和缩放
基础搭建
新建一个MainUI,CanvasPanel_Parent存放地图和CanvasPanel_Child,注意MainUI锚点为左上角,否则无法正确获取大小与位置,Map为要缩放和拖拽的地图,CanvasPanel_Child存放小图标,Map和CanvasPanel_Child锚点为铺满全屏,否则缩放会有问题,Image和TextBlock为固定ui,用来对比操作是否正确,不重要。
新建ChildUI,用做小图标,大小为20*20(可随意),只需要两张图片即可
添加小图标
position为图标位置的二维数组,ChildUISizeHalf为子UI的大小的一半,这里为10*10。Icon Overlap为后续图标重叠的方法,暂时不需要连。
地图缩放
首先设置大小,Magnify布尔值判断是放大还是缩小,放大则为1.1倍,缩小则为0.9倍。总的限制在1-5倍,width为原视口宽,这里值1920,height为原视口高,这里值为1080。
然后因为大小改变了,需要调整CanvasPanel_Parent的位置,用scale来存储缩放的值方便后续使用。位置和大小的获取与计算都是为了以鼠标为中心进行放大,并且确保缩小后ui不会露出边界之外。
每次缩放调整了CanvasPanel_Parent之后,小图标的位置也需要更新,ChildUISizeHalf为小图标的一半大小,这里为10*10。
地图拖拽
两个方法即可
实现部分
在关卡蓝图调用MainUI对应方法
效果展示
小图标的重合显示
简单的以区域划分的方式重合,所以不会很自然。
在MainUI里面新建一个存放ChildUI数组的结构体,以及以vector2d为key,结构体为value的变量。
创建用来确定缩放后小图标重叠的层级依据和范围大小的变量
下面是Icon Overlap方法的逻辑,TemporaryUI为ChildUI的数组
在子UI里简单改一下颜色用来区分
最后在添加小图标之后和每次缩放之后调用