返回

使用UE4蓝图创建小地图:雷达篇

开发工具

雷达图是小地图的一种常见类型,主要以角色为中心,在没有场景的情况下显示玩家周围的环境。它通常用来标记敌我单位的朝向,从而提高玩家的态势感知能力。在本文中,我们将逐步讲解如何在UE4蓝图中实现这种雷达图。

世界坐标与屏幕坐标

首先,我们需要理解世界坐标和屏幕坐标之间的关系。世界坐标是指游戏世界中的实际位置,而屏幕坐标是指在屏幕上显示的位置。要将世界坐标转换为屏幕坐标,我们需要使用Project World to Screen 函数。

可见性测试

接下来,我们需要进行可见性测试,以确定敌我NPC是否可见。我们可以使用Line Trace by Channel 函数来投射一条射线从角色到NPC。如果射线击中任何障碍物,则表示NPC不可见。

雷达图实现

有了这些基础知识,我们就可以开始实现雷达图了:

  1. 创建小地图用户界面(UI) :在蓝图编辑器中,创建一个画布(Canvas Panel)小部件,作为小地图的容器。
  2. 创建NPC图标 :创建一个纹理或图像来表示敌我NPC。
  3. 获取NPC数据 :从游戏中获取敌我NPC的朝向和位置。
  4. 将世界坐标转换为屏幕坐标 :使用Project World to Screen 函数将NPC的世界坐标转换为屏幕坐标。
  5. 更新UI :将NPC图标添加到画布小部件,并更新其位置和朝向以匹配转换后的屏幕坐标。
  6. 可见性测试 :对于每个NPC,执行可见性测试。如果NPC可见,则显示其图标;否则,隐藏其图标。

代码示例

// 获取NPC位置
NPCLocation = GetActorLocation(NPC);

// 将世界坐标转换为屏幕坐标
NPCScreenLocation = Project World To Screen(NPCLocation);

// 添加NPC图标到小地图
NPCIcon = CreateWidget(this, NPCIconClass);
NPCIcon.AddToViewport();

// 更新NPC图标的位置和朝向
NPCIcon.SetPositionInViewport(NPCScreenLocation);
NPCIcon.SetRenderRotation(NPCRotation);

// 进行可见性测试
HitResult = LineTraceByChannel(CameraLocation, NPCLocation, ECC_Visibility, false);

// 如果可见,显示NPC图标
if (HitResult.bBlockingHit == false)
{
    NPCIcon.SetVisibility(ESlateVisibility::Visible);
}
// 否则,隐藏NPC图标
else
{
    NPCIcon.SetVisibility(ESlateVisibility::Collapsed);
}

结论

通过遵循本文中的步骤,您将能够使用UE4蓝图创建自己的雷达小地图。雷达图可以显著提高玩家的态势感知能力,在各种类型的游戏中都有广泛应用。