【问题标题】:Tower Defense - Checking enemy distance?塔防 - 检查敌人的距离?
【发布时间】:2015-11-16 14:19:51
【问题描述】:

这个问题可能与嵌套的 for 循环/if 语句重复,但请多多包涵。我正在做塔防的过程,我需要检查敌人是否在塔的范围内。我可以做一些物理圈,但我觉得最好的方法是检查每个敌人的塔的距离,看看它是否在半径内。问题是,如果有 500 个“敌人”和 30 个塔,那么每帧就有 15,000 个 if 语句。这会是性能重吗?我知道让这更容易的唯一方法是尝试这些:

  • 仅检查每 x 帧(每秒执行 10 次 if 循环,而不是 100 次)
  • 做一些猜测 - 附近的塔将使用与他们相同的塔

有没有其他方法可以做到这一点,或者我是否走上正轨?

【问题讨论】:

  • Unity 没有内置碰撞检测功能吗?您是否尝试过集成它?与内置碰撞检测器的分析比较结果是什么?为什么要自己检测碰撞?

标签: if-statement nested nested-loops


【解决方案1】:

每次你检查时是否所有敌人都会移动?您可以在每次敌人移动时重新计算,哪些塔位于该特定敌人的半径内,然后仅更新那些移动到敌人半径内或移出敌人半径的塔的敌人列表。您需要将每个敌人映射到一个塔列表,以及将每个塔映射到一个敌人列表。

【讨论】:

  • 投反对票 - 请评论你投反对票的原因,以便我可以在必要时改进我的答案,单独投反对票并没有多大帮助。
  • 感谢您的回复!所以总而言之,在一帧中执行这么多 if 语句会不会影响性能?
  • 是的,这样可以去掉很多不必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多