Поместите объект без наложения других

У меня проблема в одном из моих проектов в единстве. В основном у меня есть система, в которой вы щелкаете объект, а затем щелкаете где-то внутри области, и объект перемещается в эту позицию. проблема в том, что эти объекты не могут перекрываться. И они не могут использовать физику. обнаруживать столкновения друг с другом. Я работал над этим в течение долгого времени, я получил кое-что, но все еще не полностью работал, и я надеялся, что кто-то мог помочь мне.

Что я в основном делаю, так это нахожу все объекты рядом с кликом, а затем, если есть некоторые, просто вычисляю направления между кликом и этими объектами, а затем добавляю их в положение, которое, кажется, работает, иногда они не перекрываются в другой раз, когда они делают, и они пойти далеко, и мне нужно, чтобы они были рядом с щелчком.

код:

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;
}

поведение:

1 ответ

Вы можете легко сделать это, используя Physics2D.OverlapCircleAll

public static Collider2D [] OverlapCircleAll (точка вектора 2, радиус с плавающей точкой, int layerMask = DefaultRaycastLayers, число с плавающей точкой minDepth = -Mathf.Infinity, число с плавающей точкой maxDepth = Mathf.Infinity);

этот метод возвращает массив коллайдеров, вы можете просто проверить перекрытие, если длина возвращаемого массива больше единицы и может обрабатываться соответствующим образом.

Другие вопросы по тегам