【问题标题】:UE4 get all players in FoVUE4 在 FoV 中获取所有玩家
【发布时间】:2018-08-24 21:31:57
【问题描述】:

我正在尝试构建一个包含玩家 FoV 锥体中的所有玩家棋子的数组。出于明显的性能原因,我宁愿不必遍历 GetAllActorsofClass。这将在每个滴答声中完成。

【问题讨论】:

  • 那么您想查看当前播放器视图中有哪些播放器?我认为有几种方法可以做到这一点,从collision filtering 到使用点积或对撞机进行一些碰撞检测。这肯定是一件相当昂贵的事情,但我认为你不需要使用GetAllActorsOfClass
  • 技术上不“可见”。它们可能被遮挡甚至被剔除。将平截头体可视化为延伸到 800m 的体积。结果中将返回范围内的任何棋子。

标签: unreal-engine4 unreal-blueprint


【解决方案1】:

GetAllActorsOfClass 迭代该类事物的哈希表。即使有 100 名玩家,也不太可能非常昂贵。我想“让演员进入平截头体”会在幕后做到这一点。

如果您可以使用它,则可以从那里使用 ConvertWorldLocationToScreenLocation 并将其与 GetViewportSize 的屏幕边界坐标进行比较。

我能想到的唯一不使用 GetAllActorsOfClass 的方法是使用巨大的多框轨迹计算平截头体“末端”的矩形大小,并基于点积进行过滤。痕迹很便宜,点积很便宜。它是否比 GetAllActorsOfClass 便宜取决于您的游戏。

如果性能确实是个问题,最好的解决方案是使用代码。根据您的实现,您也许可以使用蓝图本地化来获得额外的提升,而无需深入研究代码。

【讨论】:

    【解决方案2】:

    使用 MultiSphereTrace 从你的玩家到他的 FOV 方向并循环遍历命中结果。

    确保正确设置碰撞层,以便轨迹仅与目标玩家交互。

    我在我的手机游戏上执行此操作,每帧大约有 10-20 个演员,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      相关资源
      最近更新 更多