计算Minecraft爆炸

时间:2018-07-25 10:00:22

标签: c# unity3d

我有一个类似于Minecraft的体素世界。每个体素(块)的大小为1x1x1。

我想用给定的爆炸半径来计算特定位置的爆炸破坏,这意味着游戏将在该位置附近破坏体素(给定所需的半径)。

这意味着我想要执行此操作的某种功能:

void DestroyBlocks(Vector3 position, int radius){   
if(block is on radius)   
destroy(blockPosition);
}

我该怎么做?

1 个答案:

答案 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);
    }
}