首页 > 解决方案 > 计算 Minecraft 爆炸

问题描述

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

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

这意味着我想要某种功能来做到这一点:

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

我怎样才能做到这一点?

标签: c#unity3d

解决方案


这是通过以下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);
    }
}

推荐阅读