c# - 计算 Minecraft 爆炸
问题描述
我有一个体素世界,类似于 Minecraft。每个体素(块)的大小为 1x1x1。
我想用给定的爆炸半径计算某个位置的爆炸破坏,这意味着在该位置附近游戏将破坏体素(给定所需的半径)。
这意味着我想要某种功能来做到这一点:
void DestroyBlocks(Vector3 position, int radius){
if(block is on radius)
destroy(blockPosition);
}
我怎样才能做到这一点?
解决方案
这是通过以下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);
}
}
推荐阅读
- javascript - 如何将switch语句中的模板字符串与js匹配?
- regex - 需要将3个公式组合成1个
- angularjs - 如何检查所有和取消选中Angularjs中的所有静态复选框?
- azure - 使用 Terraform 的 Azure 数据工厂诊断设置的资源特定目标表
- if-statement - 我可以将 IF 函数的值转换为方程式吗?
- go - 如何自动使测试在包内并行运行?
- python-3.x - 如何将具有相同标题的数据移动到同一列中?
- php - 网站的 PHP 文件显示错误:找不到驱动程序
- android - 如何在抽屉布局下方放置广告?
- java - 每当 App 在 android pie 中被杀死时,服务也会被杀死