返回
使用UE4蓝图创建小地图:雷达篇
开发工具
2023-10-04 12:29:40
雷达图是小地图的一种常见类型,主要以角色为中心,在没有场景的情况下显示玩家周围的环境。它通常用来标记敌我单位的朝向,从而提高玩家的态势感知能力。在本文中,我们将逐步讲解如何在UE4蓝图中实现这种雷达图。
世界坐标与屏幕坐标
首先,我们需要理解世界坐标和屏幕坐标之间的关系。世界坐标是指游戏世界中的实际位置,而屏幕坐标是指在屏幕上显示的位置。要将世界坐标转换为屏幕坐标,我们需要使用Project World to Screen 函数。
可见性测试
接下来,我们需要进行可见性测试,以确定敌我NPC是否可见。我们可以使用Line Trace by Channel 函数来投射一条射线从角色到NPC。如果射线击中任何障碍物,则表示NPC不可见。
雷达图实现
有了这些基础知识,我们就可以开始实现雷达图了:
- 创建小地图用户界面(UI) :在蓝图编辑器中,创建一个画布(Canvas Panel)小部件,作为小地图的容器。
- 创建NPC图标 :创建一个纹理或图像来表示敌我NPC。
- 获取NPC数据 :从游戏中获取敌我NPC的朝向和位置。
- 将世界坐标转换为屏幕坐标 :使用Project World to Screen 函数将NPC的世界坐标转换为屏幕坐标。
- 更新UI :将NPC图标添加到画布小部件,并更新其位置和朝向以匹配转换后的屏幕坐标。
- 可见性测试 :对于每个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蓝图创建自己的雷达小地图。雷达图可以显著提高玩家的态势感知能力,在各种类型的游戏中都有广泛应用。