0

我在一个统一的项目中遇到问题。我基本上有一个系统,您单击一个对象,然后单击一个区域内的某个位置,该对象就会到达该位置。问题是这些对象不能重叠。他们不能使用物理学。检测相互碰撞。我已经为此工作了很长时间,我得到了一些东西,但仍然没有完全工作,我希望有人可以帮助我。

我基本上做的是让所有对象靠近点击,然后如果有一些只是计算点击和这些对象之间的方向,然后将它们添加到似乎工作的位置,有时它们不会重叠,其他时候它们会重叠去很远,我需要他们靠近点击。

代码:

public Vector3 GetPossiblePosition(List<GameObject> nearbyDiscs, Vector3 position)
{ 
    float initialY = transform.position.y;
    Vector3 idealPosition = position;
    List<Vector3> directions = new List<Vector3>();

    if(nearbyDiscs.Count > 0)
    {
        foreach (GameObject disc in nearbyDiscs)
        {
            Vector3 newDirection = position - disc.transform.position;
            directions.Add(newDirection);
        }

        for (int i = 0; i < directions.Count; i++)
        {
            idealPosition += directions[i] / directions.Count;
            List<GameObject> discs = CheckForNearbyDiscs(idealPosition);
            if (discs.Count < 1)
                break;
        }
    }
    idealPosition.y = initialY;
    return idealPosition;
}

行为:

在此处输入图像描述

4

1 回答 1

0

您可以使用Physics2D.OverlapCircleAll轻松完成此操作

公共静态 Collider2D[] OverlapCircleAll(Vector2 点,浮动半径,int layerMask = DefaultRaycastLayers,浮动 minDepth = -Mathf.Infinity,浮动 maxDepth = Mathf.Infinity);

此方法返回一个对撞机数组,如果返回数组的长度大于 1,您可以简单地检查重叠并进行相应处理。

于 2018-03-31T15:01:24.460 回答