You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE4.27:获取以玩家为中心、排除小半径的随机导航点

解决UE4.27中AI环形漫游导航点生成问题

核心思路

要实现以玩家为中心、排除内部攻击半径的环形区域内的随机漫游导航点,需先在环形范围内生成均匀分布的随机坐标,再验证坐标的导航可用性,同时结合现有票务系统规避AI间的干扰。

具体实现步骤

1. 生成环形区域内的均匀随机坐标

直接生成线性随机半径会导致点集中在环形外侧,需通过极坐标转换生成均匀分布的点:

  • 生成0到2π之间的随机角度
  • 生成内半径到外半径之间的随机长度(对0-1的随机数开平方后,乘以内外半径差再加内半径,保证分布均匀)
  • 将极坐标转换为基于玩家位置的世界坐标

C++ 代码示例

FVector GetRandomRingPoint(FVector PlayerLocation, float InnerRadius, float OuterRadius)
{
    // 生成0到2π的随机角度
    float Angle = FMath::FRandRange(0.f, 2.f * PI);
    // 生成环形内均匀分布的随机半径
    float Radius = InnerRadius + FMath::Sqrt(FMath::FRand()) * (OuterRadius - InnerRadius);
    // 计算偏移量并转换为世界坐标
    FVector Offset = FVector(FMath::Cos(Angle) * Radius, FMath::Sin(Angle) * Radius, 0.f);
    return PlayerLocation + Offset;
}

蓝图实现逻辑

  • 用Random Float in Range生成0到6.28(2π)的随机角度
  • 用Random Float in Range生成0到1的随机数,取平方根后乘以(外半径-内半径),再加内半径得到随机半径
  • 通过Cos/Sin函数计算XY轴偏移量,与玩家位置相加得到目标坐标

2. 验证导航可用性与规避干扰

生成坐标后需做双重校验:

  • 调用Project Point to Navigation将坐标投影到导航网格,判断是否为有效导航点
  • 结合现有票务系统,检查该点与当前攻击AI的距离是否大于「攻击半径+AI碰撞半径」,避免干扰攻击流程

3. 优化漫游稳定性

  • 增加重试机制:若生成的点无法投影到导航网格,重新生成(设置3-5次重试上限,避免死循环)
  • 为漫游AI添加动态避让:当检测到有AI正在攻击时,临时扩大环形外半径,或避开攻击AI的朝向区域

4. 导航查询过滤器方案(替代)

若坐标生成法稳定性不足,可自定义导航过滤规则:

  • 创建UNavigationQueryFilter子类,在过滤逻辑中排除玩家攻击半径内的区域
  • 调用Find Random Point in Navigable Radius时传入该过滤器,直接查询环形区域内的有效导航点

常见问题修正

  • 点集中在环形外侧:检查随机半径生成逻辑,必须对随机数开平方保证均匀分布
  • 导航点无效:确认导航网格覆盖环形区域,或增加重试次数

内容的提问来源于stack exchange,提问作者Nathan Tilly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:01:00