我有一个类似于Minecraft的体素世界。每个体素(块)的大小为1x1x1。
我想用给定的爆炸半径来计算特定位置的爆炸破坏,这意味着游戏将在该位置附近破坏体素(给定所需的半径)。
这意味着我想要执行此操作的某种功能:
void DestroyBlocks(Vector3 position, int radius){
if(block is on radius)
destroy(blockPosition);
}
我该怎么做?
答案 0 :(得分:3)
这是通过Physics.OverlapSphere
函数完成的:
void DestroyBlocksWithinRadius(Vector3 center, float radius)
{
Collider[] result = Physics.OverlapSphere(center, radius);
for (int i = 0; i < result.Length; i++)
Destroy(result[i].gameObject);
}
如果没有对撞机,请通过标签找到它们并检查距离来手动进行:
void DestroyBlocksWithinRadius(Vector3 center, float radius)
{
GameObject[] result = GameObject.FindGameObjectsWithTag("Voxels");
for (int i = 0; i < result.Length; i++)
{
Transform tempTrans = result[i].transform;
float distanceSqr = (center - tempTrans.position).sqrMagnitude;
if (distanceSqr < radius)
Destroy(tempTrans.gameObject);
}
}