首页 > 解决方案 > Unity - 删除在另一个实例之上产生的其他实例,但保留原始实例

问题描述

因此,我正在 Unity 中进行一些关卡生成工作,并且我在世界各地生成了一些立方体。我现在让它工作的方式是,每块地砖都会检查它周围是否有“空气”,如果有,它会生成一堵墙。但是,如果我遇到这样的情况,即这是两层楼之间的空气块,它会产生两堵墙。有没有一种方法可以检查同一位置是否有多个,但要防止其中一个被破坏?谢谢!

ps 同样一文不值,我使用 Raycast 放置墙壁,因此地板将使用一击检查 4 个方向。我认为它在放置立方体时会不停地检查所有 4 个方向。所以,可能是个问题...

标签: unity3dprocedural-generation

解决方案


你可以尝试在光线投射的地方制作一个重叠球体,这样就可以检测到某个半径内的所有对象(彼此之间的对象也是如此)

void GetWalls(Vector3 raycastTargetPosition, float radius)
    {
        Collider[] hitColliders = Physics.OverlapSphere(center, radius);
        int i = 0;
        while (i < hitColliders.Length)
        {
            hitColliders[i].SendMessage("AddDamage");
            i++;
        }
    }

推荐阅读