【发布时间】:2018-07-26 16:17:48
【问题描述】:
我有一个体素世界,类似于 Minecraft。每个体素(块)的大小为 1x1x1。
我想用给定的爆炸半径计算某个位置的爆炸破坏,这意味着游戏将围绕该位置破坏体素(给定所需的半径)。
意思是我想要某种功能:
void DestroyBlocks(Vector3 position, int radius){
if(block is on radius)
destroy(blockPosition);
}
我该怎么做?
【问题讨论】:
-
你是否将块存储在某个地方(例如列表、数组)或在块上有标签?
-
您可以使用 Vector3.Distance,检查给定块的中心与爆炸中心之间的距离。
-
@Andreaジーティーオー 我明白了,所以我只是计算距离,看看它是否不大于半径?
-
首先检查边界框
if (dx <= radius || dy <= radius) ...,然后检查实际距离Vector3.Distance。要计算距离,您必须计算增量的平方根sqrt(),这会花费很多。但是如果它在边界框之外肯定会更远,所以首先检查它会给你一个巨大的加速。 -
@SpoocyCrep:完全正确