如何找到距离transform.position最接近的X个对象?

问题描述 投票:0回答:1

此代码显示了如何在一组碰撞碰撞器中找到最接近的单个对象(例如碰撞器)。我想找到最近的 4 个物体。 (这个数字可能会增加)

        Collider closestCollider = null;
        float closestColliderDistance = float.PositiveInfinity;

        foreach (Collider collider in hitColliders)
        {
            float distance = Vector3.Distance(collider.transform.position, transform.position);
            if (distance < closestColliderDistance)
            {
                closestColliderDistance = distance;
                closestCollider = collider;
            }
        }
        if (closestCollider != null)
        {
            // handle it
        }

所以我想返回距离transform.position最近的4个对象的一组(例如数组)。这个不需要排序。它可以基于此代码或全新的代码。

也许它可能涉及某种按距离排序的列表,然后获取前 X 个项目。也许是林克? (不知道怎么用)

unity-game-engine
1个回答
0
投票

嗯,是的,只需按距离排序,然后拿 X 件物品

var xClosestItems = hitColliders.OrderBy(o => (o.transform.position - transform.position).sqrMagnitude).Take(X).ToList();

其中

X
表示达到所需数量 - 如果
hitColliders
没有足够的物品,可以减少

© www.soinside.com 2019 - 2024. All rights reserved.